From 34b17a6269fae12c9aaede9e76b9247ae4a8963d Mon Sep 17 00:00:00 2001 From: Vlad Pruteanu Date: Thu, 30 May 2024 11:04:45 +0300 Subject: [PATCH] bluez5: bap: Enable control of Broadcast Encryption Add "encryption" parameter to bluez5.bcast_source.config entry in the configuration file. This allows the user to control the use of Broadcast encryption. --- doc/dox/config/pipewire-devices.7.md | 1 + spa/plugins/bluez5/bluez5-dbus.c | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/doc/dox/config/pipewire-devices.7.md b/doc/dox/config/pipewire-devices.7.md index b7a68e709..9d3b5464d 100644 --- a/doc/dox/config/pipewire-devices.7.md +++ b/doc/dox/config/pipewire-devices.7.md @@ -430,6 +430,7 @@ Example: bluez5.bcast_source.config = [ { "broadcast_code": [ 1, 2, 104, 5, 83, 241, 65, 90, 162, 101, 187, 175, 198, 234, 3, 184 ], + "encryption: false, "bis": [ { # BIS configuration "qos_preset": "16_2_1", # QOS preset name from table Table 6.4 from BAP_v1.0.1. diff --git a/spa/plugins/bluez5/bluez5-dbus.c b/spa/plugins/bluez5/bluez5-dbus.c index dd15483a7..6770de3bb 100644 --- a/spa/plugins/bluez5/bluez5-dbus.c +++ b/spa/plugins/bluez5/bluez5-dbus.c @@ -176,6 +176,7 @@ struct spa_bt_bis { struct spa_bt_big { struct spa_list link; int broadcast_code[BROADCAST_CODE_LEN]; + bool encryption; int presentation_delay; struct spa_list bis_list; int big_id; @@ -5370,6 +5371,7 @@ static void configure_bis(struct spa_bt_monitor *monitor, append_basic_variant_dict_entry(&qos_dict, "MSE", DBUS_TYPE_BYTE, "y", &mse); append_basic_variant_dict_entry(&qos_dict, "Timeout", DBUS_TYPE_UINT16, "q", &timeout); append_basic_array_variant_dict_entry(&qos_dict, "BCode", "ay", "y", DBUS_TYPE_BYTE, big->broadcast_code, BROADCAST_CODE_LEN); + append_basic_variant_dict_entry(&qos_dict, "Encryption", DBUS_TYPE_BYTE, "y", &big->encryption); append_basic_variant_dict_entry(&qos_dict, "Interval", DBUS_TYPE_UINT32, "u", &qos.interval); append_basic_variant_dict_entry(&qos_dict, "Framing", DBUS_TYPE_BYTE, "y", &qos.framing); append_basic_variant_dict_entry(&qos_dict, "PHY", DBUS_TYPE_BYTE, "y", &qos.phy); @@ -6176,6 +6178,10 @@ static void parse_broadcast_source_config(struct spa_bt_monitor *monitor, const goto parse_failed; spa_log_debug(monitor->log, "big_entry->broadcast_code[%d] %d", cursor, big_entry->broadcast_code[cursor]); } + } else if (spa_streq(key, "encryption")) { + if (spa_json_get_bool(&it[1], &big_entry->encryption) <= 0) + goto parse_failed; + spa_log_debug(monitor->log, "big_entry->encryption %d", big_entry->encryption); } else if (spa_streq(key, "bis")) { if (spa_json_enter_array(&it[1], &it_array[1]) <= 0) goto parse_failed;