[pulseaudio-discuss] [PATCH] bluetooth: Add support for transport created by external profile
Luiz Augusto von Dentz
luiz.dentz at gmail.com
Wed Nov 7 07:56:12 PST 2012
From: Luiz Augusto von Dentz <luiz.von.dentz at intel.com>
With BlueZ 5 it is possible to have profile registered by a third party
process which does not share the same bus id as bluetoothd so it is
necessary to store the sender of the transport to be able to talk to it.
Note that this is backward compatible.
---
src/modules/bluetooth/bluetooth-util.c | 14 +++++++++-----
src/modules/bluetooth/bluetooth-util.h | 1 +
2 files changed, 10 insertions(+), 5 deletions(-)
diff --git a/src/modules/bluetooth/bluetooth-util.c b/src/modules/bluetooth/bluetooth-util.c
index 272b6ce..7404db2 100644
--- a/src/modules/bluetooth/bluetooth-util.c
+++ b/src/modules/bluetooth/bluetooth-util.c
@@ -150,6 +150,7 @@ static void transport_free(pa_bluetooth_transport *t) {
for (i = 0; i < PA_BLUETOOTH_TRANSPORT_HOOK_MAX; i++)
pa_hook_done(&t->hooks[i]);
+ pa_xfree(t->sender);
pa_xfree(t->path);
pa_xfree(t->config);
pa_xfree(t);
@@ -1012,7 +1013,7 @@ int pa_bluetooth_transport_acquire(pa_bluetooth_transport *t, const char *access
dbus_error_init(&err);
- pa_assert_se(m = dbus_message_new_method_call("org.bluez", t->path, "org.bluez.MediaTransport", "Acquire"));
+ pa_assert_se(m = dbus_message_new_method_call(t->sender, t->path, "org.bluez.MediaTransport", "Acquire"));
pa_assert_se(dbus_message_append_args(m, DBUS_TYPE_STRING, &accesstype, DBUS_TYPE_INVALID));
r = dbus_connection_send_with_reply_and_block(pa_dbus_connection_get(t->y->connection), m, -1, &err);
@@ -1048,7 +1049,7 @@ void pa_bluetooth_transport_release(pa_bluetooth_transport *t, const char *acces
dbus_error_init(&err);
- pa_assert_se(m = dbus_message_new_method_call("org.bluez", t->path, "org.bluez.MediaTransport", "Release"));
+ pa_assert_se(m = dbus_message_new_method_call(t->sender, t->path, "org.bluez.MediaTransport", "Release"));
pa_assert_se(dbus_message_append_args(m, DBUS_TYPE_STRING, &accesstype, DBUS_TYPE_INVALID));
dbus_connection_send_with_reply_and_block(pa_dbus_connection_get(t->y->connection), m, -1, &err);
@@ -1075,12 +1076,13 @@ static int setup_dbus(pa_bluetooth_discovery *y) {
return 0;
}
-static pa_bluetooth_transport *transport_new(pa_bluetooth_discovery *y, const char *path, enum profile p, const uint8_t *config, int size) {
+static pa_bluetooth_transport *transport_new(pa_bluetooth_discovery *y, const char *sender, const char *path, enum profile p, const uint8_t *config, int size) {
pa_bluetooth_transport *t;
unsigned i;
t = pa_xnew0(pa_bluetooth_transport, 1);
t->y = y;
+ t->sender = pa_xstrdup(sender);
t->path = pa_xstrdup(path);
t->profile = p;
t->config_size = size;
@@ -1100,7 +1102,7 @@ static DBusMessage *endpoint_set_configuration(DBusConnection *conn, DBusMessage
pa_bluetooth_discovery *y = userdata;
pa_bluetooth_device *d;
pa_bluetooth_transport *t;
- const char *path, *dev_path = NULL, *uuid = NULL;
+ const char *sender, *path, *dev_path = NULL, *uuid = NULL;
uint8_t *config = NULL;
int size = 0;
pa_bool_t nrec = FALSE;
@@ -1169,7 +1171,9 @@ static DBusMessage *endpoint_set_configuration(DBusConnection *conn, DBusMessage
else
p = PROFILE_A2DP_SOURCE;
- t = transport_new(y, path, p, config, size);
+ sender = dbus_message_get_sender(m);
+
+ t = transport_new(y, sender, path, p, config, size);
if (nrec)
t->nrec = nrec;
pa_hashmap_put(d->transports, t->path, t);
diff --git a/src/modules/bluetooth/bluetooth-util.h b/src/modules/bluetooth/bluetooth-util.h
index 8a3f2ad..1773bef 100644
--- a/src/modules/bluetooth/bluetooth-util.h
+++ b/src/modules/bluetooth/bluetooth-util.h
@@ -72,6 +72,7 @@ typedef enum pa_bluetooth_transport_hook {
struct pa_bluetooth_transport {
pa_bluetooth_discovery *y;
+ char *sender;
char *path;
enum profile profile;
uint8_t codec;
--
1.7.11.7
More information about the pulseaudio-discuss
mailing list