commit d09a4a921f571246a1b3cb3d58a8e5f88ffde363 Author: Martin Szulecki Date: Sat Apr 18 19:41:17 2009 +0200 Correctly receive bigger plist data required for mobile sync diff --git a/src/MobileSync.c b/src/MobileSync.c index b16a51b..8d9e407 100644 --- a/src/MobileSync.c +++ b/src/MobileSync.c @@ -137,15 +137,26 @@ iphone_error_t iphone_msync_recv(iphone_msync_client_t client, plist_t * plist) return IPHONE_E_INVALID_ARG; iphone_error_t ret = IPHONE_E_UNKNOWN_ERROR; char *receive; - uint32_t datalen = 0, bytes = 0; + uint32_t datalen = 0, bytes = 0, received_bytes = 0; ret = iphone_mux_recv(client->connection, (char *) &datalen, sizeof(datalen), &bytes); datalen = ntohl(datalen); + bytes = 0; receive = (char *) malloc(sizeof(char) * datalen); - ret = iphone_mux_recv(client->connection, receive, datalen, &bytes); - plist_from_bin(receive, bytes, plist); + /* fill buffer and request more packets if needed */ + while ((received_bytes < datalen) && (ret == IPHONE_E_SUCCESS)) { + ret = iphone_mux_recv(client->connection, receive + received_bytes, datalen, &bytes); + received_bytes += bytes; + } + + if (ret != IPHONE_E_SUCCESS) { + free(receive); + return ret; + } + + plist_from_bin(receive, received_bytes, plist); char *XMLContent = NULL; uint32_t length = 0;