diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/idevicerestore.c | 69 | ||||
-rw-r--r-- | src/idevicerestore.h | 1 | ||||
-rw-r--r-- | src/normal.c | 6 | ||||
-rw-r--r-- | src/normal.h | 2 |
4 files changed, 7 insertions, 71 deletions
diff --git a/src/idevicerestore.c b/src/idevicerestore.c index 606062c..3e346fc 100644 --- a/src/idevicerestore.c +++ b/src/idevicerestore.c @@ -59,33 +59,6 @@ void usage(int argc, char* argv[]) { printf("\n"); } -int get_build_count(plist_t buildmanifest) { - // fetch build identities array from BuildManifest - plist_t build_identities_array = plist_dict_get_item(buildmanifest, "BuildIdentities"); - if (!build_identities_array || plist_get_node_type(build_identities_array) != PLIST_ARRAY) { - error("ERROR: Unable to find build identities node\n"); - return -1; - } - - // check and make sure this identity exists in buildmanifest - return plist_array_get_size(build_identities_array); -} - -const char* get_build_name(plist_t build_identity, int identity) { - plist_t manifest_node = plist_dict_get_item(build_identity, "Manifest"); - if (!manifest_node || plist_get_node_type(manifest_node) != PLIST_DICT) { - error("ERROR: Unable to find restore manifest\n"); - return NULL; - } - - plist_t filesystem_info_node = plist_dict_get_item(manifest_node, "Info"); - if (!filesystem_info_node || plist_get_node_type(filesystem_info_node) != PLIST_DICT) { - error("ERROR: Unable to find filesystem info node\n"); - return NULL; - } - return NULL; -} - int main(int argc, char* argv[]) { int opt = 0; int optindex = 0; @@ -223,46 +196,6 @@ int main(int argc, char* argv[]) { } } - // devices are listed in order from oldest to newest - // devices that come after iPod2g require personalized firmwares - plist_t tss_request = NULL; - if (client->device->index > DEVICE_IPOD2G) { - info("Creating TSS request\n"); - // fetch the device's ECID for the TSS request - if (get_ecid(client, &ecid) < 0 || ecid == 0) { - error("ERROR: Unable to find device ECID\n"); - return -1; - } - debug("Found ECID %llu\n", ecid); - - // fetch the SHSH blobs for this build identity - if (get_shsh_blobs(client, ecid, build_identity, &tss) < 0) { - // this might fail if the TSS server doesn't have the saved blobs for the - // update identity, so go ahead and try again with the restore identity - if (client->flags & FLAG_ERASE > 0) { - info("Unable to fetch SHSH blobs for upgrade, retrying with full restore\n"); - build_identity = get_build_identity(client, buildmanifest, 0); - if (build_identity == NULL) { - error("ERROR: Unable to find restore identity\n"); - plist_free(buildmanifest); - return -1; - } - - if (get_shsh_blobs(client, ecid, build_identity, &tss) < 0) { - // if this fails then no SHSH blobs have been saved for this firmware - error("ERROR: Unable to fetch SHSH blobs for this firmware\n"); - plist_free(buildmanifest); - return -1; - } - - } else { - error("ERROR: Unable to fetch SHSH blobs for this firmware\n"); - plist_free(buildmanifest); - return -1; - } - } - } - // Extract filesystem from IPSW and return its name char* filesystem = NULL; if (extract_filesystem(client, ipsw, build_identity, &filesystem) < 0) { @@ -629,8 +562,10 @@ const char* get_build_name(plist_t build_identity, int identity) { error("ERROR: Unable to find filesystem info node\n"); return NULL; } + return NULL; } + int extract_filesystem(struct idevicerestore_client_t* client, const char* ipsw, plist_t build_identity, char** filesystem) { char* filename = NULL; diff --git a/src/idevicerestore.h b/src/idevicerestore.h index 1fadf15..d3d89a0 100644 --- a/src/idevicerestore.h +++ b/src/idevicerestore.h @@ -34,6 +34,7 @@ extern "C" { void usage(int argc, char* argv[]); int check_mode(struct idevicerestore_client_t* client); int check_device(struct idevicerestore_client_t* client); +int get_build_count(plist_t buildmanifest); const char* get_build_name(plist_t build_identity, int identity); int get_ecid(struct idevicerestore_client_t* client, uint64_t* ecid); int get_bdid(struct idevicerestore_client_t* client, uint32_t* bdid); diff --git a/src/normal.c b/src/normal.c index 29f3911..c9a1b45 100644 --- a/src/normal.c +++ b/src/normal.c @@ -225,7 +225,7 @@ int normal_check_device(const char* uuid) { return idevicerestore_devices[i].index; } -int normal_enter_recovery(const char* uuid) { +int normal_enter_recovery(struct idevicerestore_client_t* client) { idevice_t device = NULL; irecv_client_t recovery = NULL; lockdownd_client_t lockdown = NULL; @@ -233,7 +233,7 @@ int normal_enter_recovery(const char* uuid) { idevice_error_t device_error = IDEVICE_E_SUCCESS; lockdownd_error_t lockdown_error = LOCKDOWN_E_SUCCESS; - device_error = idevice_new(&device, uuid); + device_error = idevice_new(&device, client->uuid); if (device_error != IDEVICE_E_SUCCESS) { error("ERROR: Unable to find device\n"); return -1; @@ -259,7 +259,7 @@ int normal_enter_recovery(const char* uuid) { lockdown = NULL; device = NULL; - if (recovery_open_with_timeout(&recovery) < 0) { + if (recovery_open_with_timeout(client) < 0) { error("ERROR: Unable to enter recovery mode\n"); return -1; } diff --git a/src/normal.h b/src/normal.h index 836d495..e86bf14 100644 --- a/src/normal.h +++ b/src/normal.h @@ -43,7 +43,7 @@ int normal_check_device(const char* uuid); int normal_client_new(struct idevicerestore_client_t* client); void normal_client_free(struct idevicerestore_client_t* client); int normal_open_with_timeout(struct idevicerestore_client_t* client); -int normal_enter_recovery(const char* uuid); +int normal_enter_recovery(struct idevicerestore_client_t* client); int normal_get_cpid(const char* uuid, uint32_t* cpid); int normal_get_bdid(const char* uuid, uint32_t* cpid); int normal_get_ecid(const char* uuid, uint64_t* ecid); |