Thread (12 messages) read the whole thread 12 messages, 2 authors, 2020-07-16

Re: [Bluez PATCH v2 1/2] device: add device_remove_bonding function

From: Luiz Augusto von Dentz <luiz.dentz@gmail.com>
Date: 2020-07-07 18:03:04

Hi Archie,

On Sat, Jun 27, 2020 at 8:54 AM Archie Pusaka [off-list ref] wrote:
quoted hunk ↗ jump to hunk
From: Archie Pusaka <redacted>

This patch splits the "bonding removal" function in device.c,
because we need to remove bonding information when receiving
"virtual cable unplug" in HID profile.

Reviewed-by: Alain Michaud <redacted>
---

Changes in v2: None

 src/device.c | 25 +++++++++++++++----------
 src/device.h |  1 +
 2 files changed, 16 insertions(+), 10 deletions(-)
diff --git a/src/device.c b/src/device.c
index 7b0eb256e..9fb0e018c 100644
--- a/src/device.c
+++ b/src/device.c
@@ -4162,6 +4162,17 @@ static void delete_folder_tree(const char *dirname)
        rmdir(dirname);
 }

+void device_remove_bonding(struct btd_device *device, uint8_t bdaddr_type)
+{
+       if (bdaddr_type == BDADDR_BREDR)
+               device->bredr_state.bonded = false;
+       else
+               device->le_state.bonded = false;
+
+       btd_adapter_remove_bonding(device->adapter, &device->bdaddr,
+                                                       bdaddr_type);
+}
+
 static void device_remove_stored(struct btd_device *device)
 {
        char device_addr[18];
@@ -4170,17 +4181,11 @@ static void device_remove_stored(struct btd_device *device)
        char *data;
        gsize length = 0;

-       if (device->bredr_state.bonded) {
-               device->bredr_state.bonded = false;
-               btd_adapter_remove_bonding(device->adapter, &device->bdaddr,
-                                                               BDADDR_BREDR);
-       }
+       if (device->bredr_state.bonded)
+               device_remove_bonding(device, BDADDR_BREDR);

-       if (device->le_state.bonded) {
-               device->le_state.bonded = false;
-               btd_adapter_remove_bonding(device->adapter, &device->bdaddr,
-                                                       device->bdaddr_type);
-       }
+       if (device->le_state.bonded)
+               device_remove_bonding(device, device->bdaddr_type);

        device->bredr_state.paired = false;
        device->le_state.paired = false;
diff --git a/src/device.h b/src/device.h
index 06b100499..907c7c5c4 100644
--- a/src/device.h
+++ b/src/device.h
@@ -49,6 +49,7 @@ uint16_t btd_device_get_vendor(struct btd_device *device);
 uint16_t btd_device_get_vendor_src(struct btd_device *device);
 uint16_t btd_device_get_product(struct btd_device *device);
 uint16_t btd_device_get_version(struct btd_device *device);
+void device_remove_bonding(struct btd_device *device, uint8_t bdaddr_type);
 void device_remove(struct btd_device *device, gboolean remove_stored);
Is there any particular reason why device_remove is not enough here? I
don't see any reason to leave the device object around after removing
its bonding.
 int device_address_cmp(gconstpointer a, gconstpointer b);
 int device_bdaddr_cmp(gconstpointer a, gconstpointer b);
--
2.27.0.212.ge8ba1cc988-goog

-- 
Luiz Augusto von Dentz
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help