summaryrefslogtreecommitdiff
path: root/client
diff options
context:
space:
mode:
authorLuiz Augusto von Dentz <luiz.von.dentz@intel.com>2023-02-27 17:07:43 -0800
committerLuiz Augusto von Dentz <luiz.von.dentz@intel.com>2023-03-02 12:19:39 -0800
commit24aeb319610b96f938ff7772e15bf0409813eaa4 (patch)
treec80e9afa30f7ee9278fa56ce04429dded3221b72 /client
parent1923f5dd9068308e880eab5609becc601b41d286 (diff)
downloadbluez-24aeb319610b96f938ff7772e15bf0409813eaa4.tar.gz
client: Allow transport.send command to work with multiple transports
This enables transport.send to work with multiple transports instead of sending one by one which can create synchronization problems.
Diffstat (limited to 'client')
-rw-r--r--client/player.c73
1 files changed, 40 insertions, 33 deletions
diff --git a/client/player.c b/client/player.c
index 65cac3b50..767304b56 100644
--- a/client/player.c
+++ b/client/player.c
@@ -3566,48 +3566,54 @@ static void cmd_send_transport(int argc, char *argv[])
{
GDBusProxy *proxy;
struct transport *transport;
- int fd, err;
+ int fd = -1, err;
struct bt_iso_qos qos;
socklen_t len;
+ int i;
- proxy = g_dbus_proxy_lookup(transports, NULL, argv[1],
+ for (i = 1; i < argc; i++) {
+ proxy = g_dbus_proxy_lookup(transports, NULL, argv[i],
BLUEZ_MEDIA_TRANSPORT_INTERFACE);
- if (!proxy) {
- bt_shell_printf("Transport %s not found\n", argv[1]);
- return bt_shell_noninteractive_quit(EXIT_FAILURE);
- }
+ if (!proxy) {
+ bt_shell_printf("Transport %s not found\n", argv[i]);
+ return bt_shell_noninteractive_quit(EXIT_FAILURE);
+ }
- transport = find_transport(proxy);
- if (!transport) {
- bt_shell_printf("Transport %s not acquired\n", argv[1]);
- return bt_shell_noninteractive_quit(EXIT_FAILURE);
- }
+ transport = find_transport(proxy);
+ if (!transport) {
+ bt_shell_printf("Transport %s not acquired\n", argv[i]);
+ return bt_shell_noninteractive_quit(EXIT_FAILURE);
+ }
- if (transport->sk < 0) {
- bt_shell_printf("No Transport Socked found\n");
- return bt_shell_noninteractive_quit(EXIT_FAILURE);
- }
+ if (transport->sk < 0) {
+ bt_shell_printf("No Transport Socked found\n");
+ return bt_shell_noninteractive_quit(EXIT_FAILURE);
+ }
- fd = open_file(argv[2], O_RDONLY);
- if (fd < 0)
- return bt_shell_noninteractive_quit(EXIT_FAILURE);
+ if (i + 1 < argc) {
+ fd = open_file(argv[++i], O_RDONLY);
+ if (fd < 0)
+ return bt_shell_noninteractive_quit(
+ EXIT_FAILURE);
+ }
- bt_shell_printf("Sending ...\n");
+ bt_shell_printf("Sending ...\n");
- /* Read QoS if available */
- memset(&qos, 0, sizeof(qos));
- len = sizeof(qos);
- if (getsockopt(transport->sk, SOL_BLUETOOTH, BT_ISO_QOS, &qos,
+ /* Read QoS if available */
+ memset(&qos, 0, sizeof(qos));
+ len = sizeof(qos);
+ if (getsockopt(transport->sk, SOL_BLUETOOTH, BT_ISO_QOS, &qos,
&len) < 0)
- err = transport_send(transport, fd, NULL);
- else
- err = transport_send(transport, fd, &qos);
-
- if (err < 0) {
- bt_shell_printf("Unable to send: %s (%d)", strerror(-err),
- -err);
- close(fd);
- return bt_shell_noninteractive_quit(EXIT_FAILURE);
+ err = transport_send(transport, fd, NULL);
+ else
+ err = transport_send(transport, fd, &qos);
+
+ if (err < 0) {
+ bt_shell_printf("Unable to send: %s (%d)",
+ strerror(-err), -err);
+ close(fd);
+ return bt_shell_noninteractive_quit(EXIT_FAILURE);
+ }
}
return bt_shell_noninteractive_quit(EXIT_SUCCESS);
@@ -3710,7 +3716,8 @@ static const struct bt_shell_menu transport_menu = {
{ "release", "<transport> [transport1...]", cmd_release_transport,
"Release Transport",
transport_generator },
- { "send", "<transport> <filename>", cmd_send_transport,
+ { "send", "<transport> <filename> [transport1...]",
+ cmd_send_transport,
"Send contents of a file",
transport_generator },
{ "receive", "<transport> [filename]", cmd_receive_transport,