summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/libimobiledevice/installation_proxy.h10
-rw-r--r--src/installation_proxy.c21
2 files changed, 31 insertions, 0 deletions
diff --git a/include/libimobiledevice/installation_proxy.h b/include/libimobiledevice/installation_proxy.h
index c15f0d0..a2189e9 100644
--- a/include/libimobiledevice/installation_proxy.h
+++ b/include/libimobiledevice/installation_proxy.h
@@ -295,6 +295,16 @@ plist_t instproxy_client_options_new(void);
void instproxy_client_options_add(plist_t client_options, ...);
/**
+ * Adds attributes to the given client_options to filter browse results.
+ *
+ * @param client_options The client options to modify.
+ * @param ... VALUE, VALUE, [VALUE], NULL
+ *
+ * @note The values passed are expected to be strings.
+ */
+void instproxy_client_options_set_return_attributes(plist_t client_options, ...);
+
+/**
* Frees client_options plist.
*
* @param client_options The client options plist to free. Does nothing if NULL
diff --git a/src/installation_proxy.c b/src/installation_proxy.c
index e279edf..3d9d314 100644
--- a/src/installation_proxy.c
+++ b/src/installation_proxy.c
@@ -578,6 +578,27 @@ LIBIMOBILEDEVICE_API void instproxy_client_options_add(plist_t client_options, .
va_end(args);
}
+LIBIMOBILEDEVICE_API void instproxy_client_options_set_return_attributes(plist_t client_options, ...)
+{
+ if (!client_options)
+ return;
+
+ plist_t return_attributes = plist_new_array();
+
+ va_list args;
+ va_start(args, client_options);
+ char *arg = va_arg(args, char*);
+ while (arg) {
+ char *attribute = strdup(arg);
+ plist_array_append_item(return_attributes, plist_new_string(attribute));
+ free(attribute);
+ arg = va_arg(args, char*);
+ }
+ va_end(args);
+
+ plist_dict_set_item(client_options, "ReturnAttributes", return_attributes);
+}
+
LIBIMOBILEDEVICE_API void instproxy_client_options_free(plist_t client_options)
{
if (client_options) {