diff options
author | 2025-09-26 00:08:09 +0200 | |
---|---|---|
committer | 2025-09-26 00:08:09 +0200 | |
commit | 47bf8b5f4cd8f4b1fdfdd2cf834b40ae1dc14e0d (patch) | |
tree | dd3d337f962051481d38f844e0647bba7cb5b0de /src | |
parent | 105ac0c399dd043a8c300b89019f6ea0befc1e51 (diff) | |
download | idevicerestore-47bf8b5f4cd8f4b1fdfdd2cf834b40ae1dc14e0d.tar.gz idevicerestore-47bf8b5f4cd8f4b1fdfdd2cf834b40ae1dc14e0d.tar.bz2 |
restore: Handle new Centauri and Jasmine (Savage) updaters
Also Vinyl shows up with some devices, so we handle this too.
Diffstat (limited to 'src')
-rw-r--r-- | src/restore.c | 23 |
1 files changed, 20 insertions, 3 deletions
diff --git a/src/restore.c b/src/restore.c index aa92cf2..46e56f3 100644 --- a/src/restore.c +++ b/src/restore.c @@ -3749,6 +3749,7 @@ static int restore_send_firmware_updater_data(struct idevicerestore_client_t* cl } plist_get_string_val(p_updater_name, &s_updater_name); + logger_dump_plist(LL_DEBUG, p_info, 1); if (strcmp(s_updater_name, "SE") == 0) { fwdict = restore_get_se_firmware_data(client, p_info, arguments); @@ -3758,10 +3759,14 @@ static int restore_send_firmware_updater_data(struct idevicerestore_client_t* cl } } else if (strcmp(s_updater_name, "Savage") == 0) { const char *fwtype = "Savage"; - plist_t p_info2 = plist_dict_get_item(p_info, "YonkersDeviceInfo"); - if (p_info2 && plist_get_node_type(p_info2) == PLIST_DICT) { + plist_t p_info_yonkers = plist_dict_get_item(p_info, "YonkersDeviceInfo"); + plist_t p_info_jasmine = plist_dict_get_item(p_info, "JasmineIR1DeviceInfo"); + if (PLIST_IS_DICT(p_info_yonkers)) { fwtype = "Yonkers"; - fwdict = restore_get_yonkers_firmware_data(client, p_info2, arguments); + fwdict = restore_get_yonkers_firmware_data(client, p_info_yonkers, arguments); + } else if (PLIST_IS_DICT(p_info_jasmine)) { + fwtype = "Jasmine"; + fwdict = restore_get_generic_firmware_data(client, p_info_jasmine, arguments); } else { fwdict = restore_get_savage_firmware_data(client, p_info, arguments); } @@ -3811,6 +3816,18 @@ static int restore_send_firmware_updater_data(struct idevicerestore_client_t* cl logger(LL_ERROR, "%s: Couldn't get %s firmware data\n", __func__, s_updater_name); goto error_out; } + } else if (strcmp(s_updater_name, "Centauri") == 0) { + fwdict = restore_get_generic_firmware_data(client, p_info, arguments); + if (fwdict == NULL) { + logger(LL_ERROR, "%s: Couldn't get %s firmware data\n", __func__, s_updater_name); + goto error_out; + } + } else if (strcmp(s_updater_name, "Vinyl") == 0) { + fwdict = restore_get_generic_firmware_data(client, p_info, arguments); + if (fwdict == NULL) { + logger(LL_ERROR, "%s: Couldn't get %s firmware data\n", __func__, s_updater_name); + goto error_out; + } } else { logger(LL_ERROR, "%s: Got unknown updater name '%s', trying to discover from device generated request.\n", __func__, s_updater_name); fwdict = restore_get_generic_firmware_data(client, p_info, arguments); |