summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/Makefile.am3
-rw-r--r--src/device_link_service.c20
-rw-r--r--src/device_link_service.h1
-rw-r--r--src/mobilebackup.c131
-rw-r--r--src/mobilebackup.h31
-rw-r--r--src/mobilesync.c18
6 files changed, 185 insertions, 19 deletions
diff --git a/src/Makefile.am b/src/Makefile.am
index f68f579..93cfbaf 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -15,4 +15,5 @@ libiphone_la_SOURCES = iphone.c iphone.h \
notification_proxy.c notification_proxy.h\
installation_proxy.c installation_proxy.h\
sbservices.c sbservices.h\
- mobilesync.c mobilesync.h
+ mobilesync.c mobilesync.h\
+ mobilebackup.c mobilebackup.h
diff --git a/src/device_link_service.c b/src/device_link_service.c
index b7d9ee8..9998fd0 100644
--- a/src/device_link_service.c
+++ b/src/device_link_service.c
@@ -253,6 +253,26 @@ device_link_service_error_t device_link_service_disconnect(device_link_service_c
return err;
}
+device_link_service_error_t device_link_service_process_message(device_link_service_client_t client, plist_t message)
+{
+ if (!client || !message)
+ return DEVICE_LINK_SERVICE_E_INVALID_ARG;
+
+ if (plist_get_node_type(message) != PLIST_DICT)
+ return DEVICE_LINK_SERVICE_E_INVALID_ARG;
+
+ plist_t array = plist_new_array();
+ plist_array_append_item(array, plist_new_string("DLMessageProcessMessage"));
+ plist_array_append_item(array, message);
+
+ device_link_service_error_t err = DEVICE_LINK_SERVICE_E_SUCCESS;
+ if (property_list_service_send_binary_plist(client->parent, array) != PROPERTY_LIST_SERVICE_E_SUCCESS) {
+ err = DEVICE_LINK_SERVICE_E_MUX_ERROR;
+ }
+ plist_free(array);
+ return err;
+}
+
/**
* Generic device link service send function.
*
diff --git a/src/device_link_service.h b/src/device_link_service.h
index e14d897..8345d57 100644
--- a/src/device_link_service.h
+++ b/src/device_link_service.h
@@ -44,6 +44,7 @@ typedef int16_t device_link_service_error_t;
device_link_service_error_t device_link_service_client_new(iphone_device_t device, uint16_t port, device_link_service_client_t *client);
device_link_service_error_t device_link_service_client_free(device_link_service_client_t client);
device_link_service_error_t device_link_service_version_exchange(device_link_service_client_t client, uint64_t version_major, uint64_t version_minor);
+device_link_service_error_t device_link_service_process_message(device_link_service_client_t client, plist_t message);
device_link_service_error_t device_link_service_disconnect(device_link_service_client_t client);
device_link_service_error_t device_link_service_send(device_link_service_client_t client, plist_t plist);
device_link_service_error_t device_link_service_receive(device_link_service_client_t client, plist_t *plist);
diff --git a/src/mobilebackup.c b/src/mobilebackup.c
new file mode 100644
index 0000000..5b81c7f
--- /dev/null
+++ b/src/mobilebackup.c
@@ -0,0 +1,131 @@
+/*
+ * mobilebackup.c
+ * Contains functions for the built-in MobileBackup client.
+ *
+ * Copyright (c) 2009 Martin Szulecki All Rights Reserved.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include <plist/plist.h>
+#include <string.h>
+#include <stdlib.h>
+#include <arpa/inet.h>
+
+#include "mobilebackup.h"
+#include "device_link_service.h"
+#include "debug.h"
+
+#define MBACKUP_VERSION_INT1 100
+#define MBACKUP_VERSION_INT2 0
+
+/**
+ * Convert an device_link_service_error_t value to an mobilebackup_error_t value.
+ * Used internally to get correct error codes when using device_link_service stuff.
+ *
+ * @param err An device_link_service_error_t error code
+ *
+ * @return A matching mobilebackup_error_t error code,
+ * MOBILEBACKUP_E_UNKNOWN_ERROR otherwise.
+ */
+static mobilebackup_error_t mobilebackup_error(device_link_service_error_t err)
+{
+ switch (err) {
+ case DEVICE_LINK_SERVICE_E_SUCCESS:
+ return MOBILEBACKUP_E_SUCCESS;
+ case DEVICE_LINK_SERVICE_E_INVALID_ARG:
+ return MOBILEBACKUP_E_INVALID_ARG;
+ case DEVICE_LINK_SERVICE_E_PLIST_ERROR:
+ return MOBILEBACKUP_E_PLIST_ERROR;
+ case DEVICE_LINK_SERVICE_E_MUX_ERROR:
+ return MOBILEBACKUP_E_MUX_ERROR;
+ case DEVICE_LINK_SERVICE_E_BAD_VERSION:
+ return MOBILEBACKUP_E_BAD_VERSION;
+ default:
+ break;
+ }
+ return MOBILEBACKUP_E_UNKNOWN_ERROR;
+}
+
+mobilebackup_error_t mobilebackup_client_new(iphone_device_t device, uint16_t port,
+ mobilebackup_client_t * client)
+{
+ if (!device || port == 0 || !client || *client)
+ return MOBILEBACKUP_E_INVALID_ARG;
+
+ device_link_service_client_t dlclient = NULL;
+ mobilebackup_error_t ret = mobilebackup_error(device_link_service_client_new(device, port, &dlclient));
+ if (ret != MOBILEBACKUP_E_SUCCESS) {
+ return ret;
+ }
+
+ mobilebackup_client_t client_loc = (mobilebackup_client_t) malloc(sizeof(struct mobilebackup_client_int));
+ client_loc->parent = dlclient;
+
+ /* perform handshake */
+ ret = mobilebackup_error(device_link_service_version_exchange(dlclient, MBACKUP_VERSION_INT1, MBACKUP_VERSION_INT2));
+ if (ret != MOBILEBACKUP_E_SUCCESS) {
+ debug_info("version exchange failed, error %d", ret);
+ mobilebackup_client_free(client_loc);
+ return ret;
+ }
+
+ *client = client_loc;
+
+ return ret;
+}
+
+mobilebackup_error_t mobilebackup_client_free(mobilebackup_client_t client)
+{
+ if (!client)
+ return MOBILEBACKUP_E_INVALID_ARG;
+ device_link_service_disconnect(client->parent);
+ mobilebackup_error_t err = mobilebackup_error(device_link_service_client_free(client->parent));
+ free(client);
+ return err;
+}
+
+/** Polls the iPhone for MobileBackup data.
+ *
+ * @param client The MobileBackup client
+ * @param plist A pointer to the location where the plist should be stored
+ *
+ * @return an error code
+ */
+mobilebackup_error_t mobilebackup_receive(mobilebackup_client_t client, plist_t * plist)
+{
+ if (!client)
+ return MOBILEBACKUP_E_INVALID_ARG;
+ mobilebackup_error_t ret = mobilebackup_error(device_link_service_receive(client->parent, plist));
+ return ret;
+}
+
+/** Sends MobileBackup data to the iPhone
+ *
+ * @note This function is low-level and should only be used if you need to send
+ * a new type of message.
+ *
+ * @param client The MobileBackup client
+ * @param plist The location of the plist to send
+ *
+ * @return an error code
+ */
+mobilebackup_error_t mobilebackup_send(mobilebackup_client_t client, plist_t plist)
+{
+ if (!client || !plist)
+ return MOBILEBACKUP_E_INVALID_ARG;
+ return mobilebackup_error(device_link_service_send(client->parent, plist));
+}
+
diff --git a/src/mobilebackup.h b/src/mobilebackup.h
new file mode 100644
index 0000000..04ebc45
--- /dev/null
+++ b/src/mobilebackup.h
@@ -0,0 +1,31 @@
+ /*
+ * mobilebackup.h
+ * Definitions for the mobilebackup service
+ *
+ * Copyright (c) 2009 Martin Szulecki All Rights Reserved.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+#ifndef MOBILEBACKUP_H
+#define MOBILEBACKUP_H
+
+#include "libiphone/mobilebackup.h"
+#include "device_link_service.h"
+
+struct mobilebackup_client_int {
+ device_link_service_client_t parent;
+};
+
+#endif
diff --git a/src/mobilesync.c b/src/mobilesync.c
index 3492673..15614b5 100644
--- a/src/mobilesync.c
+++ b/src/mobilesync.c
@@ -109,16 +109,6 @@ mobilesync_error_t mobilesync_receive(mobilesync_client_t client, plist_t * plis
if (!client)
return MOBILESYNC_E_INVALID_ARG;
mobilesync_error_t ret = mobilesync_error(device_link_service_receive(client->parent, plist));
-#ifndef STRIP_DEBUG_CODE
- if (ret != MOBILESYNC_E_SUCCESS) {
- return ret;
- }
- char *XMLContent = NULL;
- uint32_t length = 0;
- plist_to_xml(*plist, &XMLContent, &length);
- debug_info("plist size: %i\nbuffer :\n%s", length, XMLContent);
- free(XMLContent);
-#endif
return ret;
}
@@ -136,13 +126,5 @@ mobilesync_error_t mobilesync_send(mobilesync_client_t client, plist_t plist)
{
if (!client || !plist)
return MOBILESYNC_E_INVALID_ARG;
-
-#ifndef STRIP_DEBUG_CODE
- char *XMLContent = NULL;
- uint32_t length = 0;
- plist_to_xml(plist, &XMLContent, &length);
- debug_info("plist size: %i\nbuffer :\n%s", length, XMLContent);
- free(XMLContent);
-#endif
return mobilesync_error(device_link_service_send(client->parent, plist));
}