diff options
author | Johan Hedberg <johan.hedberg@nokia.com> | 2007-05-09 15:51:02 +0000 |
---|---|---|
committer | Johan Hedberg <johan.hedberg@nokia.com> | 2007-05-09 15:51:02 +0000 |
commit | bbbc61a634179156b2a64d95f0ddd25fd164eaaf (patch) | |
tree | 777b15a6a11e94728215ad2e8d9d31bece688e32 /audio/manager.c | |
parent | ea478e3120a4a2d777c5b828e96fde0e44fc897a (diff) |
Convert to using generic dbus message dispatching
Diffstat (limited to 'audio/manager.c')
-rw-r--r-- | audio/manager.c | 84 |
1 files changed, 43 insertions, 41 deletions
diff --git a/audio/manager.c b/audio/manager.c index 04bb3b96..19a02150 100644 --- a/audio/manager.c +++ b/audio/manager.c @@ -41,6 +41,7 @@ #include <dbus/dbus.h> #include "dbus.h" +#include "dbus-helper.h" #include "logging.h" #include "ipc.h" @@ -154,7 +155,8 @@ static void manager_remove_headset(char *path) g_free(path); } -static DBusHandlerResult am_create_headset(DBusMessage *msg) +static DBusHandlerResult am_create_headset(DBusConnection *conn, DBusMessage *msg, + void *data) { const char *hs_path; const char *address; @@ -197,7 +199,8 @@ static DBusHandlerResult am_create_headset(DBusMessage *msg) return send_message_and_unref(connection, reply); } -static DBusHandlerResult am_remove_headset(DBusMessage *msg) +static DBusHandlerResult am_remove_headset(DBusConnection *conn, DBusMessage *msg, + void *data) { DBusError derr; DBusMessage *reply; @@ -250,7 +253,8 @@ static DBusHandlerResult am_remove_headset(DBusMessage *msg) return send_message_and_unref(connection, reply); } -static DBusHandlerResult am_list_headsets(DBusMessage *msg) +static DBusHandlerResult am_list_headsets(DBusConnection *conn, DBusMessage *msg, + void *data) { DBusMessageIter iter; DBusMessageIter array_iter; @@ -275,7 +279,8 @@ static DBusHandlerResult am_list_headsets(DBusMessage *msg) return send_message_and_unref(connection, reply); } -static DBusHandlerResult am_get_default_headset(DBusMessage *msg) +static DBusHandlerResult am_get_default_headset(DBusConnection *conn, DBusMessage *msg, + void *data) { DBusMessage *reply; @@ -294,7 +299,8 @@ static DBusHandlerResult am_get_default_headset(DBusMessage *msg) return send_message_and_unref(connection, reply); } -static DBusHandlerResult am_change_default_headset(DBusMessage *msg) +static DBusHandlerResult am_change_default_headset(DBusConnection *conn, DBusMessage *msg, + void *data) { DBusError derr; DBusMessage *reply; @@ -331,41 +337,25 @@ static DBusHandlerResult am_change_default_headset(DBusMessage *msg) return send_message_and_unref(connection, reply); } -static DBusHandlerResult am_message(DBusConnection *conn, - DBusMessage *msg, void *data) -{ - const char *interface, *member; - - interface = dbus_message_get_interface(msg); - member = dbus_message_get_member(msg); - - if (!strcmp(DBUS_INTERFACE_INTROSPECTABLE, interface) && - !strcmp("Introspect", member)) - return simple_introspect(conn, msg, data); - - if (strcmp(interface, "org.bluez.audio.Manager") != 0) - return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; - - if (strcmp(member, "CreateHeadset") == 0) - return am_create_headset(msg); - - if (strcmp(member, "RemoveHeadset") == 0) - return am_remove_headset(msg); - - if (strcmp(member, "ListHeadsets") == 0) - return am_list_headsets(msg); - - if (strcmp(member, "DefaultHeadset") == 0) - return am_get_default_headset(msg); - - if (strcmp(member, "ChangeDefaultHeadset") == 0) - return am_change_default_headset(msg); - - return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; -} +static DBusMethodVTable manager_methods[] = { + { "CreateHeadset", am_create_headset, + "s", "s" }, + { "RemoveHeadset", am_remove_headset, + "s", "" }, + { "ListHeadsets", am_list_headsets, + "", "as" }, + { "DefaultHeadset", am_get_default_headset, + "", "s" }, + { "ChangeDefaultHeadset", am_change_default_headset, + "s", "" }, + { NULL, NULL, NULL, NULL }, +}; -static const DBusObjectPathVTable am_table = { - .message_function = am_message, +static DBusSignalVTable manager_signals[] = { + { "HeadsetCreated", "s" }, + { "HeadsetRemoved", "s" }, + { "DefaultHeadsetChanged", "s" }, + { NULL, NULL } }; int audio_init(DBusConnection *conn) @@ -401,13 +391,25 @@ int audio_init(DBusConnection *conn) g_io_channel_unref(io); - if (!dbus_connection_register_object_path(conn, AUDIO_MANAGER_PATH, - &am_table, NULL)) { + if (!dbus_connection_create_object_path(conn, AUDIO_MANAGER_PATH, + NULL, NULL)) { error("D-Bus failed to register %s path", AUDIO_MANAGER_PATH); close(sk); return -1; } + if (!dbus_connection_register_interface(conn, AUDIO_MANAGER_PATH, + AUDIO_MANAGER_INTERFACE, + manager_methods, + manager_signals, NULL)) { + error("Failed to register %s interface to %s", + AUDIO_MANAGER_INTERFACE, AUDIO_MANAGER_PATH); + dbus_connection_destroy_object_path(conn, + AUDIO_MANAGER_PATH); + close(sk); + return -1; + } + connection = dbus_connection_ref(conn); return 0; |