/** * Closes the restored client session if one is running and frees up the * restored_client struct. * * @param client The restore client * * @return RESTORE_E_SUCCESS on success, NP_E_INVALID_ARG when client is NULL */ restored_error_t restored_client_free(restored_client_t client) { if (!client) return RESTORE_E_INVALID_ARG; restored_error_t ret = RESTORE_E_UNKNOWN_ERROR; if (client->parent) { restored_goodbye(client); if (property_list_service_client_free(client->parent) == PROPERTY_LIST_SERVICE_E_SUCCESS) { ret = RESTORE_E_SUCCESS; } } if (client->udid) { free(client->udid); } if (client->label) { free(client->label); } if (client->info) { plist_free(client->info); } free(client); return ret; }
static lockdownd_error_t lockdownd_client_free_simple(lockdownd_client_t client) { if (!client) return LOCKDOWN_E_INVALID_ARG; lockdownd_error_t ret = LOCKDOWN_E_UNKNOWN_ERROR; if (client->parent) { if (property_list_service_client_free(client->parent) == PROPERTY_LIST_SERVICE_E_SUCCESS) { ret = LOCKDOWN_E_SUCCESS; } } if (client->session_id) { free(client->session_id); client->session_id = NULL; } if (client->udid) { free(client->udid); } if (client->label) { free(client->label); } free(client); client = NULL; return ret; }
/** * Frees a device link service client. * * @param client The device_link_service_client_t to free. * * @return DEVICE_LINK_SERVICE_E_SUCCESS on success, * DEVICE_LINK_SERVICE_E_INVALID_ARG when one of client or client->parent * is invalid, or DEVICE_LINK_SERVICE_E_UNKNOWN_ERROR when the was an error * freeing the parent property_list_service client. */ device_link_service_error_t device_link_service_client_free(device_link_service_client_t client) { if (!client) return DEVICE_LINK_SERVICE_E_INVALID_ARG; if (property_list_service_client_free(client->parent) != PROPERTY_LIST_SERVICE_E_SUCCESS) { return DEVICE_LINK_SERVICE_E_UNKNOWN_ERROR; } return DEVICE_LINK_SERVICE_E_SUCCESS; }
webinspector_error_t webinspector_client_free(webinspector_client_t client) { if (!client) return WEBINSPECTOR_E_INVALID_ARG; webinspector_error_t err = webinspector_error(property_list_service_client_free(client->parent)); free(client); return err; }
heartbeat_error_t heartbeat_client_free(heartbeat_client_t client) { if (!client) return HEARTBEAT_E_INVALID_ARG; heartbeat_error_t err = heartbeat_error(property_list_service_client_free(client->parent)); free(client); return err; }
/** * Disconnects a diagnostics_relay client from the device and frees up the * diagnostics_relay client data. * * @param client The diagnostics_relay client to disconnect and free. * * @return DIAGNOSTICS_RELAY_E_SUCCESS on success, * DIAGNOSTICS_RELAY_E_INVALID_ARG when one of client or client->parent * is invalid, or DIAGNOSTICS_RELAY_E_UNKNOWN_ERROR when the was an * error freeing the parent property_list_service client. */ diagnostics_relay_error_t diagnostics_relay_client_free(diagnostics_relay_client_t client) { if (!client) return DIAGNOSTICS_RELAY_E_INVALID_ARG; if (property_list_service_client_free(client->parent) != PROPERTY_LIST_SERVICE_E_SUCCESS) { return DIAGNOSTICS_RELAY_E_UNKNOWN_ERROR; } return DIAGNOSTICS_RELAY_E_SUCCESS; }
/** * Disconnects a file_relay client from the device and frees up the file_relay * client data. * * @param client The file_relay client to disconnect and free. * * @return FILE_RELAY_E_SUCCESS on success, * FILE_RELAY_E_INVALID_ARG when one of client or client->parent * is invalid, or FILE_RELAY_E_UNKNOWN_ERROR when the was an error * freeing the parent property_list_service client. */ file_relay_error_t file_relay_client_free(file_relay_client_t client) { if (!client) return FILE_RELAY_E_INVALID_ARG; if (property_list_service_client_free(client->parent) != PROPERTY_LIST_SERVICE_E_SUCCESS) { return FILE_RELAY_E_UNKNOWN_ERROR; } return FILE_RELAY_E_SUCCESS; }
LIBIMOBILEDEVICE_API mobileactivation_error_t mobileactivation_client_free(mobileactivation_client_t client) { if (!client) return MOBILEACTIVATION_E_INVALID_ARG; if (property_list_service_client_free(client->parent) != PROPERTY_LIST_SERVICE_E_SUCCESS) { return MOBILEACTIVATION_E_UNKNOWN_ERROR; } free(client); return MOBILEACTIVATION_E_SUCCESS; }
LIBIMOBILEDEVICE_API sbservices_error_t sbservices_client_free(sbservices_client_t client) { if (!client) return SBSERVICES_E_INVALID_ARG; sbservices_error_t err = sbservices_error(property_list_service_client_free(client->parent)); client->parent = NULL; mutex_destroy(&client->mutex); free(client); return err; }
LIBIMOBILEDEVICE_API np_error_t np_client_free(np_client_t client) { plist_t dict; property_list_service_client_t parent; if (!client) return NP_E_INVALID_ARG; dict = plist_new_dict(); plist_dict_set_item(dict,"Command", plist_new_string("Shutdown")); property_list_service_send_xml_plist(client->parent, dict); plist_free(dict); parent = client->parent; /* notifies the client->notifier thread that it should terminate */ client->parent = NULL; if (client->notifier) { debug_info("joining np callback"); thread_join(client->notifier); thread_free(client->notifier); client->notifier = (thread_t)NULL; } else { dict = NULL; property_list_service_receive_plist(parent, &dict); if (dict) { #ifndef STRIP_DEBUG_CODE char *cmd_value = NULL; plist_t cmd_value_node = plist_dict_get_item(dict, "Command"); if (plist_get_node_type(cmd_value_node) == PLIST_STRING) { plist_get_string_val(cmd_value_node, &cmd_value); } if (cmd_value && !strcmp(cmd_value, "ProxyDeath")) { // this is the expected answer } else { debug_info("Did not get ProxyDeath but:"); debug_plist(dict); } if (cmd_value) { free(cmd_value); } #endif plist_free(dict); } } property_list_service_client_free(parent); mutex_destroy(&client->mutex); free(client); return NP_E_SUCCESS; }
/** * Disconnects a mobile_image_mounter client from the device and frees up the * mobile_image_mounter client data. * * @param client The mobile_image_mounter client to disconnect and free. * * @return MOBILE_IMAGE_MOUNTER_E_SUCCESS on success, * or MOBILE_IMAGE_MOUNTER_E_INVALID_ARG if client is NULL. */ mobile_image_mounter_error_t mobile_image_mounter_free(mobile_image_mounter_client_t client) { if (!client) return MOBILE_IMAGE_MOUNTER_E_INVALID_ARG; property_list_service_client_free(client->parent); client->parent = NULL; mutex_destroy(&client->mutex); free(client); return MOBILE_IMAGE_MOUNTER_E_SUCCESS; }
/** * Disconnects an misagent client from the device and frees up the * misagent client data. * * @param client The misagent client to disconnect and free. * * @return MISAGENT_E_SUCCESS on success, MISAGENT_E_INVALID_ARG when * client is NULL, or an MISAGENT_E_* error code otherwise. */ misagent_error_t misagent_client_free(misagent_client_t client) { if (!client) return MISAGENT_E_INVALID_ARG; misagent_error_t err = MISAGENT_E_SUCCESS; if (client->parent && client->parent->parent) { misagent_error(property_list_service_client_free(client->parent)); } client->parent = NULL; free(client); return err; }
/** * Disconnects an house_arrest client from the device and frees up the * house_arrest client data. * * @note After using afc_client_new_from_house_arrest_client(), make sure * you call afc_client_free() before calling this function to ensure * a proper cleanup. Do not call this function if you still need to * perform AFC operations since it will close the connection. * * @param client The house_arrest client to disconnect and free. * * @return HOUSE_ARREST_E_SUCCESS on success, HOUSE_ARREST_E_INVALID_ARG when * client is NULL, or an HOUSE_ARREST_E_* error code otherwise. */ house_arrest_error_t house_arrest_client_free(house_arrest_client_t client) { if (!client) return HOUSE_ARREST_E_INVALID_ARG; house_arrest_error_t err = HOUSE_ARREST_E_SUCCESS; if (client->parent && client->parent->parent->connection) { house_arrest_error(property_list_service_client_free(client->parent)); } client->parent = NULL; free(client); return err; }
/** * Disconnects an installation_proxy client from the device and frees up the * installation_proxy client data. * * @param client The installation_proxy client to disconnect and free. * * @return INSTPROXY_E_SUCCESS on success * or INSTPROXY_E_INVALID_ARG if client is NULL. */ instproxy_error_t instproxy_client_free(instproxy_client_t client) { if (!client) return INSTPROXY_E_INVALID_ARG; property_list_service_client_free(client->parent); client->parent = NULL; if (client->status_updater) { debug_info("joining status_updater"); thread_join(client->status_updater); } mutex_destroy(&client->mutex); free(client); return INSTPROXY_E_SUCCESS; }
/** * Disconnects a notification_proxy client from the device and frees up the * notification_proxy client data. * * @param client The notification_proxy client to disconnect and free. * * @return NP_E_SUCCESS on success, or NP_E_INVALID_ARG when client is NULL. */ np_error_t np_client_free(np_client_t client) { if (!client) return NP_E_INVALID_ARG; property_list_service_client_free(client->parent); client->parent = NULL; if (client->notifier) { debug_info("joining np callback"); thread_join(client->notifier); } mutex_destroy(&client->mutex); free(client); return NP_E_SUCCESS; }
/** * Disconnects an sbservices client from the device and frees up the * sbservices client data. * * @param client The sbservices client to disconnect and free. * * @return SBSERVICES_E_SUCCESS on success, SBSERVICES_E_INVALID_ARG when * client is NULL, or an SBSERVICES_E_* error code otherwise. */ sbservices_error_t sbservices_client_free(sbservices_client_t client) { if (!client) return SBSERVICES_E_INVALID_ARG; sbservices_error_t err = sbservices_error(property_list_service_client_free(client->parent)); client->parent = NULL; #ifdef WIN32 DeleteCriticalSection(&client->mutex); #else pthread_mutex_destroy(&client->mutex); #endif free(client); return err; }
LIBIMOBILEDEVICE_API instproxy_error_t instproxy_client_free(instproxy_client_t client) { if (!client) return INSTPROXY_E_INVALID_ARG; property_list_service_client_free(client->parent); client->parent = NULL; if (client->receive_status_thread) { debug_info("joining receive_status_thread"); thread_join(client->receive_status_thread); thread_free(client->receive_status_thread); client->receive_status_thread = (thread_t)NULL; } mutex_destroy(&client->mutex); free(client); return INSTPROXY_E_SUCCESS; }
/** * Disconnects an installation_proxy client from the device and frees up the * installation_proxy client data. * * @param client The installation_proxy client to disconnect and free. * * @return INSTPROXY_E_SUCCESS on success * or INSTPROXY_E_INVALID_ARG if client is NULL. */ instproxy_error_t instproxy_client_free(instproxy_client_t client) { if (!client) return INSTPROXY_E_INVALID_ARG; property_list_service_client_free(client->parent); client->parent = NULL; if (client->status_updater) { debug_info("joining status_updater"); #ifdef WIN32 WaitForSingleObject(client->status_updater, INFINITE); #else pthread_join(client->status_updater, NULL); #endif } #ifdef WIN32 DeleteCriticalSection(&client->mutex); #else pthread_mutex_destroy(&client->mutex); #endif free(client); return INSTPROXY_E_SUCCESS; }
/** * Disconnects a notification_proxy client from the device and frees up the * notification_proxy client data. * * @param client The notification_proxy client to disconnect and free. * * @return NP_E_SUCCESS on success, or NP_E_INVALID_ARG when client is NULL. */ np_error_t np_client_free(np_client_t client) { if (!client) return NP_E_INVALID_ARG; property_list_service_client_free(client->parent); client->parent = NULL; if (client->notifier) { debug_info("joining np callback"); #ifdef WIN32 WaitForSingleObject(client->notifier, INFINITE); #else pthread_join(client->notifier, NULL); #endif } #ifdef WIN32 DeleteCriticalSection(&client->mutex); #else pthread_mutex_destroy(&client->mutex); #endif free(client); return NP_E_SUCCESS; }