linux-bluetooth.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH BlueZ] client/player: Add support to Max Transports in endpoint.register
@ 2023-05-11 20:28 Luiz Augusto von Dentz
  2023-05-11 20:28 ` [PATCH BlueZ] client/player: Fix not checking for SupportedUUIDs Luiz Augusto von Dentz
                   ` (2 more replies)
  0 siblings, 3 replies; 5+ messages in thread
From: Luiz Augusto von Dentz @ 2023-05-11 20:28 UTC (permalink / raw)
  To: linux-bluetooth

From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>

[bluetooth]# endpoint.register 00002bc9-0000-1000-8000-00805f9b34fb 0x06
[/local/endpoint/ep0] Auto Accept (yes/no): y
[/local/endpoint/ep0] Max Transports (auto/value): 1
[/local/endpoint/ep0] CIG (auto/value): a
[/local/endpoint/ep0] CIS (auto/value): a
---
 client/player.c | 61 +++++++++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 59 insertions(+), 2 deletions(-)

diff --git a/client/player.c b/client/player.c
index 2880c5ffe140..f055ff941569 100644
--- a/client/player.c
+++ b/client/player.c
@@ -73,6 +73,7 @@ struct endpoint {
 	struct iovec *meta;
 	bool auto_accept;
 	bool acquiring;
+	uint8_t max_transports;
 	uint8_t cig;
 	uint8_t cis;
 	char *transport;
@@ -1056,6 +1057,16 @@ static DBusMessage *endpoint_set_configuration(DBusConnection *conn,
 	print_iter("\t", "Properties", &props);
 
 	free(ep->transport);
+
+	if (!ep->max_transports) {
+		bt_shell_printf("Maximum transports reached: rejecting\n");
+		return g_dbus_create_error(msg,
+					 "org.bluez.Error.Rejected",
+					 "Maximum transports reached");
+	}
+
+	ep->max_transports--;
+
 	ep->transport = strdup(path);
 
 	if (ep->auto_accept) {
@@ -1672,6 +1683,13 @@ static DBusMessage *endpoint_select_configuration(DBusConnection *conn,
 	bt_shell_printf("Endpoint: SelectConfiguration\n");
 	print_iter("\t", "Capabilities", &args);
 
+	if (!ep->max_transports) {
+		bt_shell_printf("Maximum transports reached: rejecting\n");
+		return g_dbus_create_error(msg,
+					 "org.bluez.Error.Rejected",
+					 "Maximum transports reached");
+	}
+
 	if (!ep->auto_accept) {
 		ep->msg = dbus_message_ref(msg);
 		bt_shell_prompt_input("Endpoint", "Enter preset/configuration:",
@@ -1688,8 +1706,11 @@ static DBusMessage *endpoint_select_configuration(DBusConnection *conn,
 
 	reply = endpoint_select_config_reply(msg, p->data.iov_base,
 						p->data.iov_len);
-	if (!reply)
-		return NULL;
+	if (!reply) {
+		reply = g_dbus_create_error(msg, "org.bluez.Error.Rejected",
+								NULL);
+		return reply;
+	}
 
 	bt_shell_printf("Auto Accepting using %s...\n", p->name);
 
@@ -1878,6 +1899,13 @@ static DBusMessage *endpoint_select_properties(DBusConnection *conn,
 	bt_shell_printf("Endpoint: SelectProperties\n");
 	print_iter("\t", "Properties", &args);
 
+	if (!ep->max_transports) {
+		bt_shell_printf("Maximum transports reached: rejecting\n");
+		return g_dbus_create_error(msg,
+					 "org.bluez.Error.Rejected",
+					 "Maximum transports reached");
+	}
+
 	if (!ep->auto_accept) {
 		ep->msg = dbus_message_ref(msg);
 		bt_shell_prompt_input("Endpoint", "Enter preset/configuration:",
@@ -1903,6 +1931,9 @@ static DBusMessage *endpoint_clear_configuration(DBusConnection *conn,
 {
 	struct endpoint *ep = user_data;
 
+	if (ep->max_transports != UINT8_MAX)
+		ep->max_transports++;
+
 	free(ep->transport);
 	ep->transport = NULL;
 
@@ -2234,12 +2265,37 @@ static void endpoint_cig(const char *input, void *user_data)
 	bt_shell_prompt_input(ep->path, "CIS (auto/value):", endpoint_cis, ep);
 }
 
+static void endpoint_max_transports(const char *input, void *user_data)
+{
+	struct endpoint *ep = user_data;
+	char *endptr = NULL;
+	int value;
+
+	if (!strcasecmp(input, "a") || !strcasecmp(input, "auto")) {
+		ep->max_transports = UINT8_MAX;
+	} else {
+		value = strtol(input, &endptr, 0);
+
+		if (!endptr || *endptr != '\0' || value > UINT8_MAX) {
+			bt_shell_printf("Invalid argument: %s\n", input);
+			return bt_shell_noninteractive_quit(EXIT_FAILURE);
+		}
+
+		ep->max_transports = value;
+	}
+
+	bt_shell_prompt_input(ep->path, "CIG (auto/value):", endpoint_cig, ep);
+}
+
 static void endpoint_auto_accept(const char *input, void *user_data)
 {
 	struct endpoint *ep = user_data;
 
 	if (!strcasecmp(input, "y") || !strcasecmp(input, "yes")) {
 		ep->auto_accept = true;
+		bt_shell_prompt_input(ep->path, "Max Transports (auto/value):",
+						endpoint_max_transports, ep);
+		return;
 	} else if (!strcasecmp(input, "n") || !strcasecmp(input, "no")) {
 		ep->auto_accept = false;
 	} else {
@@ -2977,6 +3033,7 @@ static void register_endpoints(GDBusProxy *proxy)
 				continue;
 
 			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;
-- 
2.40.0


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH BlueZ] client/player: Fix not checking for SupportedUUIDs
  2023-05-11 20:28 [PATCH BlueZ] client/player: Add support to Max Transports in endpoint.register Luiz Augusto von Dentz
@ 2023-05-11 20:28 ` Luiz Augusto von Dentz
  2023-05-11 20:36   ` [BlueZ] " bluez.test.bot
  2023-05-11 21:37 ` [BlueZ] client/player: Add support to Max Transports in endpoint.register bluez.test.bot
  2023-05-12 20:40 ` [PATCH BlueZ] " patchwork-bot+bluetooth
  2 siblings, 1 reply; 5+ messages in thread
From: Luiz Augusto von Dentz @ 2023-05-11 20:28 UTC (permalink / raw)
  To: linux-bluetooth

From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>

When registering an endpoint it should always check for SupportedUUIDs.
---
 client/player.c | 66 +++++++++++++++++++++++++++++++------------------
 1 file changed, 42 insertions(+), 24 deletions(-)

diff --git a/client/player.c b/client/player.c
index 091d7005f42a..46eab32a40a0 100644
--- a/client/player.c
+++ b/client/player.c
@@ -2190,9 +2190,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,
@@ -2203,6 +2226,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,
@@ -2211,8 +2237,13 @@ static void endpoint_register(struct endpoint *ep)
 						BLUEZ_MEDIA_ENDPOINT_INTERFACE);
 			goto fail;
 		}
+
+		registered++;
 	}
 
+	if (!registered)
+		goto fail;
+
 	return;
 
 fail:
@@ -3015,33 +3046,20 @@ static struct endpoint *endpoint_new(const struct capabilities *cap)
 static void register_endpoints(GDBusProxy *proxy)
 {
 	struct endpoint *ep;
-	DBusMessageIter iter, array;
+	size_t i;
 
-	if (!g_dbus_proxy_get_property(proxy, "SupportedUUIDs", &iter))
-		return;
+	for (i = 0; i < ARRAY_SIZE(caps); i++) {
+		const struct capabilities *cap = &caps[i];
 
-	dbus_message_iter_recurse(&iter, &array);
-	while (dbus_message_iter_get_arg_type(&array) == DBUS_TYPE_STRING) {
-		const char *uuid;
-		size_t i;
+		if (!media_supports_uuid(proxy, cap->uuid))
+			continue;
 
-		dbus_message_iter_get_basic(&array, &uuid);
-
-		for (i = 0; i < ARRAY_SIZE(caps); i++) {
-			const struct capabilities *cap = &caps[i];
-
-			if (strcasecmp(cap->uuid, uuid))
-				continue;
-
-			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);
-		}
-
-		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);
 	}
 }
 
-- 
2.40.0


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* RE: [BlueZ] client/player: Fix not checking for SupportedUUIDs
  2023-05-11 20:28 ` [PATCH BlueZ] client/player: Fix not checking for SupportedUUIDs Luiz Augusto von Dentz
@ 2023-05-11 20:36   ` bluez.test.bot
  0 siblings, 0 replies; 5+ messages in thread
From: bluez.test.bot @ 2023-05-11 20:36 UTC (permalink / raw)
  To: linux-bluetooth, luiz.dentz

[-- Attachment #1: Type: text/plain, Size: 533 bytes --]

This is an automated email and please do not reply to this email.

Dear Submitter,

Thank you for submitting the patches to the linux bluetooth mailing list.
While preparing the CI tests, the patches you submitted couldn't be applied to the current HEAD of the repository.

----- Output -----

error: patch failed: client/player.c:3015
error: client/player.c: patch does not apply
hint: Use 'git am --show-current-patch' to see the failed patch

Please resolve the issue and submit the patches again.


---
Regards,
Linux Bluetooth


^ permalink raw reply	[flat|nested] 5+ messages in thread

* RE: [BlueZ] client/player: Add support to Max Transports in endpoint.register
  2023-05-11 20:28 [PATCH BlueZ] client/player: Add support to Max Transports in endpoint.register Luiz Augusto von Dentz
  2023-05-11 20:28 ` [PATCH BlueZ] client/player: Fix not checking for SupportedUUIDs Luiz Augusto von Dentz
@ 2023-05-11 21:37 ` bluez.test.bot
  2023-05-12 20:40 ` [PATCH BlueZ] " patchwork-bot+bluetooth
  2 siblings, 0 replies; 5+ messages in thread
From: bluez.test.bot @ 2023-05-11 21:37 UTC (permalink / raw)
  To: linux-bluetooth, luiz.dentz

[-- Attachment #1: Type: text/plain, Size: 947 bytes --]

This is automated email and please do not reply to this email!

Dear submitter,

Thank you for submitting the patches to the linux bluetooth mailing list.
This is a CI test results with your patch series:
PW Link:https://patchwork.kernel.org/project/bluetooth/list/?series=746898

---Test result---

Test Summary:
CheckPatch                    PASS      0.57 seconds
GitLint                       PASS      0.35 seconds
BuildEll                      PASS      27.20 seconds
BluezMake                     PASS      886.46 seconds
MakeCheck                     PASS      12.36 seconds
MakeDistcheck                 PASS      156.11 seconds
CheckValgrind                 PASS      253.21 seconds
CheckSmatch                   PASS      341.50 seconds
bluezmakeextell               PASS      103.03 seconds
IncrementalBuild              PASS      738.62 seconds
ScanBuild                     PASS      1058.26 seconds



---
Regards,
Linux Bluetooth


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH BlueZ] client/player: Add support to Max Transports in endpoint.register
  2023-05-11 20:28 [PATCH BlueZ] client/player: Add support to Max Transports in endpoint.register Luiz Augusto von Dentz
  2023-05-11 20:28 ` [PATCH BlueZ] client/player: Fix not checking for SupportedUUIDs Luiz Augusto von Dentz
  2023-05-11 21:37 ` [BlueZ] client/player: Add support to Max Transports in endpoint.register bluez.test.bot
@ 2023-05-12 20:40 ` patchwork-bot+bluetooth
  2 siblings, 0 replies; 5+ messages in thread
From: patchwork-bot+bluetooth @ 2023-05-12 20:40 UTC (permalink / raw)
  To: Luiz Augusto von Dentz; +Cc: linux-bluetooth

Hello:

This patch was applied to bluetooth/bluez.git (master)
by Luiz Augusto von Dentz <luiz.von.dentz@intel.com>:

On Thu, 11 May 2023 13:28:24 -0700 you wrote:
> From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
> 
> [bluetooth]# endpoint.register 00002bc9-0000-1000-8000-00805f9b34fb 0x06
> [/local/endpoint/ep0] Auto Accept (yes/no): y
> [/local/endpoint/ep0] Max Transports (auto/value): 1
> [/local/endpoint/ep0] CIG (auto/value): a
> [/local/endpoint/ep0] CIS (auto/value): a
> 
> [...]

Here is the summary with links:
  - [BlueZ] client/player: Add support to Max Transports in endpoint.register
    https://git.kernel.org/pub/scm/bluetooth/bluez.git/?id=fe16cf2a7ee3

You are awesome, thank you!
-- 
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html



^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2023-05-12 20:40 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-05-11 20:28 [PATCH BlueZ] client/player: Add support to Max Transports in endpoint.register Luiz Augusto von Dentz
2023-05-11 20:28 ` [PATCH BlueZ] client/player: Fix not checking for SupportedUUIDs Luiz Augusto von Dentz
2023-05-11 20:36   ` [BlueZ] " bluez.test.bot
2023-05-11 21:37 ` [BlueZ] client/player: Add support to Max Transports in endpoint.register bluez.test.bot
2023-05-12 20:40 ` [PATCH BlueZ] " patchwork-bot+bluetooth

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).