diff options
Diffstat (limited to 'src/MobileSync.c')
| -rw-r--r-- | src/MobileSync.c | 36 |
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 | } |
