summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Martin Szulecki2010-07-09 23:32:43 +0200
committerGravatar Martin Szulecki2010-07-09 23:32:43 +0200
commit333b7b972a52162de00940dfa75a2cbd87efd9de (patch)
tree24d22e960f0605c9004cfed570673d2268a16692
parent4ac94fe7a174f841b13734f98d237a8afac6cbab (diff)
downloadidevicerestore-333b7b972a52162de00940dfa75a2cbd87efd9de.tar.gz
idevicerestore-333b7b972a52162de00940dfa75a2cbd87efd9de.tar.bz2
Try five times to retrieve validation plist if it failed
This fixes hanging as the following payload message is not received initially but after polling the second time.
-rw-r--r--src/asr.c15
1 files changed, 12 insertions, 3 deletions
diff --git a/src/asr.c b/src/asr.c
index 2331660..3f9b392 100644
--- a/src/asr.c
+++ b/src/asr.c
@@ -137,6 +137,7 @@ int asr_perform_validation(idevice_connection_t asr, const char* filesystem) {
plist_t packet = NULL;
plist_t packet_info = NULL;
plist_t payload_info = NULL;
+ int attempts = 0;
file = fopen(filesystem, "rb");
if (file == NULL) {
@@ -172,6 +173,17 @@ int asr_perform_validation(idevice_connection_t asr, const char* filesystem) {
return -1;
}
+ if (packet == NULL) {
+ if (attempts < 5) {
+ info("Retrying to receive validation packet... %d\n", attempts);
+ attempts++;
+ sleep(1);
+ continue;
+ }
+ }
+
+ attempts = 0;
+
node = plist_dict_get_item(packet, "Command");
if (!node || plist_get_node_type(node) != PLIST_STRING) {
error("ERROR: Unable to find command node in validation request\n");
@@ -181,10 +193,7 @@ int asr_perform_validation(idevice_connection_t asr, const char* filesystem) {
if (!strcmp(command, "OOBData")) {
asr_handle_oob_data_request(asr, packet, file);
-
-
plist_free(packet);
-
} else if(!strcmp(command, "Payload")) {
plist_free(packet);
break;