service_error_t service_client_new(idevice_t device, lockdownd_service_descriptor_t service, service_client_t *client) { if (!device || !service || service->port == 0 || !client || *client) return SERVICE_E_INVALID_ARG; /* Attempt connection */ idevice_connection_t connection = NULL; if (idevice_connect(device, service->port, &connection) != IDEVICE_E_SUCCESS) { return SERVICE_E_MUX_ERROR; } /* create client object */ service_client_t client_loc = (service_client_t)malloc(sizeof(struct service_client_private)); client_loc->connection = connection; /* enable SSL if requested */ if (service->ssl_enabled == 1) { service_error_t result = service_enable_ssl(client_loc); if (SERVICE_E_SUCCESS != result) { service_client_free(client_loc); return result; } } /* all done, return success */ *client = client_loc; return SERVICE_E_SUCCESS; }
LIBIMOBILEDEVICE_API property_list_service_error_t property_list_service_enable_ssl(property_list_service_client_t client) { if (!client || !client->parent) return PROPERTY_LIST_SERVICE_E_INVALID_ARG; return service_to_property_list_service_error(service_enable_ssl(client->parent)); }