summaryrefslogtreecommitdiff
path: root/src/dbus.c
diff options
context:
space:
mode:
authorMarcel Holtmann <marcel@holtmann.org>2009-12-19 13:03:19 -0800
committerMarcel Holtmann <marcel@holtmann.org>2009-12-19 13:03:19 -0800
commitffddf23a6b108454ae357aa8bdc2d8b23222dd79 (patch)
tree77eb6abcc14cbfe76ef70e3009cf35b1e905b3e8 /src/dbus.c
parentee9ffa509ee08cd6599c13f2d8a39c215fd991ca (diff)
downloadconnman-ffddf23a6b108454ae357aa8bdc2d8b23222dd79.tar.gz
connman-ffddf23a6b108454ae357aa8bdc2d8b23222dd79.tar.bz2
connman-ffddf23a6b108454ae357aa8bdc2d8b23222dd79.zip
Add helpers for adding dictionaries as property
Diffstat (limited to 'src/dbus.c')
-rw-r--r--src/dbus.c43
1 files changed, 43 insertions, 0 deletions
diff --git a/src/dbus.c b/src/dbus.c
index d67b0f84..b2fb27b1 100644
--- a/src/dbus.c
+++ b/src/dbus.c
@@ -118,6 +118,27 @@ void connman_dbus_property_append_variant(DBusMessageIter *iter,
dbus_message_iter_close_container(iter, &value);
}
+void connman_dbus_property_append_dict(DBusMessageIter *iter, const char *key,
+ connman_dbus_append_cb_t function, void *user_data)
+{
+ DBusMessageIter value, dict;
+
+ dbus_message_iter_append_basic(iter, DBUS_TYPE_STRING, &key);
+
+ dbus_message_iter_open_container(iter, DBUS_TYPE_VARIANT,
+ DBUS_TYPE_ARRAY_AS_STRING
+ DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING
+ DBUS_TYPE_STRING_AS_STRING DBUS_TYPE_VARIANT_AS_STRING
+ DBUS_DICT_ENTRY_END_CHAR_AS_STRING, &value);
+
+ connman_dbus_dict_open(&value, &dict);
+ if (function)
+ function(&dict);
+ connman_dbus_dict_close(&value, &dict);
+
+ dbus_message_iter_close_container(iter, &value);
+}
+
void connman_dbus_property_append_fixed_array(DBusMessageIter *iter,
const char *key, int type, void *val, int len)
{
@@ -203,6 +224,28 @@ dbus_bool_t connman_dbus_property_changed_basic(const char *path,
return TRUE;
}
+dbus_bool_t connman_dbus_property_changed_dict(const char *path,
+ const char *interface, const char *key,
+ connman_dbus_append_cb_t function, void *user_data)
+{
+ DBusMessage *signal;
+ DBusMessageIter iter;
+
+ if (path == NULL)
+ return FALSE;
+
+ signal = dbus_message_new_signal(path, interface, "PropertyChanged");
+ if (signal == NULL)
+ return FALSE;
+
+ dbus_message_iter_init_append(signal, &iter);
+ connman_dbus_property_append_dict(&iter, key, function, user_data);
+
+ g_dbus_send_message(connection, signal);
+
+ return TRUE;
+}
+
DBusConnection *connman_dbus_get_connection(void)
{
if (connection == NULL)