diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/dfu.c | 4 | ||||
-rw-r--r-- | src/dfu.h | 2 | ||||
-rw-r--r-- | src/idevicerestore.c | 26 | ||||
-rw-r--r-- | src/idevicerestore.h | 3 | ||||
-rw-r--r-- | src/normal.c | 4 | ||||
-rw-r--r-- | src/normal.h | 2 | ||||
-rw-r--r-- | src/restore.c | 7 | ||||
-rw-r--r-- | src/restore.h | 2 |
8 files changed, 20 insertions, 30 deletions
@@ -109,7 +109,7 @@ int dfu_check_mode(struct idevicerestore_client_t* client, int* mode) { return 0; } -const char* dfu_check_hardware_model(struct idevicerestore_client_t* client) { +irecv_device_t dfu_get_irecv_device(struct idevicerestore_client_t* client) { irecv_client_t dfu = NULL; irecv_error_t dfu_error = IRECV_E_SUCCESS; irecv_device_t device = NULL; @@ -125,7 +125,7 @@ const char* dfu_check_hardware_model(struct idevicerestore_client_t* client) { return NULL; } - return device->hardware_model; + return device; } int dfu_send_buffer(struct idevicerestore_client_t* client, unsigned char* buffer, unsigned int size) @@ -40,7 +40,7 @@ struct dfu_client_t { int dfu_client_new(struct idevicerestore_client_t* client); void dfu_client_free(struct idevicerestore_client_t* client); int dfu_check_mode(struct idevicerestore_client_t* client, int* mode); -const char* dfu_check_hardware_model(struct idevicerestore_client_t* client); +irecv_device_t dfu_get_irecv_device(struct idevicerestore_client_t* client); int dfu_send_buffer(struct idevicerestore_client_t* client, unsigned char* buffer, unsigned int size); int dfu_send_component(struct idevicerestore_client_t* client, plist_t build_identity, const char* component); int dfu_get_cpid(struct idevicerestore_client_t* client, unsigned int* cpid); diff --git a/src/idevicerestore.c b/src/idevicerestore.c index 423d79c..a051b95 100644 --- a/src/idevicerestore.c +++ b/src/idevicerestore.c @@ -284,8 +284,9 @@ int idevicerestore_start(struct idevicerestore_client_t* client) } // discover the device type - if (check_hardware_model(client) == NULL || client->device == NULL) { - error("ERROR: Unable to discover device model\n"); + client->device = get_irecv_device(client); + if (client->device == NULL) { + error("ERROR: Unable to discover device type\n"); return -1; } idevicerestore_progress(client, RESTORE_STEP_DETECT, 0.2); @@ -1193,8 +1194,7 @@ int check_mode(struct idevicerestore_client_t* client) { return mode; } -const char* check_hardware_model(struct idevicerestore_client_t* client) { - const char* hw_model = NULL; +irecv_device_t get_irecv_device(struct idevicerestore_client_t *client) { int mode = MODE_UNKNOWN; if (client->mode) { @@ -1203,26 +1203,18 @@ const char* check_hardware_model(struct idevicerestore_client_t* client) { switch (mode) { case MODE_RESTORE: - hw_model = restore_check_hardware_model(client); - break; + return restore_get_irecv_device(client); case MODE_NORMAL: - hw_model = normal_check_hardware_model(client); - break; + return normal_get_irecv_device(client); case MODE_DFU: case MODE_RECOVERY: - hw_model = dfu_check_hardware_model(client); - break; - default: - break; - } + return dfu_get_irecv_device(client); - if (hw_model != NULL) { - irecv_devices_get_device_by_hardware_model(hw_model, &client->device); + default: + return NULL; } - - return hw_model; } int is_image4_supported(struct idevicerestore_client_t* client) diff --git a/src/idevicerestore.h b/src/idevicerestore.h index 54009a7..0338dde 100644 --- a/src/idevicerestore.h +++ b/src/idevicerestore.h @@ -31,6 +31,7 @@ extern "C" { #include <stdio.h> #include <stdint.h> #include <plist/plist.h> +#include <libirecovery.h> // the flag with value 1 is reserved for internal use only. don't use it. #define FLAG_DEBUG 1 << 1 @@ -74,7 +75,7 @@ const char* idevicerestore_get_error(void); void usage(int argc, char* argv[]); int check_mode(struct idevicerestore_client_t* client); -const char* check_hardware_model(struct idevicerestore_client_t* client); +irecv_device_t get_irecv_device(struct idevicerestore_client_t* client); int get_ecid(struct idevicerestore_client_t* client, uint64_t* ecid); int is_image4_supported(struct idevicerestore_client_t* client); int get_ap_nonce(struct idevicerestore_client_t* client, unsigned char** nonce, int* nonce_size); diff --git a/src/normal.c b/src/normal.c index 8101b72..921a157 100644 --- a/src/normal.c +++ b/src/normal.c @@ -218,7 +218,7 @@ int normal_open_with_timeout(struct idevicerestore_client_t* client) { return 0; } -const char* normal_check_hardware_model(struct idevicerestore_client_t* client) { +irecv_device_t normal_get_irecv_device(struct idevicerestore_client_t* client) { idevice_t device = NULL; lockdownd_client_t lockdown = NULL; lockdownd_error_t lockdown_error = LOCKDOWN_E_SUCCESS; @@ -253,7 +253,7 @@ const char* normal_check_hardware_model(struct idevicerestore_client_t* client) lockdownd_client_free(lockdown); idevice_free(device); - return (irecv_device) ? irecv_device->hardware_model : NULL; + return irecv_device; } int normal_enter_recovery(struct idevicerestore_client_t* client) { diff --git a/src/normal.h b/src/normal.h index be3fa39..ddd8a58 100644 --- a/src/normal.h +++ b/src/normal.h @@ -41,7 +41,7 @@ struct normal_client_t { int normal_check_mode(struct idevicerestore_client_t* client); -const char* normal_check_hardware_model(struct idevicerestore_client_t* client); +irecv_device_t normal_get_irecv_device(struct idevicerestore_client_t* client); 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); diff --git a/src/restore.c b/src/restore.c index 83eef83..05ec228 100644 --- a/src/restore.c +++ b/src/restore.c @@ -222,7 +222,7 @@ int restore_check_mode(struct idevicerestore_client_t* client) { return 0; } -const char* restore_check_hardware_model(struct idevicerestore_client_t* client) { +irecv_device_t restore_get_irecv_device(struct idevicerestore_client_t* client) { char* model = NULL; plist_t node = NULL; idevice_t device = NULL; @@ -274,11 +274,8 @@ const char* restore_check_hardware_model(struct idevicerestore_client_t* client) plist_get_string_val(node, &model); irecv_devices_get_device_by_hardware_model(model, &irecv_device); free(model); - if (irecv_device && irecv_device->product_type) { - return irecv_device->hardware_model; - } - return NULL; + return irecv_device; } void restore_device_callback(const idevice_event_t* event, void* userdata) { diff --git a/src/restore.h b/src/restore.h index e63f6bc..d4cfc46 100644 --- a/src/restore.h +++ b/src/restore.h @@ -44,7 +44,7 @@ struct restore_client_t { }; int restore_check_mode(struct idevicerestore_client_t* client); -const char* restore_check_hardware_model(struct idevicerestore_client_t* client); +irecv_device_t restore_get_irecv_device(struct idevicerestore_client_t* client); int restore_client_new(struct idevicerestore_client_t* client); void restore_client_free(struct idevicerestore_client_t* client); int restore_reboot(struct idevicerestore_client_t* client); |