summaryrefslogtreecommitdiffstats
path: root/src/MobileSync.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/MobileSync.c')
-rw-r--r--src/MobileSync.c36
1 files changed, 28 insertions, 8 deletions
diff --git a/src/MobileSync.c b/src/MobileSync.c
index 9e52f32..77d2710 100644
--- a/src/MobileSync.c
+++ b/src/MobileSync.c
@@ -54,9 +54,21 @@ mobilesync_error_t mobilesync_client_new(iphone_device_t device, int dst_port,
54 /* first receive version */ 54 /* first receive version */
55 ret = mobilesync_recv(client_loc, &array); 55 ret = mobilesync_recv(client_loc, &array);
56 56
57 plist_t msg_node = plist_find_node_by_string(array, "DLMessageVersionExchange"); 57 plist_t msg_node = plist_array_get_item(array, 0);
58 plist_t ver_1 = plist_get_next_sibling(msg_node); 58
59 plist_t ver_2 = plist_get_next_sibling(ver_1); 59 char* msg = NULL;
60 plist_type type = plist_get_node_type(msg_node);
61 if (PLIST_STRING == type) {
62 plist_get_string_val(msg_node, &msg);
63 }
64 if (PLIST_STRING != type || strcmp(msg, "DLMessageVersionExchange") || plist_array_get_size(array) < 3) {
65 log_debug_msg("%s: ERROR: MobileSync client expected a version exchange !\n", __func__);
66 }
67 free(msg);
68 msg = NULL;
69
70 plist_t ver_1 = plist_array_get_item(array, 1);
71 plist_t ver_2 = plist_array_get_item(array, 2);
60 72
61 plist_type ver_1_type = plist_get_node_type(ver_1); 73 plist_type ver_1_type = plist_get_node_type(ver_1);
62 plist_type ver_2_type = plist_get_node_type(ver_2); 74 plist_type ver_2_type = plist_get_node_type(ver_2);
@@ -85,16 +97,24 @@ mobilesync_error_t mobilesync_client_new(iphone_device_t device, int dst_port,
85 array = NULL; 97 array = NULL;
86 98
87 ret = mobilesync_recv(client_loc, &array); 99 ret = mobilesync_recv(client_loc, &array);
88 plist_t rep_node = plist_find_node_by_string(array, "DLMessageDeviceReady"); 100 plist_t rep_node = plist_array_get_item(array, 0);
89 101
90 if (rep_node) { 102 type = plist_get_node_type(rep_node);
91 ret = MOBILESYNC_E_SUCCESS; 103 if (PLIST_STRING == type) {
92 *client = client_loc; 104 plist_get_string_val(rep_node, &msg);
105 }
106 if (PLIST_STRING != type || strcmp(msg, "DLMessageDeviceReady")) {
107 log_debug_msg("%s: ERROR: MobileSync client failed to start session !\n", __func__);
108 ret = MOBILESYNC_E_BAD_VERSION;
93 } 109 }
94 else 110 else
95 { 111 {
96 ret = MOBILESYNC_E_BAD_VERSION; 112 ret = MOBILESYNC_E_SUCCESS;
113 *client = client_loc;
97 } 114 }
115 free(msg);
116 msg = NULL;
117
98 plist_free(array); 118 plist_free(array);
99 array = NULL; 119 array = NULL;
100 } 120 }