diff options
| author | 2010-01-06 22:13:09 +0100 | |
|---|---|---|
| committer | 2010-01-09 14:50:30 -0800 | |
| commit | 69b4015bea6c32e523404e9784c225be8bfc0ef3 (patch) | |
| tree | 0372dc59a4fd0af40dcec8dbfa9304d07406dfbe | |
| parent | 6d6442dc2b021d1bce03575d118cacab0fd5ed24 (diff) | |
| download | libimobiledevice-69b4015bea6c32e523404e9784c225be8bfc0ef3.tar.gz libimobiledevice-69b4015bea6c32e523404e9784c225be8bfc0ef3.tar.bz2 | |
use new plist helper functions
[#106 state:resolved]
Signed-off-by: Matt Colyer <matt@colyer.name>
| -rw-r--r-- | src/MobileSync.c | 69 |
1 files changed, 31 insertions, 38 deletions
diff --git a/src/MobileSync.c b/src/MobileSync.c index 77d2710..76aefa0 100644 --- a/src/MobileSync.c +++ b/src/MobileSync.c | |||
| @@ -31,6 +31,31 @@ | |||
| 31 | #define MSYNC_VERSION_INT1 100 | 31 | #define MSYNC_VERSION_INT1 100 |
| 32 | #define MSYNC_VERSION_INT2 100 | 32 | #define MSYNC_VERSION_INT2 100 |
| 33 | 33 | ||
| 34 | /** | ||
| 35 | * Convert an iphone_error_t value to an mobilesync_error_t value. | ||
| 36 | * Used internally to get correct error codes when using plist helper | ||
| 37 | * functions. | ||
| 38 | * | ||
| 39 | * @param err An iphone_error_t error code | ||
| 40 | * | ||
| 41 | * @return A matching mobilesync_error_t error code, | ||
| 42 | * MOBILESYNC_E_UNKNOWN_ERROR otherwise. | ||
| 43 | */ | ||
| 44 | static mobilesync_error_t iphone_to_mobilesync_error(iphone_error_t err) | ||
| 45 | { | ||
| 46 | switch (err) { | ||
| 47 | case IPHONE_E_SUCCESS: | ||
| 48 | return MOBILESYNC_E_SUCCESS; | ||
| 49 | case IPHONE_E_INVALID_ARG: | ||
| 50 | return MOBILESYNC_E_INVALID_ARG; | ||
| 51 | case IPHONE_E_PLIST_ERROR: | ||
| 52 | return MOBILESYNC_E_PLIST_ERROR; | ||
| 53 | default: | ||
| 54 | break; | ||
| 55 | } | ||
| 56 | return MOBILESYNC_E_UNKNOWN_ERROR; | ||
| 57 | } | ||
| 58 | |||
| 34 | mobilesync_error_t mobilesync_client_new(iphone_device_t device, int dst_port, | 59 | mobilesync_error_t mobilesync_client_new(iphone_device_t device, int dst_port, |
| 35 | mobilesync_client_t * client) | 60 | mobilesync_client_t * client) |
| 36 | { | 61 | { |
| @@ -160,35 +185,19 @@ mobilesync_error_t mobilesync_recv(mobilesync_client_t client, plist_t * plist) | |||
| 160 | { | 185 | { |
| 161 | if (!client || !plist || (plist && *plist)) | 186 | if (!client || !plist || (plist && *plist)) |
| 162 | return MOBILESYNC_E_INVALID_ARG; | 187 | return MOBILESYNC_E_INVALID_ARG; |
| 163 | mobilesync_error_t ret = MOBILESYNC_E_UNKNOWN_ERROR; | ||
| 164 | char *receive = NULL; | ||
| 165 | uint32_t datalen = 0, bytes = 0, received_bytes = 0; | ||
| 166 | |||
| 167 | ret = iphone_device_recv(client->connection, (char *) &datalen, sizeof(datalen), &bytes); | ||
| 168 | datalen = ntohl(datalen); | ||
| 169 | |||
| 170 | receive = (char *) malloc(sizeof(char) * datalen); | ||
| 171 | |||
| 172 | /* fill buffer and request more packets if needed */ | ||
| 173 | while ((received_bytes < datalen) && (ret == MOBILESYNC_E_SUCCESS)) { | ||
| 174 | ret = iphone_device_recv(client->connection, receive + received_bytes, datalen - received_bytes, &bytes); | ||
| 175 | received_bytes += bytes; | ||
| 176 | } | ||
| 177 | 188 | ||
| 189 | mobilesync_error_t ret = iphone_to_mobilesync_error(iphone_device_receive_plist(client->connection, plist)); | ||
| 178 | if (ret != MOBILESYNC_E_SUCCESS) { | 190 | if (ret != MOBILESYNC_E_SUCCESS) { |
| 179 | free(receive); | ||
| 180 | return MOBILESYNC_E_MUX_ERROR; | 191 | return MOBILESYNC_E_MUX_ERROR; |
| 181 | } | 192 | } |
| 182 | 193 | ||
| 183 | plist_from_bin(receive, received_bytes, plist); | 194 | #ifndef STRIP_DEBUG_CODE |
| 184 | free(receive); | ||
| 185 | |||
| 186 | char *XMLContent = NULL; | 195 | char *XMLContent = NULL; |
| 187 | uint32_t length = 0; | 196 | uint32_t length = 0; |
| 188 | plist_to_xml(*plist, &XMLContent, &length); | 197 | plist_to_xml(*plist, &XMLContent, &length); |
| 189 | log_dbg_msg(DBGMASK_MOBILESYNC, "%s: plist size: %i\nbuffer :\n%s\n", __func__, length, XMLContent); | 198 | log_dbg_msg(DBGMASK_MOBILESYNC, "%s: plist size: %i\nbuffer :\n%s\n", __func__, length, XMLContent); |
| 190 | free(XMLContent); | 199 | free(XMLContent); |
| 191 | 200 | #endif | |
| 192 | return ret; | 201 | return ret; |
| 193 | } | 202 | } |
| 194 | 203 | ||
| @@ -207,28 +216,12 @@ mobilesync_error_t mobilesync_send(mobilesync_client_t client, plist_t plist) | |||
| 207 | if (!client || !plist) | 216 | if (!client || !plist) |
| 208 | return MOBILESYNC_E_INVALID_ARG; | 217 | return MOBILESYNC_E_INVALID_ARG; |
| 209 | 218 | ||
| 219 | #ifndef STRIP_DEBUG_CODE | ||
| 210 | char *XMLContent = NULL; | 220 | char *XMLContent = NULL; |
| 211 | uint32_t length = 0; | 221 | uint32_t length = 0; |
| 212 | plist_to_xml(plist, &XMLContent, &length); | 222 | plist_to_xml(plist, &XMLContent, &length); |
| 213 | log_dbg_msg(DBGMASK_MOBILESYNC, "%s: plist size: %i\nbuffer :\n%s\n", __func__, length, XMLContent); | 223 | log_dbg_msg(DBGMASK_MOBILESYNC, "%s: plist size: %i\nbuffer :\n%s\n", __func__, length, XMLContent); |
| 214 | free(XMLContent); | 224 | free(XMLContent); |
| 215 | 225 | #endif | |
| 216 | char *content = NULL; | 226 | return (iphone_device_send_binary_plist(client->connection, plist) == IPHONE_E_SUCCESS ? MOBILESYNC_E_SUCCESS : MOBILESYNC_E_MUX_ERROR); |
| 217 | length = 0; | ||
| 218 | |||
| 219 | plist_to_bin(plist, &content, &length); | ||
| 220 | |||
| 221 | char *real_query; | ||
| 222 | int bytes; | ||
| 223 | mobilesync_error_t ret = MOBILESYNC_E_UNKNOWN_ERROR; | ||
| 224 | |||
| 225 | real_query = (char *) malloc(sizeof(char) * (length + 4)); | ||
| 226 | length = htonl(length); | ||
| 227 | memcpy(real_query, &length, sizeof(length)); | ||
| 228 | memcpy(real_query + 4, content, ntohl(length)); | ||
| 229 | |||
| 230 | ret = iphone_device_send(client->connection, real_query, ntohl(length) + sizeof(length), (uint32_t*)&bytes); | ||
| 231 | free(real_query); | ||
| 232 | return (ret == 0 ? MOBILESYNC_E_SUCCESS: MOBILESYNC_E_MUX_ERROR); | ||
| 233 | } | 227 | } |
| 234 | |||
