diff options
author | Luiz Augusto von Dentz <luiz.von.dentz@intel.com> | 2022-08-30 14:49:20 -0700 |
---|---|---|
committer | Luiz Augusto von Dentz <luiz.von.dentz@intel.com> | 2022-08-30 17:03:34 -0700 |
commit | a84aa0e6e5e7cd94804386eaf09d430d1cf8e692 (patch) | |
tree | 196c9c5919861260f0843c64a7bb622f8783a49d /profiles | |
parent | f8c3a38e4fe943eaed677a295663426cb7241e0e (diff) | |
download | bluez-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.c | 15 |
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); } |