summaryrefslogtreecommitdiff
path: root/profiles
diff options
context:
space:
mode:
authorLuiz Augusto von Dentz <luiz.von.dentz@intel.com>2022-08-30 14:49:20 -0700
committerLuiz Augusto von Dentz <luiz.von.dentz@intel.com>2022-08-30 17:03:34 -0700
commita84aa0e6e5e7cd94804386eaf09d430d1cf8e692 (patch)
tree196c9c5919861260f0843c64a7bb622f8783a49d /profiles
parentf8c3a38e4fe943eaed677a295663426cb7241e0e (diff)
downloadbluez-a84aa0e6e5e7cd94804386eaf09d430d1cf8e692.tar.gz
media: Fix registering PAC endpoints if ISO socket are not supported
If adapter don't support ISO sockets the PAC UUIDs shall not be allowed to be registered as they depend on ISO sockets to work properly.
Diffstat (limited to 'profiles')
-rw-r--r--profiles/audio/media.c15
1 files changed, 11 insertions, 4 deletions
diff --git a/profiles/audio/media.c b/profiles/audio/media.c
index 85278a6d9..a7fa85d60 100644
--- a/profiles/audio/media.c
+++ b/profiles/audio/media.c
@@ -1254,20 +1254,23 @@ static bool endpoint_properties_get(const char *uuid,
return true;
}
-static bool endpoint_supported(void)
+static bool endpoint_supported(struct btd_adapter *adapter)
{
return true;
}
-static bool experimental_endpoint_supported(void)
+static bool experimental_endpoint_supported(struct btd_adapter *adapter)
{
+ if (!btd_adapter_has_exp_feature(adapter, EXP_FEAT_ISO_SOCKET))
+ return false;
+
return g_dbus_get_flags() & G_DBUS_FLAG_ENABLE_EXPERIMENTAL;
}
static struct media_endpoint_init {
const char *uuid;
bool (*func)(struct media_endpoint *endpoint, int *err);
- bool (*supported)(void);
+ bool (*supported)(struct btd_adapter *adapter);
} init_table[] = {
{ A2DP_SOURCE_UUID, endpoint_init_a2dp_source, endpoint_supported },
{ A2DP_SINK_UUID, endpoint_init_a2dp_sink, endpoint_supported },
@@ -1315,6 +1318,9 @@ media_endpoint_create(struct media_adapter *adapter,
for (i = 0; i < ARRAY_SIZE(init_table); i++) {
init = &init_table[i];
+ if (!init->supported(adapter->btd_adapter))
+ continue;
+
if (!strcasecmp(init->uuid, uuid)) {
succeeded = init->func(endpoint, err);
break;
@@ -2971,6 +2977,7 @@ static const GDBusMethodTable media_methods[] = {
static gboolean supported_uuids(const GDBusPropertyTable *property,
DBusMessageIter *iter, void *data)
{
+ struct media_adapter *adapter = data;
DBusMessageIter entry;
size_t i;
@@ -2980,7 +2987,7 @@ static gboolean supported_uuids(const GDBusPropertyTable *property,
for (i = 0; i < ARRAY_SIZE(init_table); i++) {
struct media_endpoint_init *init = &init_table[i];
- if (init->supported())
+ if (init->supported(adapter->btd_adapter))
dbus_message_iter_append_basic(&entry, DBUS_TYPE_STRING,
&init->uuid);
}