From f251712760f3741a00458b652c5571c5ba39a700 Mon Sep 17 00:00:00 2001 From: Mohamed Abbas Date: Tue, 13 Sep 2011 09:55:15 +0300 Subject: [PATCH] gsupplicant: Add support to append char ** entries to dbus dict --- gsupplicant/dbus.c | 34 ++++++++++++++++++++++++++++++++++ gsupplicant/dbus.h | 20 ++++++++++++++++++++ 2 files changed, 54 insertions(+) diff --git a/gsupplicant/dbus.c b/gsupplicant/dbus.c index e014265..7d427be 100644 --- a/gsupplicant/dbus.c +++ b/gsupplicant/dbus.c @@ -520,3 +520,37 @@ void supplicant_dbus_property_append_fixed_array(DBusMessageIter *iter, dbus_message_iter_close_container(iter, &value); } + +void supplicant_dbus_property_append_array(DBusMessageIter *iter, + const char *key, int type, + supplicant_dbus_array_function function, + void *user_data) +{ + DBusMessageIter value, array; + const char *variant_sig, *array_sig; + + switch (type) { + case DBUS_TYPE_STRING: + variant_sig = DBUS_TYPE_ARRAY_AS_STRING + DBUS_TYPE_ARRAY_AS_STRING + DBUS_TYPE_BYTE_AS_STRING; + array_sig = DBUS_TYPE_ARRAY_AS_STRING DBUS_TYPE_BYTE_AS_STRING; + break; + default: + return; + } + + dbus_message_iter_append_basic(iter, DBUS_TYPE_STRING, &key); + + dbus_message_iter_open_container(iter, DBUS_TYPE_VARIANT, + variant_sig, &value); + + dbus_message_iter_open_container(&value, DBUS_TYPE_ARRAY, + array_sig, &array); + if (function) + function(&array, user_data); + + dbus_message_iter_close_container(&value, &array); + + dbus_message_iter_close_container(iter, &value); +} diff --git a/gsupplicant/dbus.h b/gsupplicant/dbus.h index 642e8b1..fbada07 100644 --- a/gsupplicant/dbus.h +++ b/gsupplicant/dbus.h @@ -37,6 +37,11 @@ typedef void (*supplicant_dbus_setup_function) (DBusMessageIter *iter, typedef void (*supplicant_dbus_result_function) (const char *error, DBusMessageIter *iter, void *user_data); +void supplicant_dbus_property_append_array(DBusMessageIter *iter, + const char *key, int type, + supplicant_dbus_array_function function, + void *user_data); + void supplicant_dbus_setup(DBusConnection *conn); void supplicant_dbus_array_foreach(DBusMessageIter *iter, @@ -111,3 +116,18 @@ supplicant_dbus_dict_append_fixed_array(DBusMessageIter *dict, supplicant_dbus_property_append_fixed_array(&entry, key, type, val, len); dbus_message_iter_close_container(dict, &entry); } + +static inline void +supplicant_dbus_dict_append_array(DBusMessageIter *dict, + const char *key, int type, + supplicant_dbus_array_function function, + void *user_data) +{ + DBusMessageIter entry; + + dbus_message_iter_open_container(dict, DBUS_TYPE_DICT_ENTRY, + NULL, &entry); + supplicant_dbus_property_append_array(&entry, key, type, + function, user_data); + dbus_message_iter_close_container(dict, &entry); +} -- 2.7.4