Re: [PATCH BlueZ 1/1] client/player: Allow the user to control BIG encryption

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Vlad,

On Mon, Oct 2, 2023 at 5:37 AM Vlad Pruteanu <vlad.pruteanu@xxxxxxx> wrote:
>
> This commit adds support for controling the use of encryption and
> setting the broadcast code. This is done as part of the endpoint.config
> command. For source endpoints the encryption flag and broadcast code can
> be set, while the sink supports only broadcast code setting. If no custom
> broadcast code is provided, the default one will be used.
> ---
>  client/player.c | 50 ++++++++++++++++++++++++++++++++++++++++++-------
>  1 file changed, 43 insertions(+), 7 deletions(-)
>
> diff --git a/client/player.c b/client/player.c
> index d1809f24f..3a9313bfd 100644
> --- a/client/player.c
> +++ b/client/player.c
> @@ -2792,10 +2792,10 @@ static void cmd_config_endpoint(int argc, char *argv[])
>         const struct capabilities *cap;
>         char *uuid;
>         uint8_t codec_id;
> -       bool broadcast = false;
> +       bool local_ep_not_provided = false;
> +       uint8_t bcode_arg_position = 0;
>
>         cfg = new0(struct endpoint_config, 1);
> -
>         /* Search for the remote endpoint name on DBUS */
>         cfg->proxy = g_dbus_proxy_lookup(endpoints, NULL, argv[1],
>                                                 BLUEZ_MEDIA_ENDPOINT_INTERFACE);
> @@ -2815,7 +2815,7 @@ static void cmd_config_endpoint(int argc, char *argv[])
>                 codec_id = strtol(argv[3], NULL, 0);
>                 cap = find_capabilities(uuid, codec_id);
>                 if (cap) {
> -                       broadcast = true;
> +                       local_ep_not_provided = true;
>                         cfg->ep = endpoint_new(cap);
>                         cfg->ep->preset = find_presets_name(uuid, argv[3]);
>                         if (!cfg->ep->preset)
> @@ -2827,9 +2827,10 @@ static void cmd_config_endpoint(int argc, char *argv[])
>                 }
>         }
>
> -       if (((broadcast == false) && (argc > 3)) ||
> -               ((broadcast == true) && (argc > 4))) {
> -               char *preset_name = (broadcast == false)?argv[3]:argv[4];
> +       if (((local_ep_not_provided == false) && (argc > 3)) ||
> +               ((local_ep_not_provided == true) && (argc > 4))) {
> +               uint8_t offset = (local_ep_not_provided == false)?0:1;
> +               char *preset_name = argv[3 + offset];
>
>                 preset = preset_find_name(cfg->ep->preset, preset_name);
>                 if (!preset) {
> @@ -2837,7 +2838,42 @@ static void cmd_config_endpoint(int argc, char *argv[])
>                         goto fail;
>                 }
>
> +               /* If the endpoint is configured to be a source allow
> +                *the user to decide if encryption is enabled or not.
> +                */
> +               if (!strcmp(cfg->ep->uuid, BCAA_SERVICE_UUID) &&
> +                       argc > 4 + offset) {
> +                       uint8_t value = strtol(argv[4 + offset],
> +                                                       NULL, 0);
> +
> +                       if (value < 2)
> +                               bcast_qos.bcast.encryption = value;
> +                       else
> +                               goto fail;
> +               }
> +
> +               /* If the endpoint is configured to be a source or a
> +                *sink allow the user to set a custom broadcast code.
> +                *If no broadcast code is set, the default will be used.
> +                */
> +               if (!strcmp(cfg->ep->uuid, BCAA_SERVICE_UUID) &&
> +                       (argc > 5 + offset))
> +                       bcode_arg_position = 5 + offset;
> +
> +               /*The broadcast code is found at a smaller index due to the sink
> +                *config not using the encryption flag parameter.
> +                */
> +               if (!strcmp(cfg->ep->uuid, BAA_SERVICE_UUID) &&
> +                       argc > 4 + offset)
> +                       bcode_arg_position = 4  + offset;
> +
> +               if (bcode_arg_position != 0)
> +                       for (uint8_t i = 0; i < 16; i++)
> +                               bcast_qos.bcast.bcode[i] =
> +                               strtol(argv[bcode_arg_position + i], NULL, 16);
> +
>                 if (cfg->ep->broadcast) {
> +
>                         iov_append(&cfg->ep->bcode, bcast_qos.bcast.bcode,
>                                 sizeof(bcast_qos.bcast.bcode));
>                         /* Copy capabilities for broadcast*/
> @@ -3253,7 +3289,7 @@ static const struct bt_shell_menu endpoint_menu = {
>                                                 "Register Endpoint",
>                                                 local_endpoint_generator },
>         { "config",
> -               "<endpoint> [local endpoint/UUID] [preset/codec id] [preset]",
> +               "<endpoint> [local endpoint/UUID] [preset/codec id] [preset] [encryption] [broadcast code=xx xx ...]",

I think I'd prefer to have it prompted (see bt_shell_prompt_input) to
the user when we detect it is configuring a broadcast transport,
rather than have it passed upfront which might confuse the user of
unicast where the encryption is done at a different layer.

>                                                 cmd_config_endpoint,
>                                                 "Configure Endpoint",
>                                                 endpoint_generator },
> --
> 2.34.1
>


-- 
Luiz Augusto von Dentz




[Index of Archives]     [Bluez Devel]     [Linux Wireless Networking]     [Linux Wireless Personal Area Networking]     [Linux ATH6KL]     [Linux USB Devel]     [Linux Media Drivers]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux