device: Fix storing GATT attributes 64/204964/1
authorSzymon Janc <szymon.janc@codecoup.pl>
Mon, 26 Mar 2018 14:11:53 +0000 (16:11 +0200)
committerAmit Purwar <amit.purwar@samsung.com>
Fri, 26 Apr 2019 10:54:59 +0000 (16:24 +0530)
This fix two issues:
 - not storing attributes after pairing if device is using RPA
 - storing attributes for temporary device if it is using static
   or public address

Change-Id: I06cfed13e4c347a15138494cfae0be65e283ae30
Signed-off-by: Amit Purwar <amit.purwar@samsung.com>
src/device.c

index 2acdd82..268c3d7 100644 (file)
@@ -2990,11 +2990,12 @@ static void device_svc_resolved(struct btd_device *dev, uint8_t browse_type,
                dev->pending_paired = false;
        }
 
-       if (!dev->temporary)
+       if (!dev->temporary) {
                store_device_info(dev);
 
-       if (bdaddr_type != BDADDR_BREDR && err == 0)
-               store_services(dev);
+               if (bdaddr_type != BDADDR_BREDR && err == 0)
+                       store_services(dev);
+       }
 
        if (req)
                browse_request_complete(req, browse_type, bdaddr_type, err);
@@ -7710,6 +7711,12 @@ void btd_device_set_temporary(struct btd_device *device, bool temporary)
                adapter_whitelist_add(device->adapter, device);
 
        store_device_info(device);
+
+       /* attributes were not stored when resolved if device was temporary */
+       if (device->bdaddr_type != BDADDR_BREDR &&
+                       device->le_state.svc_resolved &&
+                       g_slist_length(device->primaries) != 0)
+               store_services(device);
 }
 
 void btd_device_set_trusted(struct btd_device *device, gboolean trusted)