SWIGEXPORT jshort JNICALL Java_org_robovm_libimobiledevice_binding_libimobiledeviceJNI_lockdownd_1unpair(JNIEnv *jenv, jclass jcls, jlong jarg1, jlong jarg2, jobject jarg2_) { jshort jresult = 0 ; lockdownd_client_t arg1 = (lockdownd_client_t) 0 ; lockdownd_pair_record_t arg2 = (lockdownd_pair_record_t) 0 ; lockdownd_error_t result; (void)jenv; (void)jcls; (void)jarg2_; arg1 = *(lockdownd_client_t *)&jarg1; arg2 = *(lockdownd_pair_record_t *)&jarg2; result = (lockdownd_error_t)lockdownd_unpair(arg1,arg2); jresult = (jshort)result; return jresult; }
const char* normal_check_product_type(struct idevicerestore_client_t* client) { int i = 0; idevice_t device = NULL; char* product_type = NULL; irecv_device_t irecv_device = NULL; plist_t product_type_node = NULL; lockdownd_client_t lockdown = NULL; idevice_error_t device_error = IDEVICE_E_SUCCESS; lockdownd_error_t lockdown_error = IDEVICE_E_SUCCESS; normal_idevice_new(client, &device); if (!device) { return product_type; } lockdown_error = lockdownd_client_new_with_handshake(device, &lockdown, "idevicerestore"); if (lockdown_error == LOCKDOWN_E_PASSWORD_PROTECTED) { lockdown_error = lockdownd_client_new(device, &lockdown, "idevicerestore"); } else if (lockdown_error == LOCKDOWN_E_INVALID_HOST_ID) { char* udid = NULL; lockdownd_unpair(lockdown, NULL); idevice_get_udid(device, &udid); if (udid) { userpref_remove_device_record(udid); } lockdown_error = lockdownd_client_new_with_handshake(device, &lockdown, "idevicerestore"); } if (lockdown_error != LOCKDOWN_E_SUCCESS) { idevice_free(device); return product_type; } plist_t pval = NULL; lockdownd_get_value(lockdown, NULL, "HardwareModel", &pval); if (pval && (plist_get_node_type(pval) == PLIST_STRING)) { char* strval = NULL; plist_get_string_val(pval, &strval); if (strval) { irecv_devices_get_device_by_hardware_model(strval, &irecv_device); if (irecv_device) { product_type = strdup(irecv_device->product_type); } free(strval); } } if (pval) { plist_free(pval); } if (product_type == NULL) { lockdown_error = lockdownd_get_value(lockdown, NULL, "ProductType", &product_type_node); if (lockdown_error != LOCKDOWN_E_SUCCESS) { lockdownd_client_free(lockdown); idevice_free(device); return product_type; } } lockdownd_client_free(lockdown); idevice_free(device); lockdown = NULL; device = NULL; if (irecv_device) { if (product_type) free(product_type); return irecv_device->product_type; } if (product_type_node != NULL) { if (!product_type_node || plist_get_node_type(product_type_node) != PLIST_STRING) { if (product_type_node) plist_free(product_type_node); return product_type; } plist_get_string_val(product_type_node, &product_type); plist_free(product_type_node); irecv_devices_get_device_by_product_type(product_type, &irecv_device); if (irecv_device && irecv_device->product_type) { free(product_type); return irecv_device->product_type; } } return product_type; }
int main(int argc, char **argv) { lockdownd_client_t client = NULL; idevice_t device = NULL; idevice_error_t ret = IDEVICE_E_UNKNOWN_ERROR; lockdownd_error_t lerr; int result; char *type = NULL; char *cmd; typedef enum { OP_NONE = 0, OP_PAIR, OP_VALIDATE, OP_UNPAIR, OP_LIST, OP_HOSTID } op_t; op_t op = OP_NONE; parse_opts(argc, argv); if ((argc - optind) < 1) { printf("ERROR: You need to specify a COMMAND!\n"); print_usage(argc, argv); exit(EXIT_FAILURE); } cmd = (argv+optind)[0]; if (!strcmp(cmd, "pair")) { op = OP_PAIR; } else if (!strcmp(cmd, "validate")) { op = OP_VALIDATE; } else if (!strcmp(cmd, "unpair")) { op = OP_UNPAIR; } else if (!strcmp(cmd, "list")) { op = OP_LIST; } else if (!strcmp(cmd, "hostid")) { op = OP_HOSTID; } else { printf("ERROR: Invalid command '%s' specified\n", cmd); print_usage(argc, argv); exit(EXIT_FAILURE); } if (op == OP_HOSTID) { char *hostid = NULL; userpref_get_host_id(&hostid); printf("%s\n", hostid); if (hostid) free(hostid); return EXIT_SUCCESS; } if (op == OP_LIST) { unsigned int i; char **udids = NULL; unsigned int count = 0; userpref_get_paired_udids(&udids, &count); for (i = 0; i < count; i++) { printf("%s\n", udids[i]); free(udids[i]); } if (udids) free(udids); if (udid) free(udid); return EXIT_SUCCESS; } if (udid) { ret = idevice_new(&device, udid); free(udid); udid = NULL; if (ret != IDEVICE_E_SUCCESS) { printf("No device found with udid %s, is it plugged in?\n", udid); return EXIT_FAILURE; } } else { ret = idevice_new(&device, NULL); if (ret != IDEVICE_E_SUCCESS) { printf("No device found, is it plugged in?\n"); return EXIT_FAILURE; } } lerr = lockdownd_client_new(device, &client, "idevicepair"); if (lerr != LOCKDOWN_E_SUCCESS) { idevice_free(device); printf("ERROR: lockdownd_client_new failed with error code %d\n", lerr); return EXIT_FAILURE; } result = EXIT_SUCCESS; lerr = lockdownd_query_type(client, &type); if (lerr != LOCKDOWN_E_SUCCESS) { printf("QueryType failed, error code %d\n", lerr); result = EXIT_FAILURE; goto leave; } else { if (strcmp("com.apple.mobile.lockdown", type)) { printf("WARNING: QueryType request returned '%s'\n", type); } if (type) { free(type); } } ret = idevice_get_udid(device, &udid); if (ret != IDEVICE_E_SUCCESS) { printf("ERROR: Could not get device udid, error code %d\n", ret); result = EXIT_FAILURE; goto leave; } switch(op) { default: case OP_PAIR: lerr = lockdownd_pair(client, NULL); if (lerr == LOCKDOWN_E_SUCCESS) { printf("SUCCESS: Paired with device %s\n", udid); } else { result = EXIT_FAILURE; if (lerr == LOCKDOWN_E_PASSWORD_PROTECTED) { printf("ERROR: Could not pair with the device because a passcode is set. Please enter the passcode on the device and retry.\n"); } else { printf("ERROR: Pairing with device %s failed with unhandled error code %d\n", udid, lerr); } } break; case OP_VALIDATE: lerr = lockdownd_validate_pair(client, NULL); if (lerr == LOCKDOWN_E_SUCCESS) { printf("SUCCESS: Validated pairing with device %s\n", udid); } else { result = EXIT_FAILURE; if (lerr == LOCKDOWN_E_PASSWORD_PROTECTED) { printf("ERROR: Could not validate with the device because a passcode is set. Please enter the passcode on the device and retry.\n"); } else if (lerr == LOCKDOWN_E_INVALID_HOST_ID) { printf("ERROR: Device %s is not paired with this host\n", udid); } else { printf("ERROR: Pairing failed with unhandled error code %d\n", lerr); } } break; case OP_UNPAIR: lerr = lockdownd_unpair(client, NULL); if (lerr == LOCKDOWN_E_SUCCESS) { /* also remove local device public key */ userpref_remove_device_public_key(udid); printf("SUCCESS: Unpaired with device %s\n", udid); } else { result = EXIT_FAILURE; if (lerr == LOCKDOWN_E_INVALID_HOST_ID) { printf("ERROR: Device %s is not paired with this host\n", udid); } else { printf("ERROR: Unpairing with device %s failed with unhandled error code %d\n", udid, lerr); } } break; } leave: lockdownd_client_free(client); idevice_free(device); if (udid) { free(udid); } return result; }
int main(int argc, char **argv) { lockdownd_client_t client = NULL; idevice_t device = NULL; idevice_error_t ret = IDEVICE_E_UNKNOWN_ERROR; lockdownd_error_t lerr; int result; char *type = NULL; char *cmd; typedef enum { OP_NONE = 0, OP_PAIR, OP_VALIDATE, OP_UNPAIR, OP_LIST, OP_HOSTID, OP_SYSTEMBUID } op_t; op_t op = OP_NONE; parse_opts(argc, argv); if ((argc - optind) < 1) { printf("ERROR: You need to specify a COMMAND!\n"); print_usage(argc, argv); exit(EXIT_FAILURE); } cmd = (argv+optind)[0]; if (!strcmp(cmd, "pair")) { op = OP_PAIR; } else if (!strcmp(cmd, "validate")) { op = OP_VALIDATE; } else if (!strcmp(cmd, "unpair")) { op = OP_UNPAIR; } else if (!strcmp(cmd, "list")) { op = OP_LIST; } else if (!strcmp(cmd, "hostid")) { op = OP_HOSTID; } else if (!strcmp(cmd, "systembuid")) { op = OP_SYSTEMBUID; } else { printf("ERROR: Invalid command '%s' specified\n", cmd); print_usage(argc, argv); exit(EXIT_FAILURE); } if (op == OP_SYSTEMBUID) { char *systembuid = NULL; userpref_read_system_buid(&systembuid); printf("%s\n", systembuid); if (systembuid) free(systembuid); return EXIT_SUCCESS; } if (op == OP_LIST) { unsigned int i; char **udids = NULL; unsigned int count = 0; userpref_get_paired_udids(&udids, &count); for (i = 0; i < count; i++) { printf("%s\n", udids[i]); free(udids[i]); } if (udids) free(udids); if (udid) free(udid); return EXIT_SUCCESS; } if (udid) { ret = idevice_new(&device, udid); free(udid); udid = NULL; if (ret != IDEVICE_E_SUCCESS) { printf("No device found with udid %s, is it plugged in?\n", udid); return EXIT_FAILURE; } } else { ret = idevice_new(&device, NULL); if (ret != IDEVICE_E_SUCCESS) { printf("No device found, is it plugged in?\n"); return EXIT_FAILURE; } } ret = idevice_get_udid(device, &udid); if (ret != IDEVICE_E_SUCCESS) { printf("ERROR: Could not get device udid, error code %d\n", ret); result = EXIT_FAILURE; goto leave; } if (op == OP_HOSTID) { plist_t pair_record = NULL; char *hostid = NULL; userpref_read_pair_record(udid, &pair_record); pair_record_get_host_id(pair_record, &hostid); printf("%s\n", hostid); if (hostid) free(hostid); if (pair_record) plist_free(pair_record); return EXIT_SUCCESS; } lerr = lockdownd_client_new(device, &client, "idevicepair"); if (lerr != LOCKDOWN_E_SUCCESS) { idevice_free(device); printf("ERROR: Could not connect to lockdownd, error code %d\n", lerr); return EXIT_FAILURE; } result = EXIT_SUCCESS; lerr = lockdownd_query_type(client, &type); if (lerr != LOCKDOWN_E_SUCCESS) { printf("QueryType failed, error code %d\n", lerr); result = EXIT_FAILURE; goto leave; } else { if (strcmp("com.apple.mobile.lockdown", type)) { printf("WARNING: QueryType request returned '%s'\n", type); } if (type) { free(type); } } switch(op) { default: case OP_PAIR: lerr = lockdownd_pair(client, NULL); if (lerr == LOCKDOWN_E_SUCCESS) { printf("SUCCESS: Paired with device %s\n", udid); } else { result = EXIT_FAILURE; print_error_message(lerr); } break; case OP_VALIDATE: lerr = lockdownd_validate_pair(client, NULL); if (lerr == LOCKDOWN_E_SUCCESS) { printf("SUCCESS: Validated pairing with device %s\n", udid); } else { result = EXIT_FAILURE; print_error_message(lerr); } break; case OP_UNPAIR: lerr = lockdownd_unpair(client, NULL); if (lerr == LOCKDOWN_E_SUCCESS) { printf("SUCCESS: Unpaired with device %s\n", udid); } else { result = EXIT_FAILURE; print_error_message(lerr); } break; } leave: lockdownd_client_free(client); idevice_free(device); if (udid) { free(udid); } return result; }