-
-
Save nikias/679b0ae23dcd671d3cea556eb1e7928b to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/include/libimobiledevice/mobileactivation.h b/include/libimobiledevice/mobileactivation.h | |
index bb1f3f4..6f954ee 100644 | |
--- a/include/libimobiledevice/mobileactivation.h | |
+++ b/include/libimobiledevice/mobileactivation.h | |
@@ -169,11 +169,12 @@ mobileactivation_error_t mobileactivation_activate(mobileactivation_client_t cli | |
* | |
* @param client The mobileactivation client | |
* @param activation_record The activation record plist dictionary | |
+ * @param headers plist dictionary with the activation response headers from Apple's https webservice | |
* | |
* @return MOBILEACTIVATION_E_SUCCESS on success, or an MOBILEACTIVATION_E_* | |
* error code otherwise. | |
*/ | |
-mobileactivation_error_t mobileactivation_activate_with_session(mobileactivation_client_t client, plist_t activation_record); | |
+mobileactivation_error_t mobileactivation_activate_with_session(mobileactivation_client_t client, plist_t activation_record, plist_t headers); | |
/** | |
* Deactivates the device. | |
diff --git a/src/mobileactivation.c b/src/mobileactivation.c | |
index 7ae35bb..cce5552 100644 | |
--- a/src/mobileactivation.c | |
+++ b/src/mobileactivation.c | |
@@ -121,6 +121,38 @@ static mobileactivation_error_t mobileactivation_check_result(plist_t dict, cons | |
return ret; | |
} | |
+static mobileactivation_error_t mobileactivation_send_command_plist(mobileactivation_client_t client, plist_t command, plist_t *result) | |
+{ | |
+ if (!client || !command) | |
+ return MOBILEACTIVATION_E_INVALID_ARG; | |
+ | |
+ plist_t cmd = plist_dict_get_item(command, "Command"); | |
+ char* command_str = NULL; | |
+ if (cmd) { | |
+ plist_get_string_val(cmd, &command_str); | |
+ } | |
+ if (!command_str) | |
+ return MOBILEACTIVATION_E_INVALID_ARG; | |
+ | |
+ mobileactivation_error_t ret = MOBILEACTIVATION_E_UNKNOWN_ERROR; | |
+ *result = NULL; | |
+ | |
+ ret = mobileactivation_error(property_list_service_send_binary_plist(client->parent, command)); | |
+ | |
+ plist_t dict = NULL; | |
+ ret = mobileactivation_error(property_list_service_receive_plist(client->parent, &dict)); | |
+ if (!dict) { | |
+ debug_info("ERROR: Did not get reply for %s command", command_str); | |
+ free(command_str); | |
+ return MOBILEACTIVATION_E_PLIST_ERROR; | |
+ } | |
+ | |
+ *result = dict; | |
+ ret = mobileactivation_check_result(dict, command_str); | |
+ free(command_str); | |
+ return ret; | |
+} | |
+ | |
static mobileactivation_error_t mobileactivation_send_command(mobileactivation_client_t client, const char* command, plist_t value, plist_t *result) | |
{ | |
if (!client || !command || !result) | |
@@ -135,18 +167,9 @@ static mobileactivation_error_t mobileactivation_send_command(mobileactivation_c | |
plist_dict_set_item(dict, "Value", plist_copy(value)); | |
} | |
- ret = mobileactivation_error(property_list_service_send_binary_plist(client->parent, dict)); | |
+ ret = mobileactivation_send_command_plist(client, dict, result); | |
plist_free(dict); | |
- dict = NULL; | |
- | |
- ret = mobileactivation_error(property_list_service_receive_plist(client->parent, &dict)); | |
- if (!dict) { | |
- debug_info("ERROR: Did not get reply for %s command", command); | |
- return MOBILEACTIVATION_E_PLIST_ERROR; | |
- } | |
- | |
- *result = dict; | |
- return mobileactivation_check_result(dict, command); | |
+ return ret; | |
} | |
LIBIMOBILEDEVICE_API mobileactivation_error_t mobileactivation_get_activation_state(mobileactivation_client_t client, plist_t *state) | |
@@ -250,15 +273,20 @@ LIBIMOBILEDEVICE_API mobileactivation_error_t mobileactivation_activate(mobileac | |
return ret; | |
} | |
-LIBIMOBILEDEVICE_API mobileactivation_error_t mobileactivation_activate_with_session(mobileactivation_client_t client, plist_t activation_record) | |
+LIBIMOBILEDEVICE_API mobileactivation_error_t mobileactivation_activate_with_session(mobileactivation_client_t client, plist_t activation_record, plist_t headers) | |
{ | |
if (!client || !activation_record) | |
return MOBILEACTIVATION_E_INVALID_ARG; | |
plist_t result = NULL; | |
- plist_t data = plist_data_from_plist(activation_record); | |
- mobileactivation_error_t ret = mobileactivation_send_command(client, "HandleActivationInfoWithSessionRequest", data, &result); | |
- plist_free(data); | |
+ | |
+ plist_t dict = plist_new_dict(); | |
+ plist_dict_set_item(dict, "Command", plist_new_string("HandleActivationInfoWithSessionRequest")); | |
+ plist_dict_set_item(dict, "Value", plist_data_from_plist(activation_record)); | |
+ plist_dict_set_item(dict, "ActivationResponseHeaders", plist_copy(headers)); | |
+ | |
+ mobileactivation_error_t ret = mobileactivation_send_command_plist(client, dict, &result); | |
+ plist_free(dict); | |
plist_free(result); | |
result = NULL; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment