diff options
Diffstat (limited to 'hcid/dbus-common.c')
-rw-r--r-- | hcid/dbus-common.c | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/hcid/dbus-common.c b/hcid/dbus-common.c index 2c84a5b2..3e059158 100644 --- a/hcid/dbus-common.c +++ b/hcid/dbus-common.c @@ -70,6 +70,38 @@ static sdp_session_t *sess = NULL; static int experimental = 0; +void append_dict_entry(DBusMessageIter *dict, const char *key, + int type, void *val) +{ + DBusMessageIter entry; + DBusMessageIter value; + char *sig; + + dbus_message_iter_open_container(dict, DBUS_TYPE_DICT_ENTRY, NULL, &entry); + + dbus_message_iter_append_basic(&entry, DBUS_TYPE_STRING, &key); + + switch (type) { + case DBUS_TYPE_STRING: + sig = DBUS_TYPE_STRING_AS_STRING; + break; + case DBUS_TYPE_UINT32: + sig = DBUS_TYPE_UINT32_AS_STRING; + break; + default: + sig = DBUS_TYPE_VARIANT_AS_STRING; + break; + } + + dbus_message_iter_open_container(&entry, DBUS_TYPE_VARIANT, sig, &value); + + dbus_message_iter_append_basic(&value, type, &val); + + dbus_message_iter_close_container(&entry, &value); + + dbus_message_iter_close_container(dict, &entry); +} + service_handler_func_t find_service_handler(struct service_data *handlers, DBusMessage *msg) { struct service_data *current; |