diff options
Diffstat (limited to 'tools/iphonebackup.c')
| -rw-r--r-- | tools/iphonebackup.c | 72 |
1 files changed, 42 insertions, 30 deletions
diff --git a/tools/iphonebackup.c b/tools/iphonebackup.c index 5124ea5..c5ac49d 100644 --- a/tools/iphonebackup.c +++ b/tools/iphonebackup.c | |||
| @@ -430,6 +430,7 @@ int main(int argc, char *argv[]) | |||
| 430 | char *filename_source = NULL; | 430 | char *filename_source = NULL; |
| 431 | char *format_size = NULL; | 431 | char *format_size = NULL; |
| 432 | gboolean is_manifest = FALSE; | 432 | gboolean is_manifest = FALSE; |
| 433 | uint8_t b = 0; | ||
| 433 | do { | 434 | do { |
| 434 | mobilebackup_receive(mobilebackup, &message); | 435 | mobilebackup_receive(mobilebackup, &message); |
| 435 | node = plist_array_get_item(message, 0); | 436 | node = plist_array_get_item(message, 0); |
| @@ -452,32 +453,36 @@ int main(int argc, char *argv[]) | |||
| 452 | plist_get_uint_val(node, &c); | 453 | plist_get_uint_val(node, &c); |
| 453 | 454 | ||
| 454 | /* get source filename */ | 455 | /* get source filename */ |
| 455 | node = plist_dict_get_item(node_tmp, "DLFileSource"); | 456 | node = plist_dict_get_item(node_tmp, "BackupManifestKey"); |
| 456 | plist_get_string_val(node, &filename_source); | 457 | b = 0; |
| 457 | 458 | if (node) { | |
| 458 | if (!strcmp(filename_source, "/tmp/Manifest.plist")) | 459 | plist_get_bool_val(node, &b); |
| 459 | is_manifest = TRUE; | 460 | } |
| 460 | else | 461 | is_manifest = (b == 1) ? TRUE: FALSE; |
| 461 | is_manifest = FALSE; | 462 | |
| 462 | 463 | /* increased received size for each completed file */ | |
| 463 | if (c == 2) { | 464 | if ((c == 2) && (!is_manifest)) { |
| 464 | /* increased received size for each completed file */ | 465 | /* get source filename */ |
| 465 | if (!is_manifest) { | 466 | node = plist_dict_get_item(node_tmp, "DLFileSource"); |
| 466 | node = plist_dict_get_item(node_tmp, "DLFileAttributesKey"); | 467 | plist_get_string_val(node, &filename_source); |
| 467 | node = plist_dict_get_item(node, "FileSize"); | 468 | |
| 468 | plist_get_uint_val(node, &length); | 469 | node = plist_dict_get_item(node_tmp, "DLFileAttributesKey"); |
| 469 | 470 | node = plist_dict_get_item(node, "FileSize"); | |
| 470 | backup_real_size += length; | 471 | plist_get_uint_val(node, &length); |
| 471 | file_index++; | 472 | |
| 472 | 473 | backup_real_size += length; | |
| 473 | format_size = g_format_size_for_display(backup_real_size); | 474 | file_index++; |
| 474 | printf("(%s", format_size); | 475 | |
| 475 | g_free(format_size); | 476 | format_size = g_format_size_for_display(backup_real_size); |
| 476 | format_size = g_format_size_for_display(backup_total_size); | 477 | printf("(%s", format_size); |
| 477 | printf("/%s): ", format_size); | 478 | g_free(format_size); |
| 478 | g_free(format_size); | 479 | format_size = g_format_size_for_display(backup_total_size); |
| 479 | printf("Received file %s... ", filename_source); | 480 | printf("/%s): ", format_size); |
| 480 | } | 481 | g_free(format_size); |
| 482 | printf("Received file %s... ", filename_source); | ||
| 483 | |||
| 484 | if (filename_source) | ||
| 485 | free(filename_source); | ||
| 481 | } | 486 | } |
| 482 | 487 | ||
| 483 | /* save <hash>.mdinfo */ | 488 | /* save <hash>.mdinfo */ |
| @@ -498,11 +503,21 @@ int main(int argc, char *argv[]) | |||
| 498 | if (node_tmp && file_path) { | 503 | if (node_tmp && file_path) { |
| 499 | node = plist_dict_get_item(node_tmp, "DLFileDest"); | 504 | node = plist_dict_get_item(node_tmp, "DLFileDest"); |
| 500 | plist_get_string_val(node, &file_path); | 505 | plist_get_string_val(node, &file_path); |
| 501 | file_ext = (char *)g_strconcat(file_path, ".mddata", NULL); | 506 | |
| 507 | if (!is_manifest) | ||
| 508 | file_ext = (char *)g_strconcat(file_path, ".mddata", NULL); | ||
| 509 | else | ||
| 510 | file_ext = g_strdup(file_path); | ||
| 511 | |||
| 502 | filename_mddata = g_build_path(G_DIR_SEPARATOR_S, backup_directory, file_ext, NULL); | 512 | filename_mddata = g_build_path(G_DIR_SEPARATOR_S, backup_directory, file_ext, NULL); |
| 503 | node_tmp = plist_array_get_item(message, 1); | 513 | node_tmp = plist_array_get_item(message, 1); |
| 504 | plist_get_data_val(node_tmp, &buffer, &length); | 514 | plist_get_data_val(node_tmp, &buffer, &length); |
| 515 | |||
| 516 | /* activate currently sent manifest */ | ||
| 505 | buffer_to_filename(filename_mddata, buffer, length); | 517 | buffer_to_filename(filename_mddata, buffer, length); |
| 518 | if ((c == 2) && (is_manifest)) { | ||
| 519 | rename(filename_mddata, manifest_path); | ||
| 520 | } | ||
| 506 | free(buffer); | 521 | free(buffer); |
| 507 | buffer = NULL; | 522 | buffer = NULL; |
| 508 | g_free(filename_mddata); | 523 | g_free(filename_mddata); |
| @@ -512,9 +527,6 @@ int main(int argc, char *argv[]) | |||
| 512 | printf("DONE\n"); | 527 | printf("DONE\n"); |
| 513 | } | 528 | } |
| 514 | 529 | ||
| 515 | if (filename_source) | ||
| 516 | free(filename_source); | ||
| 517 | |||
| 518 | if (file_ext) | 530 | if (file_ext) |
| 519 | free(file_ext); | 531 | free(file_ext); |
| 520 | 532 | ||
