diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/installation_proxy.c | 43 |
1 files changed, 28 insertions, 15 deletions
diff --git a/src/installation_proxy.c b/src/installation_proxy.c index e4484ad..76eb0ba 100644 --- a/src/installation_proxy.c +++ b/src/installation_proxy.c @@ -605,25 +605,39 @@ static void instproxy_copy_lookup_result_cb(plist_t command, plist_t status, voi } } -LIBIMOBILEDEVICE_API instproxy_error_t instproxy_lookup(instproxy_client_t client, plist_t appids, plist_t client_options, plist_t *result) +LIBIMOBILEDEVICE_API instproxy_error_t instproxy_lookup(instproxy_client_t client, const char** appids, plist_t client_options, plist_t *result) { - if (!client || !client->parent || !result) - return INSTPROXY_E_INVALID_ARG; - - if (appids && (plist_get_node_type(appids) != PLIST_ARRAY && plist_get_node_type(appids) != PLIST_STRING)) - return INSTPROXY_E_INVALID_ARG; - instproxy_error_t res = INSTPROXY_E_UNKNOWN_ERROR; - + int i = 0; plist_t lookup_result = NULL; + plist_t command = NULL; + plist_t appid_array = NULL; + plist_t node = NULL; - plist_t command = plist_new_dict(); + if (!client || !client->parent || !result) + return INSTPROXY_E_INVALID_ARG; + + command = plist_new_dict(); plist_dict_set_item(command, "Command", plist_new_string("Lookup")); + if (client_options) { + node = plist_copy(client_options); + } else if (appids) { + node = plist_new_dict(); + } + + /* add bundle identifiers to client options */ if (appids) { - plist_dict_set_item(client_options, "BundleIDs", plist_copy(appids)); + appid_array = plist_new_array(); + while (appids[i]) { + plist_array_append_item(appid_array, plist_new_string(appids[i])); + i++; + } + plist_dict_set_item(node, "BundleIDs", appid_array); + } + + if (node) { + plist_dict_set_item(command, "ClientOptions", node); } - if (client_options) - plist_dict_set_item(command, "ClientOptions", plist_copy(client_options)); res = instproxy_perform_command(client, command, INSTPROXY_COMMAND_TYPE_SYNC, instproxy_copy_lookup_result_cb, (void*)&lookup_result); @@ -973,12 +987,11 @@ LIBIMOBILEDEVICE_API instproxy_error_t instproxy_client_get_path_for_bundle_iden instproxy_client_options_set_return_attributes(client_opts, "CFBundleIdentifier", "CFBundleExecutable", "Path", NULL); // only query for specific appid - plist_t appid_node = plist_new_string(appid); + const char* appids[] = {appid, NULL}; // query device for list of apps - instproxy_error_t ierr = instproxy_lookup(client, appid_node, client_opts, &apps); + instproxy_error_t ierr = instproxy_lookup(client, appids, client_opts, &apps); - plist_free(appid_node); instproxy_client_options_free(client_opts); if (ierr != INSTPROXY_E_SUCCESS) { |