summaryrefslogtreecommitdiffstats
path: root/src/MobileSync.c
diff options
context:
space:
mode:
authorGravatar Nikias Bassen2010-01-06 22:13:09 +0100
committerGravatar Matt Colyer2010-01-09 14:50:30 -0800
commit69b4015bea6c32e523404e9784c225be8bfc0ef3 (patch)
tree0372dc59a4fd0af40dcec8dbfa9304d07406dfbe /src/MobileSync.c
parent6d6442dc2b021d1bce03575d118cacab0fd5ed24 (diff)
downloadlibimobiledevice-69b4015bea6c32e523404e9784c225be8bfc0ef3.tar.gz
libimobiledevice-69b4015bea6c32e523404e9784c225be8bfc0ef3.tar.bz2
use new plist helper functions
[#106 state:resolved] Signed-off-by: Matt Colyer <matt@colyer.name>
Diffstat (limited to 'src/MobileSync.c')
-rw-r--r--src/MobileSync.c69
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 */
44static 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
34mobilesync_error_t mobilesync_client_new(iphone_device_t device, int dst_port, 59mobilesync_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