advertising: Fix peripheral adverts when Discoverable = false
authorSimon Mikuda <simon.mikuda@streamunlimited.com>
Fri, 28 Jul 2023 10:56:04 +0000 (12:56 +0200)
committerAyush Garg <ayush.garg@samsung.com>
Fri, 5 Jan 2024 13:34:03 +0000 (19:04 +0530)
There is a problem with this configuration: Type = peripheral,
Discoverable = false and Adapter is discoverable

In this state device will start advertise discoverable advertisements
even when user wanted non-discoverable advertisements.

This change will add empty Flags when "Discoverable" parameter is set.

src/advertising.c

index 496aa0e..b7508e0 100644 (file)
@@ -722,11 +722,6 @@ fail:
 
 static bool set_flags(struct btd_adv_client *client, uint8_t flags)
 {
-       if (!flags) {
-               bt_ad_clear_flags(client->data);
-               return true;
-       }
-
        /* Set BR/EDR Not Supported for LE only */
        if (!btd_adapter_get_bredr(client->manager->adapter))
                flags |= BT_AD_FLAG_NO_BREDR;
@@ -1442,7 +1437,8 @@ static DBusMessage *parse_advertisement(struct btd_adv_client *client)
                }
        }
 
-       if (bt_ad_has_flags(client->data)) {
+       if (bt_ad_get_flags(client->data) &
+                       (BT_AD_FLAG_GENERAL | BT_AD_FLAG_LIMITED)) {
                /* BLUETOOTH SPECIFICATION Version 5.0 | Vol 3, Part C
                 * page 2042:
                 * A device in the broadcast mode shall not set the