@@ -972,6 +972,9 @@ static gboolean get_endpoint(const GDBusPropertyTable *property,
return TRUE;
}
+static DBusMessage *select_transport(DBusConnection *conn, DBusMessage *msg,
+ void *data);
+
static const GDBusMethodTable transport_methods[] = {
{ GDBUS_ASYNC_METHOD("Acquire",
NULL,
@@ -984,6 +987,8 @@ static const GDBusMethodTable transport_methods[] = {
{ "mtu_w", "q" }),
try_acquire) },
{ GDBUS_ASYNC_METHOD("Release", NULL, NULL, release) },
+ { GDBUS_ASYNC_METHOD("Select",
+ NULL, NULL, select_transport) },
{ },
};
@@ -1302,6 +1307,25 @@ static void transport_update_playing(struct media_transport *transport,
transport_set_state(transport, TRANSPORT_STATE_PENDING);
}
+static DBusMessage *select_transport(DBusConnection *conn, DBusMessage *msg,
+ void *data)
+{
+ struct media_transport *transport = data;
+
+ if (transport->owner != NULL)
+ return btd_error_not_authorized(msg);
+
+ if (transport->state >= TRANSPORT_STATE_REQUESTING)
+ return btd_error_not_authorized(msg);
+
+ if (!strcmp(media_endpoint_get_uuid(transport->endpoint),
+ BAA_SERVICE_UUID)) {
+ transport_update_playing(transport, TRUE);
+ }
+
+ return NULL;
+}
+
static void sink_state_changed(struct btd_service *service,
sink_state_t old_state,
sink_state_t new_state,