summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuiz Augusto von Dentz <luiz.von.dentz@intel.com>2023-05-11 13:23:40 -0700
committerLuiz Augusto von Dentz <luiz.von.dentz@intel.com>2023-05-12 13:31:53 -0700
commit1707c35771b447e39d19ebcc477e46e26d5870b5 (patch)
tree924c672e0c2951c21cdf465bbd39ab5077b4a05e
parentfe16cf2a7ee343e6741bc1ef8f45f4f9dbf5c8a2 (diff)
downloadbluez-1707c35771b447e39d19ebcc477e46e26d5870b5.tar.gz
client/player: Fix not checking for SupportedUUIDs
When registering an endpoint it should always check for SupportedUUIDs.
-rw-r--r--client/player.c66
1 files changed, 42 insertions, 24 deletions
diff --git a/client/player.c b/client/player.c
index d14292874..58e14654f 100644
--- a/client/player.c
+++ b/client/player.c
@@ -2073,9 +2073,32 @@ static void register_endpoint_reply(DBusMessage *message, void *user_data)
return bt_shell_noninteractive_quit(EXIT_SUCCESS);
}
+static bool media_supports_uuid(GDBusProxy *proxy, const char *uuid)
+{
+ DBusMessageIter iter, array;
+
+ if (!g_dbus_proxy_get_property(proxy, "SupportedUUIDs", &iter))
+ return false;
+
+ dbus_message_iter_recurse(&iter, &array);
+ while (dbus_message_iter_get_arg_type(&array) == DBUS_TYPE_STRING) {
+ const char *support_uuid;
+
+ dbus_message_iter_get_basic(&array, &support_uuid);
+
+ if (!strcasecmp(uuid, support_uuid))
+ return true;
+
+ dbus_message_iter_next(&array);
+ }
+
+ return false;
+}
+
static void endpoint_register(struct endpoint *ep)
{
GList *l;
+ int registered = 0;
if (!g_dbus_register_interface(dbus_conn, ep->path,
BLUEZ_MEDIA_ENDPOINT_INTERFACE,
@@ -2086,6 +2109,9 @@ static void endpoint_register(struct endpoint *ep)
}
for (l = medias; l; l = g_list_next(l)) {
+ if (!media_supports_uuid(l->data, ep->uuid))
+ continue;
+
if (!g_dbus_proxy_method_call(l->data, "RegisterEndpoint",
register_endpoint_setup,
register_endpoint_reply,
@@ -2094,8 +2120,13 @@ static void endpoint_register(struct endpoint *ep)
BLUEZ_MEDIA_ENDPOINT_INTERFACE);
goto fail;
}
+
+ registered++;
}
+ if (!registered)
+ goto fail;
+
return;
fail:
@@ -2898,33 +2929,20 @@ static struct endpoint *endpoint_new(const struct capabilities *cap)
static void register_endpoints(GDBusProxy *proxy)
{
struct endpoint *ep;
- DBusMessageIter iter, array;
-
- if (!g_dbus_proxy_get_property(proxy, "SupportedUUIDs", &iter))
- return;
-
- dbus_message_iter_recurse(&iter, &array);
- while (dbus_message_iter_get_arg_type(&array) == DBUS_TYPE_STRING) {
- const char *uuid;
- size_t i;
-
- dbus_message_iter_get_basic(&array, &uuid);
-
- for (i = 0; i < ARRAY_SIZE(caps); i++) {
- const struct capabilities *cap = &caps[i];
+ size_t i;
- if (strcasecmp(cap->uuid, uuid))
- continue;
+ for (i = 0; i < ARRAY_SIZE(caps); i++) {
+ const struct capabilities *cap = &caps[i];
- ep = endpoint_new(cap);
- ep->max_transports = UINT8_MAX;
- ep->auto_accept = true;
- ep->cig = BT_ISO_QOS_CIG_UNSET;
- ep->cis = BT_ISO_QOS_CIS_UNSET;
- endpoint_register(ep);
- }
+ if (!media_supports_uuid(proxy, cap->uuid))
+ continue;
- dbus_message_iter_next(&array);
+ ep = endpoint_new(cap);
+ ep->max_transports = UINT8_MAX;
+ ep->auto_accept = true;
+ ep->cig = BT_ISO_QOS_CIG_UNSET;
+ ep->cis = BT_ISO_QOS_CIS_UNSET;
+ endpoint_register(ep);
}
}