From 8567650b1c2f44e2c53fb54b0e916ee3a0869add Mon Sep 17 00:00:00 2001 From: Nikias Bassen Date: Tue, 29 Jun 2021 04:21:25 +0200 Subject: Make device mode specific code more consistent --- src/common.c | 12 +++--- src/common.h | 19 +++++++--- src/dfu.c | 12 +++--- src/idevicerestore.c | 103 +++++++++++++++++++++++++-------------------------- src/normal.c | 7 ++-- src/recovery.c | 2 +- src/restore.c | 32 ++++++++++------ 7 files changed, 102 insertions(+), 85 deletions(-) (limited to 'src') diff --git a/src/common.c b/src/common.c index b5c88ee..4dbabc0 100644 --- a/src/common.c +++ b/src/common.c @@ -57,12 +57,12 @@ #define MAX_PRINT_LEN 64*1024 struct idevicerestore_mode_t idevicerestore_modes[] = { - { 0, "WTF" }, - { 1, "DFU" }, - { 2, "Recovery" }, - { 3, "Restore" }, - { 4, "Normal" }, - { -1, NULL } + { 0, "Unknown" }, + { 1, "WTF" }, + { 2, "DFU" }, + { 3, "Recovery" }, + { 4, "Restore" }, + { 5, "Normal" }, }; int idevicerestore_debug = 0; diff --git a/src/common.h b/src/common.h index 5d23299..3a4c069 100644 --- a/src/common.h +++ b/src/common.h @@ -41,12 +41,19 @@ extern "C" { #include "idevicerestore.h" #include "thread.h" -#define MODE_UNKNOWN -1 -#define MODE_WTF 0 -#define MODE_DFU 1 -#define MODE_RECOVERY 2 -#define MODE_RESTORE 3 -#define MODE_NORMAL 4 +#define _MODE_UNKNOWN 0 +#define _MODE_WTF 1 +#define _MODE_DFU 2 +#define _MODE_RECOVERY 3 +#define _MODE_RESTORE 4 +#define _MODE_NORMAL 5 + +#define MODE_UNKNOWN &idevicerestore_modes[_MODE_UNKNOWN] +#define MODE_WTF &idevicerestore_modes[_MODE_WTF] +#define MODE_DFU &idevicerestore_modes[_MODE_DFU] +#define MODE_RECOVERY &idevicerestore_modes[_MODE_RECOVERY] +#define MODE_RESTORE &idevicerestore_modes[_MODE_RESTORE] +#define MODE_NORMAL &idevicerestore_modes[_MODE_NORMAL] #define FLAG_QUIT 1 diff --git a/src/dfu.c b/src/dfu.c index ac4f1cd..a675c53 100644 --- a/src/dfu.c +++ b/src/dfu.c @@ -399,7 +399,7 @@ int dfu_enter_recovery(struct idevicerestore_client_t* client, plist_t build_ide if (mode != IRECV_K_DFU_MODE) { info("NOTE: device is not in DFU mode, assuming recovery mode.\n"); - client->mode = &idevicerestore_modes[MODE_RECOVERY]; + client->mode = MODE_RECOVERY; return 0; } @@ -417,7 +417,7 @@ int dfu_enter_recovery(struct idevicerestore_client_t* client, plist_t build_ide /* reconnect */ debug("Waiting for device to disconnect...\n"); cond_wait_timeout(&client->device_event_cond, &client->device_event_mutex, 10000); - if (client->mode != &idevicerestore_modes[MODE_UNKNOWN] || (client->flags & FLAG_QUIT)) { + if (client->mode != MODE_UNKNOWN || (client->flags & FLAG_QUIT)) { mutex_unlock(&client->device_event_mutex); if (!(client->flags & FLAG_QUIT)) { error("ERROR: Device did not disconnect. Possibly invalid iBSS. Reset device and try again.\n"); @@ -426,7 +426,7 @@ int dfu_enter_recovery(struct idevicerestore_client_t* client, plist_t build_ide } debug("Waiting for device to reconnect...\n"); cond_wait_timeout(&client->device_event_cond, &client->device_event_mutex, 10000); - if ((client->mode != &idevicerestore_modes[MODE_DFU] && client->mode != &idevicerestore_modes[MODE_RECOVERY]) || (client->flags & FLAG_QUIT)) { + if ((client->mode != MODE_DFU && client->mode != MODE_RECOVERY) || (client->flags & FLAG_QUIT)) { mutex_unlock(&client->device_event_mutex); if (!(client->flags & FLAG_QUIT)) { error("ERROR: Device did not reconnect in DFU or recovery mode. Possibly invalid iBSS. Reset device and try again.\n"); @@ -560,7 +560,7 @@ int dfu_enter_recovery(struct idevicerestore_client_t* client, plist_t build_ide return -1; } - if (client->mode == &idevicerestore_modes[MODE_RECOVERY]) { + if (client->mode == MODE_RECOVERY) { sleep(1); if (irecv_send_command_breq(client->dfu->client, "go", 1) != IRECV_E_SUCCESS) { mutex_unlock(&client->device_event_mutex); @@ -577,7 +577,7 @@ int dfu_enter_recovery(struct idevicerestore_client_t* client, plist_t build_ide debug("Waiting for device to disconnect...\n"); cond_wait_timeout(&client->device_event_cond, &client->device_event_mutex, 10000); - if (client->mode != &idevicerestore_modes[MODE_UNKNOWN] || (client->flags & FLAG_QUIT)) { + if (client->mode != MODE_UNKNOWN || (client->flags & FLAG_QUIT)) { mutex_unlock(&client->device_event_mutex); if (!(client->flags & FLAG_QUIT)) { error("ERROR: Device did not disconnect. Possibly invalid %s. Reset device and try again.\n", (client->build_major > 8) ? "iBEC" : "iBSS"); @@ -586,7 +586,7 @@ int dfu_enter_recovery(struct idevicerestore_client_t* client, plist_t build_ide } debug("Waiting for device to reconnect in recovery mode...\n"); cond_wait_timeout(&client->device_event_cond, &client->device_event_mutex, 10000); - if (client->mode != &idevicerestore_modes[MODE_RECOVERY] || (client->flags & FLAG_QUIT)) { + if (client->mode != MODE_RECOVERY || (client->flags & FLAG_QUIT)) { mutex_unlock(&client->device_event_mutex); if (!(client->flags & FLAG_QUIT)) { error("ERROR: Device did not reconnect in recovery mode. Possibly invalid %s. Reset device and try again.\n", (client->build_major > 8) ? "iBEC" : "iBSS"); diff --git a/src/idevicerestore.c b/src/idevicerestore.c index 024e60b..fa25ff4 100644 --- a/src/idevicerestore.c +++ b/src/idevicerestore.c @@ -247,13 +247,13 @@ static void idevice_event_cb(const idevice_event_t *event, void *userdata) } if (normal_check_mode(client) == 0) { mutex_lock(&client->device_event_mutex); - client->mode = &idevicerestore_modes[MODE_NORMAL]; + client->mode = MODE_NORMAL; debug("%s: device %016" PRIx64 " (udid: %s) connected in normal mode\n", __func__, client->ecid, client->udid); cond_signal(&client->device_event_cond); mutex_unlock(&client->device_event_mutex); } else if (client->ecid && restore_check_mode(client) == 0) { mutex_lock(&client->device_event_mutex); - client->mode = &idevicerestore_modes[MODE_RESTORE]; + client->mode = MODE_RESTORE; debug("%s: device %016" PRIx64 " (udid: %s) connected in restore mode\n", __func__, client->ecid, client->udid); cond_signal(&client->device_event_cond); mutex_unlock(&client->device_event_mutex); @@ -261,7 +261,7 @@ static void idevice_event_cb(const idevice_event_t *event, void *userdata) } else if (event->event == IDEVICE_DEVICE_REMOVE) { if (client->udid && !strcmp(event->udid, client->udid)) { mutex_lock(&client->device_event_mutex); - client->mode = &idevicerestore_modes[MODE_UNKNOWN]; + client->mode = MODE_UNKNOWN; debug("%s: device %016" PRIx64 " (udid: %s) disconnected\n", __func__, client->ecid, client->udid); client->ignore_device_add_events = 0; cond_signal(&client->device_event_cond); @@ -281,19 +281,19 @@ static void irecv_event_cb(const irecv_device_event_t* event, void *userdata) mutex_lock(&client->device_event_mutex); switch (event->mode) { case IRECV_K_WTF_MODE: - client->mode = &idevicerestore_modes[MODE_WTF]; + client->mode = MODE_WTF; break; case IRECV_K_DFU_MODE: - client->mode = &idevicerestore_modes[MODE_DFU]; + client->mode = MODE_DFU; break; case IRECV_K_RECOVERY_MODE_1: case IRECV_K_RECOVERY_MODE_2: case IRECV_K_RECOVERY_MODE_3: case IRECV_K_RECOVERY_MODE_4: - client->mode = &idevicerestore_modes[MODE_RECOVERY]; + client->mode = MODE_RECOVERY; break; default: - client->mode = &idevicerestore_modes[MODE_UNKNOWN]; + client->mode = MODE_UNKNOWN; } debug("%s: device %016" PRIx64 " (udid: %s) connected in %s mode\n", __func__, client->ecid, (client->udid) ? client->udid : "N/A", client->mode->string); cond_signal(&client->device_event_cond); @@ -302,7 +302,7 @@ static void irecv_event_cb(const irecv_device_event_t* event, void *userdata) } else if (event->type == IRECV_DEVICE_REMOVE) { if (client->ecid && event->device_info->ecid == client->ecid) { mutex_lock(&client->device_event_mutex); - client->mode = &idevicerestore_modes[MODE_UNKNOWN]; + client->mode = MODE_UNKNOWN; debug("%s: device %016" PRIx64 " (udid: %s) disconnected\n", __func__, client->ecid, (client->udid) ? client->udid : "N/A"); cond_signal(&client->device_event_cond); mutex_unlock(&client->device_event_mutex); @@ -345,7 +345,7 @@ int idevicerestore_start(struct idevicerestore_client_t* client) // check which mode the device is currently in so we know where to start mutex_lock(&client->device_event_mutex); cond_wait_timeout(&client->device_event_cond, &client->device_event_mutex, 10000); - if (client->mode == &idevicerestore_modes[MODE_UNKNOWN] || (client->flags & FLAG_QUIT)) { + if (client->mode == MODE_UNKNOWN || (client->flags & FLAG_QUIT)) { mutex_unlock(&client->device_event_mutex); error("ERROR: Unable to discover device mode. Please make sure a device is attached.\n"); return -1; @@ -354,7 +354,7 @@ int idevicerestore_start(struct idevicerestore_client_t* client) info("Found device in %s mode\n", client->mode->string); mutex_unlock(&client->device_event_mutex); - if (client->mode->index == MODE_WTF) { + if (client->mode == MODE_WTF) { unsigned int cpid = 0; if (dfu_client_new(client) != 0) { @@ -429,7 +429,7 @@ int idevicerestore_start(struct idevicerestore_client_t* client) free(wtftmp); cond_wait_timeout(&client->device_event_cond, &client->device_event_mutex, 10000); - if (client->mode != &idevicerestore_modes[MODE_DFU] || (client->flags & FLAG_QUIT)) { + if (client->mode != MODE_DFU || (client->flags & FLAG_QUIT)) { mutex_unlock(&client->device_event_mutex); /* TODO: verify if it actually goes from 0x1222 -> 0x1227 */ error("ERROR: Failed to put device into DFU from WTF mode\n"); @@ -447,7 +447,7 @@ int idevicerestore_start(struct idevicerestore_client_t* client) idevicerestore_progress(client, RESTORE_STEP_DETECT, 0.2); info("Identified device as %s, %s\n", client->device->hardware_model, client->device->product_type); - if ((client->flags & FLAG_PWN) && (client->mode->index != MODE_DFU)) { + if ((client->flags & FLAG_PWN) && (client->mode != MODE_DFU)) { error("ERROR: you need to put your device into DFU mode to pwn it.\n"); return -1; } @@ -455,7 +455,7 @@ int idevicerestore_start(struct idevicerestore_client_t* client) if (client->flags & FLAG_PWN) { recovery_client_free(client); - if (client->mode->index != MODE_DFU) { + if (client->mode != MODE_DFU) { error("ERROR: Device needs to be in DFU mode for this option.\n"); return -1; } @@ -590,7 +590,7 @@ int idevicerestore_start(struct idevicerestore_client_t* client) return 0; } - if (client->mode->index == MODE_RESTORE) { + if (client->mode == MODE_RESTORE) { if (client->flags & FLAG_ALLOW_RESTORE_MODE) { tss_enabled = 0; if (!client->root_ticket) { @@ -606,7 +606,7 @@ int idevicerestore_start(struct idevicerestore_client_t* client) // we need to refresh the current mode again mutex_lock(&client->device_event_mutex); cond_wait_timeout(&client->device_event_cond, &client->device_event_mutex, 60000); - if (client->mode == &idevicerestore_modes[MODE_UNKNOWN] || (client->flags & FLAG_QUIT)) { + if (client->mode == MODE_UNKNOWN || (client->flags & FLAG_QUIT)) { mutex_unlock(&client->device_event_mutex); error("ERROR: Unable to discover device mode. Please make sure a device is attached.\n"); return -1; @@ -831,7 +831,7 @@ int idevicerestore_start(struct idevicerestore_client_t* client) /* print information about current build identity */ build_identity_print_information(build_identity); - if (client->mode->index == MODE_NORMAL && !(client->flags & FLAG_ERASE) && !(client->flags & FLAG_SHSHONLY)) { + if (client->mode == MODE_NORMAL && !(client->flags & FLAG_ERASE) && !(client->flags & FLAG_SHSHONLY)) { plist_t pver = normal_get_lockdown_value(client, NULL, "ProductVersion"); char *device_version = NULL; if (pver) { @@ -1030,7 +1030,7 @@ int idevicerestore_start(struct idevicerestore_client_t* client) } info("Found ECID %" PRIu64 "\n", client->ecid); - if (client->mode->index == MODE_NORMAL && !(client->flags & FLAG_ERASE) && !(client->flags & FLAG_SHSHONLY)) { + if (client->mode == MODE_NORMAL && !(client->flags & FLAG_ERASE) && !(client->flags & FLAG_SHSHONLY)) { plist_t node = normal_get_lockdown_value(client, NULL, "HasSiDP"); uint8_t needs_preboard = 0; if (node && plist_get_node_type(node) == PLIST_BOOLEAN) { @@ -1179,7 +1179,7 @@ int idevicerestore_start(struct idevicerestore_client_t* client) } // if the device is in normal mode, place device into recovery mode - if (client->mode->index == MODE_NORMAL) { + if (client->mode == MODE_NORMAL) { info("Entering recovery mode...\n"); if (normal_enter_recovery(client) < 0) { error("ERROR: Unable to place device into recovery mode from normal mode\n"); @@ -1197,7 +1197,7 @@ int idevicerestore_start(struct idevicerestore_client_t* client) return -1; } - if (client->mode->index == MODE_DFU) { + if (client->mode == MODE_DFU) { // if the device is in DFU mode, place it into recovery mode dfu_client_free(client); recovery_client_free(client); @@ -1229,7 +1229,7 @@ int idevicerestore_start(struct idevicerestore_client_t* client) unlink(filesystem); return -2; } - } else if (client->mode->index == MODE_RECOVERY) { + } else if (client->mode == MODE_RECOVERY) { // device is in recovery mode if ((client->build_major > 8) && !(client->flags & FLAG_CUSTOM)) { if (!client->image4supported) { @@ -1257,7 +1257,7 @@ int idevicerestore_start(struct idevicerestore_client_t* client) debug("Waiting for device to disconnect...\n"); cond_wait_timeout(&client->device_event_cond, &client->device_event_mutex, 10000); - if (client->mode != &idevicerestore_modes[MODE_UNKNOWN] || (client->flags & FLAG_QUIT)) { + if (client->mode != MODE_UNKNOWN || (client->flags & FLAG_QUIT)) { mutex_unlock(&client->device_event_mutex); if (!(client->flags & FLAG_QUIT)) { @@ -1269,7 +1269,7 @@ int idevicerestore_start(struct idevicerestore_client_t* client) } debug("Waiting for device to reconnect in recovery mode...\n"); cond_wait_timeout(&client->device_event_cond, &client->device_event_mutex, 10000); - if (client->mode != &idevicerestore_modes[MODE_RECOVERY] || (client->flags & FLAG_QUIT)) { + if (client->mode != MODE_RECOVERY || (client->flags & FLAG_QUIT)) { mutex_unlock(&client->device_event_mutex); if (!(client->flags & FLAG_QUIT)) { error("ERROR: Device did not reconnect in recovery mode. Possibly invalid iBEC. Reset device and try again.\n"); @@ -1337,7 +1337,7 @@ int idevicerestore_start(struct idevicerestore_client_t* client) } // now finally do the magic to put the device into restore mode - if (client->mode->index == MODE_RECOVERY) { + if (client->mode == MODE_RECOVERY) { if (client->srnm == NULL) { error("ERROR: could not retrieve device serial number. Can't continue.\n"); if (delete_fs && filesystem) @@ -1357,11 +1357,11 @@ int idevicerestore_start(struct idevicerestore_client_t* client) } idevicerestore_progress(client, RESTORE_STEP_PREPARE, 0.9); - if (client->mode->index != MODE_RESTORE) { + if (client->mode != MODE_RESTORE) { mutex_lock(&client->device_event_mutex); info("Waiting for device to enter restore mode...\n"); cond_wait_timeout(&client->device_event_cond, &client->device_event_mutex, 180000); - if (client->mode != &idevicerestore_modes[MODE_RESTORE] || (client->flags & FLAG_QUIT)) { + if (client->mode != MODE_RESTORE || (client->flags & FLAG_QUIT)) { mutex_unlock(&client->device_event_mutex); error("ERROR: Device failed to enter restore mode.\n"); error("Please make sure that usbmuxd is running.\n"); @@ -1373,7 +1373,7 @@ int idevicerestore_start(struct idevicerestore_client_t* client) } // device is finally in restore mode, let's do this - if (client->mode->index == MODE_RESTORE) { + if (client->mode == MODE_RESTORE) { if ((client->flags & FLAG_NO_RESTORE) != 0) { info("Device is now in restore mode. Exiting as requested."); return 0; @@ -1429,7 +1429,7 @@ struct idevicerestore_client_t* idevicerestore_client_new(void) return NULL; } memset(client, '\0', sizeof(struct idevicerestore_client_t)); - client->mode = &idevicerestore_modes[MODE_UNKNOWN]; + client->mode = MODE_UNKNOWN; mutex_init(&client->device_event_mutex); cond_init(&client->device_event_cond); return client; @@ -1564,8 +1564,7 @@ void plain_progress_cb(int step, double step_progress, void* userdata) fflush(stdout); } -int main(int argc, char* argv[]) -{ +int main(int argc, char* argv[]) { int opt = 0; int optindex = 0; char* ipsw = NULL; @@ -1744,21 +1743,21 @@ int main(int argc, char* argv[]) irecv_device_t get_irecv_device(struct idevicerestore_client_t *client) { - int mode = MODE_UNKNOWN; + int mode = _MODE_UNKNOWN; if (client->mode) { mode = client->mode->index; } switch (mode) { - case MODE_RESTORE: + case _MODE_RESTORE: return restore_get_irecv_device(client); - case MODE_NORMAL: + case _MODE_NORMAL: return normal_get_irecv_device(client); - case MODE_DFU: - case MODE_RECOVERY: + case _MODE_DFU: + case _MODE_RECOVERY: return dfu_get_irecv_device(client); default: @@ -1769,23 +1768,23 @@ irecv_device_t get_irecv_device(struct idevicerestore_client_t *client) int is_image4_supported(struct idevicerestore_client_t* client) { int res = 0; - int mode = MODE_UNKNOWN; + int mode = _MODE_UNKNOWN; if (client->mode) { mode = client->mode->index; } switch (mode) { - case MODE_NORMAL: + case _MODE_NORMAL: res = normal_is_image4_supported(client); break; - case MODE_RESTORE: + case _MODE_RESTORE: res = restore_is_image4_supported(client); break; - case MODE_DFU: + case _MODE_DFU: res = dfu_is_image4_supported(client); break; - case MODE_RECOVERY: + case _MODE_RECOVERY: res = recovery_is_image4_supported(client); break; default: @@ -1797,28 +1796,28 @@ int is_image4_supported(struct idevicerestore_client_t* client) int get_ecid(struct idevicerestore_client_t* client, uint64_t* ecid) { - int mode = MODE_UNKNOWN; + int mode = _MODE_UNKNOWN; if (client->mode) { mode = client->mode->index; } switch (mode) { - case MODE_NORMAL: + case _MODE_NORMAL: if (normal_get_ecid(client, ecid) < 0) { *ecid = 0; return -1; } break; - case MODE_DFU: + case _MODE_DFU: if (dfu_get_ecid(client, ecid) < 0) { *ecid = 0; return -1; } break; - case MODE_RECOVERY: + case _MODE_RECOVERY: if (recovery_get_ecid(client, ecid) < 0) { *ecid = 0; return -1; @@ -1836,7 +1835,7 @@ int get_ecid(struct idevicerestore_client_t* client, uint64_t* ecid) int get_ap_nonce(struct idevicerestore_client_t* client, unsigned char** nonce, int* nonce_size) { - int mode = MODE_UNKNOWN; + int mode = _MODE_UNKNOWN; *nonce = NULL; *nonce_size = 0; @@ -1848,21 +1847,21 @@ int get_ap_nonce(struct idevicerestore_client_t* client, unsigned char** nonce, } switch (mode) { - case MODE_NORMAL: + case _MODE_NORMAL: info("in normal mode... "); if (normal_get_ap_nonce(client, nonce, nonce_size) < 0) { info("failed\n"); return -1; } break; - case MODE_DFU: + case _MODE_DFU: info("in dfu mode... "); if (dfu_get_ap_nonce(client, nonce, nonce_size) < 0) { info("failed\n"); return -1; } break; - case MODE_RECOVERY: + case _MODE_RECOVERY: info("in recovery mode... "); if (recovery_get_ap_nonce(client, nonce, nonce_size) < 0) { info("failed\n"); @@ -1887,7 +1886,7 @@ int get_ap_nonce(struct idevicerestore_client_t* client, unsigned char** nonce, int get_sep_nonce(struct idevicerestore_client_t* client, unsigned char** nonce, int* nonce_size) { - int mode = MODE_UNKNOWN; + int mode = _MODE_UNKNOWN; *nonce = NULL; *nonce_size = 0; @@ -1899,21 +1898,21 @@ int get_sep_nonce(struct idevicerestore_client_t* client, unsigned char** nonce, } switch (mode) { - case MODE_NORMAL: + case _MODE_NORMAL: info("in normal mode... "); if (normal_get_sep_nonce(client, nonce, nonce_size) < 0) { info("failed\n"); return -1; } break; - case MODE_DFU: + case _MODE_DFU: info("in dfu mode... "); if (dfu_get_sep_nonce(client, nonce, nonce_size) < 0) { info("failed\n"); return -1; } break; - case MODE_RECOVERY: + case _MODE_RECOVERY: info("in recovery mode... "); if (recovery_get_sep_nonce(client, nonce, nonce_size) < 0) { info("failed\n"); @@ -2262,7 +2261,7 @@ int get_tss_response(struct idevicerestore_client_t* client, plist_t build_ident } } - if (client->mode->index == MODE_NORMAL) { + if (client->mode == MODE_NORMAL) { /* normal mode; request baseband ticket aswell */ plist_t pinfo = NULL; normal_get_preflight_info(client, &pinfo); diff --git a/src/normal.c b/src/normal.c index 93ace67..301dbbe 100644 --- a/src/normal.c +++ b/src/normal.c @@ -138,7 +138,8 @@ static int normal_idevice_new(struct idevicerestore_client_t* client, idevice_t* return 0; } -int normal_check_mode(struct idevicerestore_client_t* client) { +int normal_check_mode(struct idevicerestore_client_t* client) +{ idevice_t device = NULL; normal_idevice_new(client, &device); @@ -260,7 +261,7 @@ int normal_enter_recovery(struct idevicerestore_client_t* client) mutex_lock(&client->device_event_mutex); debug("DEBUG: Waiting for device to disconnect...\n"); cond_wait_timeout(&client->device_event_cond, &client->device_event_mutex, 60000); - if (client->mode == &idevicerestore_modes[MODE_NORMAL] || (client->flags & FLAG_QUIT)) { + if (client->mode == MODE_NORMAL || (client->flags & FLAG_QUIT)) { mutex_unlock(&client->device_event_mutex); error("ERROR: Failed to place device in recovery mode\n"); return -1; @@ -268,7 +269,7 @@ int normal_enter_recovery(struct idevicerestore_client_t* client) debug("DEBUG: Waiting for device to connect in recovery mode...\n"); cond_wait_timeout(&client->device_event_cond, &client->device_event_mutex, 60000); - if (client->mode != &idevicerestore_modes[MODE_RECOVERY] || (client->flags & FLAG_QUIT)) { + if (client->mode != MODE_RECOVERY || (client->flags & FLAG_QUIT)) { mutex_unlock(&client->device_event_mutex); error("ERROR: Failed to enter recovery mode\n"); return -1; diff --git a/src/recovery.c b/src/recovery.c index 6048382..b6a6f51 100644 --- a/src/recovery.c +++ b/src/recovery.c @@ -220,7 +220,7 @@ int recovery_enter_restore(struct idevicerestore_client_t* client, plist_t build debug("DEBUG: Waiting for device to disconnect...\n"); cond_wait_timeout(&client->device_event_cond, &client->device_event_mutex, 30000); - if (client->mode == &idevicerestore_modes[MODE_RECOVERY] || (client->flags & FLAG_QUIT)) { + if (client->mode == MODE_RECOVERY || (client->flags & FLAG_QUIT)) { mutex_unlock(&client->device_event_mutex); error("ERROR: Failed to place device in restore mode\n"); return -1; diff --git a/src/restore.c b/src/restore.c index 984b3ab..e090594 100644 --- a/src/restore.c +++ b/src/restore.c @@ -359,7 +359,7 @@ int restore_reboot(struct idevicerestore_client_t* client) restored_client_free(client->restore->client); cond_wait_timeout(&client->device_event_cond, &client->device_event_mutex, 30000); - if (client->mode == &idevicerestore_modes[MODE_RESTORE]) { + if (client->mode == MODE_RESTORE) { mutex_unlock(&client->device_event_mutex); return -1; } @@ -2718,7 +2718,8 @@ error_out: return -1; } -plist_t restore_get_build_identity(struct idevicerestore_client_t* client, uint8_t is_recover_os) { +plist_t restore_get_build_identity(struct idevicerestore_client_t* client, uint8_t is_recover_os) +{ unsigned int size = 0; unsigned char* data = NULL; plist_t buildmanifest = NULL; @@ -2738,7 +2739,8 @@ plist_t restore_get_build_identity(struct idevicerestore_client_t* client, uint8 return build_identity; } -plist_t restore_get_build_identity_from_request(struct idevicerestore_client_t* client, plist_t msg) { +plist_t restore_get_build_identity_from_request(struct idevicerestore_client_t* client, plist_t msg) +{ plist_t args = plist_dict_get_item(msg, "Arguments"); plist_t is_recovery_node = plist_dict_get_item(args, "IsRecoveryOS"); uint8_t is_recovery = 0; @@ -2747,7 +2749,8 @@ plist_t restore_get_build_identity_from_request(struct idevicerestore_client_t* return restore_get_build_identity(client, is_recovery); } -int extract_macos_variant(plist_t build_identity, char** output) { +int extract_macos_variant(plist_t build_identity, char** output) +{ plist_t build_info = plist_dict_get_item(build_identity, "Info"); if (!build_info) { error("ERROR: build identity does not contain an 'Info' element\n"); @@ -2764,7 +2767,8 @@ int extract_macos_variant(plist_t build_identity, char** output) { return 0; } -int extract_global_manifest(struct idevicerestore_client_t* client, plist_t build_identity, unsigned char** pbuffer, unsigned int* psize) { +int extract_global_manifest(struct idevicerestore_client_t* client, plist_t build_identity, unsigned char** pbuffer, unsigned int* psize) +{ plist_t build_info = plist_dict_get_item(build_identity, "Info"); if (!build_info) { error("ERROR: build identity does not contain an 'Info' element\n"); @@ -2804,7 +2808,8 @@ int extract_global_manifest(struct idevicerestore_client_t* client, plist_t buil return 0; } -int restore_send_personalized_boot_object_v3(restored_client_t restore, struct idevicerestore_client_t* client, plist_t msg, plist_t build_identity) { +int restore_send_personalized_boot_object_v3(restored_client_t restore, struct idevicerestore_client_t* client, plist_t msg, plist_t build_identity) +{ debug_plist(msg); char *image_name = NULL; @@ -2927,7 +2932,8 @@ int restore_send_personalized_boot_object_v3(restored_client_t restore, struct i return 0; } -int restore_send_source_boot_object_v4(restored_client_t restore, struct idevicerestore_client_t* client, plist_t msg, plist_t build_identity) { +int restore_send_source_boot_object_v4(restored_client_t restore, struct idevicerestore_client_t* client, plist_t msg, plist_t build_identity) +{ debug_plist(msg); char *image_name = NULL; @@ -3036,7 +3042,8 @@ int restore_send_source_boot_object_v4(restored_client_t restore, struct idevice return 0; } -int restore_send_restore_local_policy(restored_client_t restore, struct idevicerestore_client_t* client, plist_t msg) { +int restore_send_restore_local_policy(restored_client_t restore, struct idevicerestore_client_t* client, plist_t msg) +{ unsigned int size = 0; unsigned char* data = NULL; @@ -3081,7 +3088,8 @@ int restore_send_restore_local_policy(restored_client_t restore, struct idevicer return 0; } -int restore_send_buildidentity(restored_client_t restore, struct idevicerestore_client_t* client, plist_t msg) { +int restore_send_buildidentity(restored_client_t restore, struct idevicerestore_client_t* client, plist_t msg) +{ restored_error_t restore_error; plist_t dict; @@ -3274,7 +3282,8 @@ int restore_handle_data_request_msg(struct idevicerestore_client_t* client, idev } // Extracted from ac2 -plist_t restore_supported_data_types() { +plist_t restore_supported_data_types() +{ plist_t dict = plist_new_dict(); plist_dict_set_item(dict, "BasebandBootData", plist_new_bool(0)); plist_dict_set_item(dict, "BasebandData", plist_new_bool(0)); @@ -3334,7 +3343,8 @@ plist_t restore_supported_data_types() { } // Extracted from ac2 -plist_t restore_supported_message_types() { +plist_t restore_supported_message_types() +{ plist_t dict = plist_new_dict(); plist_dict_set_item(dict, "BBUpdateStatusMsg", plist_new_bool(0)); plist_dict_set_item(dict, "CheckpointMsg", plist_new_bool(1)); -- cgit v1.1-32-gdbae