diff options
author | Nikias Bassen | 2013-02-27 15:50:42 +0100 |
---|---|---|
committer | Martin Szulecki | 2013-02-27 16:18:48 +0100 |
commit | dbe4017314f23f06301fd5017a9e888c6a604bfb (patch) | |
tree | f477c9a191b086230eaef580b564430b6c4dbf0b /src/service.c | |
parent | 63e70332393e4fb6ae275abf1e1baea0235f08e9 (diff) | |
download | libimobiledevice-dbe4017314f23f06301fd5017a9e888c6a604bfb.tar.gz libimobiledevice-dbe4017314f23f06301fd5017a9e888c6a604bfb.tar.bz2 |
turn service_client_start_service into service_client_factory_start_service
Diffstat (limited to 'src/service.c')
-rw-r--r-- | src/service.c | 24 |
1 files changed, 15 insertions, 9 deletions
diff --git a/src/service.c b/src/service.c index af37a83..738db02 100644 --- a/src/service.c +++ b/src/service.c @@ -103,7 +103,7 @@ service_error_t service_client_new(idevice_t device, lockdownd_service_descripto * @return SERVICE_E_SUCCESS on success, or a SERVICE_E_* error code * otherwise. */ -service_error_t service_client_start_service(idevice_t device, const char* service_name, service_client_t *client, const char* label) +service_error_t service_client_factory_start_service(idevice_t device, const char* service_name, void **client, const char* label, uint16_t (*constructor_func)(idevice_t, lockdownd_service_descriptor_t, void**), uint16_t *error_code) { *client = NULL; @@ -122,18 +122,24 @@ service_error_t service_client_start_service(idevice_t device, const char* servi return SERVICE_E_START_SERVICE_ERROR; } - service_error_t res = service_client_new(device, service, client); - if (res != SERVICE_E_SUCCESS) { - debug_info("Could not connect to service %s! Port: %i, error: %i", service_name, service->port, res); - return res; + uint16_t ec; + if (constructor_func) { + ec = (uint16_t)constructor_func(device, service, client); + } else { + ec = service_client_new(device, service, (service_client_t*)client); + } + if (error_code) { + *error_code = ec; } - if (service) { - lockdownd_service_descriptor_free(service); - service = NULL; + if (ec != SERVICE_E_SUCCESS) { + debug_info("Could not connect to service %s! Port: %i, error: %i", service_name, service->port, ec); } - return SERVICE_E_SUCCESS; + lockdownd_service_descriptor_free(service); + service = NULL; + + return (ec == SERVICE_E_SUCCESS) ? SERVICE_E_SUCCESS : SERVICE_E_START_SERVICE_ERROR; } /** |