summaryrefslogtreecommitdiffstats
path: root/audio/manager.c
diff options
context:
space:
mode:
Diffstat (limited to 'audio/manager.c')
-rw-r--r--audio/manager.c189
1 files changed, 78 insertions, 111 deletions
diff --git a/audio/manager.c b/audio/manager.c
index f6d26abd..2c3e4257 100644
--- a/audio/manager.c
+++ b/audio/manager.c
@@ -120,7 +120,7 @@ static struct enabled_interfaces enabled = {
.control = TRUE,
};
-static DBusHandlerResult get_records(uuid_t *uuid, struct audio_sdp_data *data);
+static DBusMessage *get_records(uuid_t *uuid, struct audio_sdp_data *data);
static struct audio_device *create_device(const bdaddr_t *bda)
{
@@ -430,7 +430,7 @@ static void get_records_cb(sdp_list_t *recs, int err, gpointer user_data)
get_records(&uuid, data);
}
-static DBusHandlerResult get_records(uuid_t *uuid, struct audio_sdp_data *data)
+static DBusMessage *get_records(uuid_t *uuid, struct audio_sdp_data *data)
{
struct audio_device *device = data->device;
int err;
@@ -448,10 +448,10 @@ static DBusHandlerResult get_records(uuid_t *uuid, struct audio_sdp_data *data)
return DBUS_HANDLER_RESULT_HANDLED;
}
-static DBusHandlerResult resolve_services(DBusMessage *msg,
- struct audio_device *device,
- create_dev_cb_t cb,
- void *user_data)
+static DBusMessage *resolve_services(DBusMessage *msg,
+ struct audio_device *device,
+ create_dev_cb_t cb,
+ void *user_data)
{
struct audio_sdp_data *sdp_data;
uuid_t uuid;
@@ -568,9 +568,9 @@ gboolean manager_create_device(bdaddr_t *bda, create_dev_cb_t cb,
return TRUE;
}
-static DBusHandlerResult am_create_device(DBusConnection *conn,
- DBusMessage *msg,
- void *data)
+static DBusMessage *am_create_device(DBusConnection *conn,
+ DBusMessage *msg,
+ void *data)
{
const char *address, *path;
bdaddr_t bda;
@@ -601,15 +601,15 @@ static DBusHandlerResult am_create_device(DBusConnection *conn,
reply = dbus_message_new_method_return(msg);
if (!reply)
- return DBUS_HANDLER_RESULT_NEED_MEMORY;
+ return NULL;
dbus_message_append_args(reply, DBUS_TYPE_STRING, &path,
DBUS_TYPE_INVALID);
- return send_message_and_unref(conn, reply);
+ return reply;
}
-static DBusHandlerResult am_list_devices(DBusConnection *conn,
+static DBusMessage *am_list_devices(DBusConnection *conn,
DBusMessage *msg,
void *data)
{
@@ -619,7 +619,6 @@ static DBusHandlerResult am_list_devices(DBusConnection *conn,
GSList *l;
gboolean hs_only = FALSE;
-
dbus_error_init(&derr);
if (dbus_message_is_method_call(msg, AUDIO_MANAGER_INTERFACE,
@@ -630,7 +629,7 @@ static DBusHandlerResult am_list_devices(DBusConnection *conn,
reply = dbus_message_new_method_return(msg);
if (!reply)
- return DBUS_HANDLER_RESULT_NEED_MEMORY;
+ return NULL;
dbus_message_iter_init_append(reply, &iter);
@@ -649,7 +648,7 @@ static DBusHandlerResult am_list_devices(DBusConnection *conn,
dbus_message_iter_close_container(&iter, &array_iter);
- return send_message_and_unref(connection, reply);
+ return reply;
}
static gint device_path_cmp(gconstpointer a, gconstpointer b)
@@ -660,36 +659,28 @@ static gint device_path_cmp(gconstpointer a, gconstpointer b)
return strcmp(device->path, path);
}
-static DBusHandlerResult am_remove_device(DBusConnection *conn,
- DBusMessage *msg,
- void *data)
+static DBusMessage *am_remove_device(DBusConnection *conn,
+ DBusMessage *msg,
+ void *data)
{
- DBusError derr;
DBusMessage *reply;
GSList *match;
const char *path;
struct audio_device *device;
- dbus_error_init(&derr);
- if (!dbus_message_get_args(msg, &derr,
+ if (!dbus_message_get_args(msg, NULL,
DBUS_TYPE_STRING, &path,
- DBUS_TYPE_INVALID)) {
- error_invalid_arguments(connection, msg, derr.message);
- return DBUS_HANDLER_RESULT_HANDLED;
- }
- if (dbus_error_is_set(&derr)) {
- error_invalid_arguments(connection, msg, derr.message);
- dbus_error_free(&derr);
- return DBUS_HANDLER_RESULT_HANDLED;
- }
+ DBUS_TYPE_INVALID))
+ return NULL;
match = g_slist_find_custom(devices, path, device_path_cmp);
if (!match)
- return error_device_does_not_exist(connection, msg);
+ return g_dbus_create_error(msg, ERROR_INTERFACE ".DoesNotExists",
+ "Device does not exists");
reply = dbus_message_new_method_return(msg);
if (!reply)
- return DBUS_HANDLER_RESULT_NEED_MEMORY;
+ return NULL;
device = match->data;
device_remove_stored(device);
@@ -737,99 +728,88 @@ static DBusHandlerResult am_remove_device(DBusConnection *conn,
DBUS_TYPE_STRING, &path,
DBUS_TYPE_INVALID);
- return send_message_and_unref(connection, reply);
+ return reply;
}
-static DBusHandlerResult am_find_by_addr(DBusConnection *conn,
- DBusMessage *msg,
- void *data)
+static DBusMessage *am_find_by_addr(DBusConnection *conn,
+ DBusMessage *msg,
+ void *data)
{
const char *address;
DBusMessage *reply;
- DBusError derr;
struct audio_device *device;
bdaddr_t bda;
- dbus_error_init(&derr);
- dbus_message_get_args(msg, &derr,
+ if (!dbus_message_get_args(msg, NULL,
DBUS_TYPE_STRING, &address,
- DBUS_TYPE_INVALID);
- if (dbus_error_is_set(&derr)) {
- error_invalid_arguments(connection, msg, derr.message);
- dbus_error_free(&derr);
- return DBUS_HANDLER_RESULT_HANDLED;
- }
+ DBUS_TYPE_INVALID))
+ return NULL;
str2ba(address, &bda);
device = manager_find_device(&bda, NULL, FALSE);
if (!device)
- return error_device_does_not_exist(conn, msg);
+ return g_dbus_create_error(msg, ERROR_INTERFACE ".DoesNotExists",
+ "Device does not exists");
reply = dbus_message_new_method_return(msg);
if (!reply)
- return DBUS_HANDLER_RESULT_NEED_MEMORY;
+ return NULL;
dbus_message_append_args(reply, DBUS_TYPE_STRING, &device->path,
DBUS_TYPE_INVALID);
- return send_message_and_unref(conn, reply);
+ return reply;
}
-static DBusHandlerResult am_default_device(DBusConnection *conn,
- DBusMessage *msg,
- void *data)
+static DBusMessage *am_default_device(DBusConnection *conn,
+ DBusMessage *msg,
+ void *data)
{
DBusMessage *reply;
if (!default_dev)
- return error_device_does_not_exist(connection, msg);
+ return g_dbus_create_error(msg, ERROR_INTERFACE ".DoesNotExists",
+ "Device does not exists");
if (default_dev->headset == NULL &&
dbus_message_is_method_call(msg, AUDIO_MANAGER_INTERFACE,
"DefaultHeadset"))
- return error_device_does_not_exist(connection, msg);
+ return g_dbus_create_error(msg, ERROR_INTERFACE ".DoesNotExists",
+ "Device does not exists");
reply = dbus_message_new_method_return(msg);
if (!reply)
- return DBUS_HANDLER_RESULT_NEED_MEMORY;
+ return NULL;
dbus_message_append_args(reply, DBUS_TYPE_STRING, &default_dev->path,
DBUS_TYPE_INVALID);
- return send_message_and_unref(connection, reply);
+ return reply;
}
-static DBusHandlerResult am_change_default_device(DBusConnection *conn,
- DBusMessage *msg,
- void *data)
+static DBusMessage *am_change_default_device(DBusConnection *conn,
+ DBusMessage *msg,
+ void *data)
{
- DBusError derr;
DBusMessage *reply;
GSList *match;
const char *path;
struct audio_device *device;
- dbus_error_init(&derr);
- if (!dbus_message_get_args(msg, &derr,
+ if (!dbus_message_get_args(msg, NULL,
DBUS_TYPE_STRING, &path,
- DBUS_TYPE_INVALID)) {
- error_invalid_arguments(connection, msg, derr.message);
- return DBUS_HANDLER_RESULT_HANDLED;
- }
- if (dbus_error_is_set(&derr)) {
- error_invalid_arguments(connection, msg, derr.message);
- dbus_error_free(&derr);
- return DBUS_HANDLER_RESULT_HANDLED;
- }
+ DBUS_TYPE_INVALID))
+ return NULL;
match = g_slist_find_custom(devices, path, device_path_cmp);
if (!match)
- return error_device_does_not_exist(connection, msg);
+ return g_dbus_create_error(msg, ERROR_INTERFACE ".DoesNotExists",
+ "Device does not exists");
reply = dbus_message_new_method_return(msg);
if (!reply)
- return DBUS_HANDLER_RESULT_NEED_MEMORY;
+ return NULL;
device = match->data;
@@ -847,47 +827,40 @@ static DBusHandlerResult am_change_default_device(DBusConnection *conn,
DBUS_TYPE_STRING, &device->path,
DBUS_TYPE_INVALID);
else
- return error_device_does_not_exist(connection, msg);
+ return g_dbus_create_error(msg, ERROR_INTERFACE ".DoesNotExists",
+ "Device does not exists");
default_dev = device;
device_store(device, TRUE);
- return send_message_and_unref(connection, reply);
+
+ return reply;
}
-static DBusMethodVTable manager_methods[] = {
- { "CreateDevice", am_create_device,
- "s", "s" },
- { "RemoveDevice", am_remove_device,
- "s", "" },
- { "ListDevices", am_list_devices,
- "", "as" },
- { "DefaultDevice", am_default_device,
- "", "s" },
- { "ChangeDefaultDevice", am_change_default_device,
- "s", "" },
- { "CreateHeadset", am_create_device,
- "s", "s" },
- { "RemoveHeadset", am_remove_device,
- "s", "" },
- { "ListHeadsets", am_list_devices,
- "", "as" },
- { "FindDeviceByAddress", am_find_by_addr,
- "s", "s" },
- { "DefaultHeadset", am_default_device,
- "", "s" },
- { "ChangeDefaultHeadset", am_change_default_device,
- "s", "" },
- { NULL, NULL, NULL, NULL },
+static GDBusMethodTable manager_methods[] = {
+ { "CreateDevice", "s", "s", am_create_device,
+ G_DBUS_METHOD_FLAG_ASYNC },
+ { "RemoveDevice", "s", "", am_remove_device },
+ { "ListDevices", "", "as", am_list_devices },
+ { "DefaultDevice", "", "s", am_default_device },
+ { "ChangeDefaultDevice", "s", "", am_change_default_device },
+ { "CreateHeadset", "s", "s", am_create_device,
+ G_DBUS_METHOD_FLAG_ASYNC },
+ { "RemoveHeadset", "s", "", am_remove_device },
+ { "ListHeadsets", "", "as", am_list_devices },
+ { "FindDeviceByAddress", "s", "s", am_find_by_addr },
+ { "DefaultHeadset", "", "s", am_default_device },
+ { "ChangeDefaultHeadset", "s", "", am_change_default_device },
+ { }
};
-static DBusSignalVTable manager_signals[] = {
+static GDBusSignalTable manager_signals[] = {
{ "DeviceCreated", "s" },
{ "DeviceRemoved", "s" },
{ "HeadsetCreated", "s" },
{ "HeadsetRemoved", "s" },
{ "DefaultDeviceChanged", "s" },
{ "DefaultHeadsetChanged", "s" },
- { NULL, NULL }
+ { }
};
static void parse_stored_devices(char *key, char *value, void *data)
@@ -992,7 +965,7 @@ static void register_stored(void)
closedir(dir);
}
-static void manager_unregister(DBusConnection *conn, void *data)
+static void manager_unregister(void *data)
{
info("Unregistered manager path");
@@ -1501,12 +1474,6 @@ int audio_manager_init(DBusConnection *conn, GKeyFile *config)
g_strfreev(list);
proceed:
- if (!dbus_connection_create_object_path(conn, AUDIO_MANAGER_PATH,
- NULL, manager_unregister)) {
- error("D-Bus failed to register %s path", AUDIO_MANAGER_PATH);
- goto failed;
- }
-
if (enabled.headset) {
if (headset_server_init(conn, config) < 0)
goto failed;
@@ -1525,10 +1492,10 @@ proceed:
if (enabled.control && avrcp_init(conn, config) < 0)
goto failed;
- if (!dbus_connection_register_interface(conn, AUDIO_MANAGER_PATH,
- AUDIO_MANAGER_INTERFACE,
- manager_methods,
- manager_signals, NULL)) {
+ if (!g_dbus_register_interface(conn, AUDIO_MANAGER_PATH,
+ AUDIO_MANAGER_INTERFACE,
+ manager_methods, manager_signals,
+ NULL, NULL, manager_unregister)) {
error("Failed to register %s interface to %s",
AUDIO_MANAGER_INTERFACE, AUDIO_MANAGER_PATH);
goto failed;