summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLucas De Marchi <lucas.demarchi@profusion.mobi>2012-10-04 04:26:39 -0300
committerJohan Hedberg <johan.hedberg@intel.com>2012-10-04 17:11:47 +0300
commitefc9185b8effd5904a9f0b2450756ebbec072b52 (patch)
treeee888fb3ed9afe24be847f94a6c1c047ff191646
parentc0c909364fe5d8ed3b678a3dbd0adc2b7e926d83 (diff)
downloadbluez-efc9185b8effd5904a9f0b2450756ebbec072b52.tar.gz
core: Use DBus.Properties on Manager interface
-rw-r--r--src/manager.c81
1 files changed, 25 insertions, 56 deletions
diff --git a/src/manager.c b/src/manager.c
index f1f0f4d06..2ceeed15e 100644
--- a/src/manager.c
+++ b/src/manager.c
@@ -132,46 +132,30 @@ done:
return reply;
}
-static DBusMessage *get_properties(DBusConnection *conn,
- DBusMessage *msg, void *data)
+static gboolean manager_property_get_adapters(
+ const GDBusPropertyTable *property,
+ DBusMessageIter *iter, void *data)
{
- DBusMessage *reply;
- DBusMessageIter iter;
- DBusMessageIter dict;
- GSList *list;
- char **array;
- int i;
-
- reply = dbus_message_new_method_return(msg);
- if (!reply)
- return NULL;
-
- dbus_message_iter_init_append(reply, &iter);
+ DBusMessageIter entry;
+ GSList *l;
- dbus_message_iter_open_container(&iter, DBUS_TYPE_ARRAY,
- DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING
- DBUS_TYPE_STRING_AS_STRING DBUS_TYPE_VARIANT_AS_STRING
- DBUS_DICT_ENTRY_END_CHAR_AS_STRING, &dict);
+ dbus_message_iter_open_container(iter, DBUS_TYPE_ARRAY,
+ DBUS_TYPE_OBJECT_PATH_AS_STRING, &entry);
- array = g_new0(char *, g_slist_length(adapters) + 1);
- for (i = 0, list = adapters; list; list = list->next) {
- struct btd_adapter *adapter = list->data;
+ for (l = adapters; l != NULL; l = l->next) {
+ struct btd_adapter *adapter = l->data;
+ const char *path = adapter_get_path(adapter);
- array[i] = (char *) adapter_get_path(adapter);
- i++;
+ dbus_message_iter_append_basic(&entry, DBUS_TYPE_OBJECT_PATH,
+ &path);
}
- dict_append_array(&dict, "Adapters", DBUS_TYPE_OBJECT_PATH, &array, i);
- g_free(array);
- dbus_message_iter_close_container(&iter, &dict);
+ dbus_message_iter_close_container(iter, &entry);
- return reply;
+ return TRUE;
}
static const GDBusMethodTable manager_methods[] = {
- { GDBUS_METHOD("GetProperties",
- NULL, GDBUS_ARGS({ "properties", "a{sv}" }),
- get_properties) },
{ GDBUS_METHOD("DefaultAdapter",
NULL, GDBUS_ARGS({ "adapter", "o" }),
default_adapter) },
@@ -189,8 +173,6 @@ static const GDBusMethodTable manager_methods[] = {
};
static const GDBusSignalTable manager_signals[] = {
- { GDBUS_SIGNAL("PropertyChanged",
- GDBUS_ARGS({ "name", "s" }, { "value", "v" })) },
{ GDBUS_SIGNAL("AdapterAdded",
GDBUS_ARGS({ "adapter", "o" })) },
{ GDBUS_SIGNAL("AdapterRemoved",
@@ -200,34 +182,19 @@ static const GDBusSignalTable manager_signals[] = {
{ }
};
+static const GDBusPropertyTable manager_properties[] = {
+ { "Adapters", "ao", manager_property_get_adapters },
+ { }
+};
+
dbus_bool_t manager_init(const char *path)
{
snprintf(base_path, sizeof(base_path), "/org/bluez/%d", getpid());
return g_dbus_register_interface(btd_get_dbus_connection(),
"/", MANAGER_INTERFACE,
- manager_methods, manager_signals, NULL,
- NULL, NULL);
-}
-
-static void manager_update_adapters(void)
-{
- GSList *list;
- char **array;
- int i;
-
- array = g_new0(char *, g_slist_length(adapters) + 1);
- for (i = 0, list = adapters; list; list = list->next) {
- struct btd_adapter *adapter = list->data;
-
- array[i] = (char *) adapter_get_path(adapter);
- i++;
- }
-
- emit_array_property_changed("/", MANAGER_INTERFACE, "Adapters",
- DBUS_TYPE_OBJECT_PATH, &array, i);
-
- g_free(array);
+ manager_methods, manager_signals,
+ manager_properties, NULL, NULL);
}
static void manager_set_default_adapter(int id)
@@ -261,7 +228,8 @@ static void manager_remove_adapter(struct btd_adapter *adapter)
adapters = g_slist_remove(adapters, adapter);
- manager_update_adapters();
+ g_dbus_emit_property_changed(btd_get_dbus_connection(), "/",
+ MANAGER_INTERFACE, "Adapters");
if (default_adapter_id == dev_id || default_adapter_id < 0) {
int new_default = hci_get_route(NULL);
@@ -381,7 +349,8 @@ struct btd_adapter *btd_manager_register_adapter(int id, gboolean up)
DBUS_TYPE_OBJECT_PATH, &path,
DBUS_TYPE_INVALID);
- manager_update_adapters();
+ g_dbus_emit_property_changed(btd_get_dbus_connection(), "/",
+ MANAGER_INTERFACE, "Adapters");
btd_stop_exit_timer();