summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/dfu.c4
-rw-r--r--src/dfu.h2
-rw-r--r--src/idevicerestore.c26
-rw-r--r--src/idevicerestore.h3
-rw-r--r--src/normal.c4
-rw-r--r--src/normal.h2
-rw-r--r--src/restore.c7
-rw-r--r--src/restore.h2
8 files changed, 20 insertions, 30 deletions
diff --git a/src/dfu.c b/src/dfu.c
index 124d2c7..11aa843 100644
--- a/src/dfu.c
+++ b/src/dfu.c
@@ -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)
diff --git a/src/dfu.h b/src/dfu.h
index f56862c..2af1a6e 100644
--- a/src/dfu.h
+++ b/src/dfu.h
@@ -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);