Fix storage for adapters without public address 32/204932/1
authorSzymon Janc <szymon.janc@codecoup.pl>
Tue, 6 Mar 2018 13:28:07 +0000 (14:28 +0100)
committerAmit Purwar <amit.purwar@samsung.com>
Fri, 26 Apr 2019 10:43:04 +0000 (16:13 +0530)
Since those have adapter folder prefixed with "static-" this needs
to be taken into account when storing data.

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

index 57666b2..49cbfc3 100644 (file)
@@ -524,7 +524,7 @@ static uint8_t get_mode(const char *mode)
                return MODE_UNKNOWN;
 }
 
-static const char *adapter_dir(struct btd_adapter *adapter)
+const char *btd_adapter_get_storage_dir(struct btd_adapter *adapter)
 {
        static char dir[25];
 
@@ -583,7 +583,7 @@ static void store_adapter_info(struct btd_adapter *adapter)
 #endif
 
        snprintf(filename, PATH_MAX, STORAGEDIR "/%s/settings",
-                                               adapter_dir(adapter));
+                                               btd_adapter_get_storage_dir(adapter));
 
        create_file(filename, S_IRUSR | S_IWUSR);
 
@@ -7818,7 +7818,7 @@ static int load_irk(struct btd_adapter *adapter, uint8_t *irk)
        int ret;
 
        snprintf(filename, PATH_MAX, STORAGEDIR "/%s/identity",
-                                               adapter_dir(adapter));
+                                       btd_adapter_get_storage_dir(adapter));
 
        key_file = g_key_file_new();
        g_key_file_load_from_file(key_file, filename, 0, NULL);
@@ -8301,7 +8301,8 @@ static void load_devices(struct btd_adapter *adapter)
        DIR *dir;
        struct dirent *entry;
 
-       snprintf(dirname, PATH_MAX, STORAGEDIR "/%s", adapter_dir(adapter));
+       snprintf(dirname, PATH_MAX, STORAGEDIR "/%s",
+                                       btd_adapter_get_storage_dir(adapter));
 
        dir = opendir(dirname);
        if (!dir) {
@@ -8346,7 +8347,8 @@ static void load_devices(struct btd_adapter *adapter)
 }
 #endif
                snprintf(filename, PATH_MAX, STORAGEDIR "/%s/%s/info",
-                                       adapter_dir(adapter), entry->d_name);
+                                       btd_adapter_get_storage_dir(adapter),
+                                       entry->d_name);
 
                key_file = g_key_file_new();
                g_key_file_load_from_file(key_file, filename, 0, NULL);
@@ -10133,7 +10135,7 @@ static void load_config(struct btd_adapter *adapter)
        key_file = g_key_file_new();
 
        snprintf(filename, PATH_MAX, STORAGEDIR "/%s/settings",
-                                               adapter_dir(adapter));
+                                       btd_adapter_get_storage_dir(adapter));
 
        if (stat(filename, &st) < 0) {
                convert_config(adapter, filename, key_file);
@@ -12492,7 +12494,7 @@ static void store_link_key(struct btd_adapter *adapter,
        ba2str(device_get_address(device), device_addr);
 
        snprintf(filename, PATH_MAX, STORAGEDIR "/%s/%s/info",
-                                       adapter_dir(adapter), device_addr);
+                       btd_adapter_get_storage_dir(adapter), device_addr);
        key_file = g_key_file_new();
        g_key_file_load_from_file(key_file, filename, 0, NULL);
 
@@ -12591,7 +12593,7 @@ static void store_longtermkey(struct btd_adapter *adapter, const bdaddr_t *peer,
        ba2str(peer, device_addr);
 
        snprintf(filename, PATH_MAX, STORAGEDIR "/%s/%s/info",
-                       adapter_dir(adapter), device_addr);
+                       btd_adapter_get_storage_dir(adapter), device_addr);
        key_file = g_key_file_new();
        g_key_file_load_from_file(key_file, filename, 0, NULL);
 
@@ -12730,7 +12732,7 @@ static void store_csrk(struct btd_adapter *adapter, const bdaddr_t *peer,
        ba2str(peer, device_addr);
 
        snprintf(filename, PATH_MAX, STORAGEDIR "/%s/%s/info",
-                       adapter_dir(adapter), device_addr);
+                       btd_adapter_get_storage_dir(adapter), device_addr);
 
        key_file = g_key_file_new();
        g_key_file_load_from_file(key_file, filename, 0, NULL);
@@ -12810,7 +12812,7 @@ static void store_irk(struct btd_adapter *adapter, const bdaddr_t *peer,
        ba2str(peer, device_addr);
 
        snprintf(filename, PATH_MAX, STORAGEDIR "/%s/%s/info",
-                                       adapter_dir(adapter), device_addr);
+                       btd_adapter_get_storage_dir(adapter), device_addr);
        key_file = g_key_file_new();
        g_key_file_load_from_file(key_file, filename, 0, NULL);
 
@@ -12917,7 +12919,7 @@ static void store_conn_param(struct btd_adapter *adapter, const bdaddr_t *peer,
        DBG("");
 
        snprintf(filename, PATH_MAX, STORAGEDIR "/%s/%s/info",
-                                       adapter_dir(adapter), device_addr);
+                       btd_adapter_get_storage_dir(adapter), device_addr);
        key_file = g_key_file_new();
        g_key_file_load_from_file(key_file, filename, 0, NULL);
 
@@ -13673,7 +13675,7 @@ static void remove_keys(struct btd_adapter *adapter,
 #endif
 
        snprintf(filename, PATH_MAX, STORAGEDIR "/%s/%s/info",
-                                       adapter_dir(adapter), device_addr);
+                       btd_adapter_get_storage_dir(adapter), device_addr);
        key_file = g_key_file_new();
        g_key_file_load_from_file(key_file, filename, 0, NULL);
 
index 9e13e64..53fedf1 100644 (file)
@@ -166,6 +166,7 @@ struct btd_device *btd_adapter_find_device(struct btd_adapter *adapter,
 const char *adapter_get_path(struct btd_adapter *adapter);
 const bdaddr_t *btd_adapter_get_address(struct btd_adapter *adapter);
 uint8_t btd_adapter_get_address_type(struct btd_adapter *adapter);
+const char *btd_adapter_get_storage_dir(struct btd_adapter *adapter);
 #ifdef TIZEN_FEATURE_BLUEZ_MODIFY
 const bdaddr_t *btd_adapter_get_le_address(struct btd_adapter *adapter);
 uint8_t btd_adapter_get_le_address_type(struct btd_adapter * adapter);
index ba61358..745362e 100644 (file)
@@ -520,7 +520,6 @@ static gboolean store_device_info_cb(gpointer user_data)
        struct btd_device *device = user_data;
        GKeyFile *key_file;
        char filename[PATH_MAX];
-       char adapter_addr[18];
        char device_addr[18];
        char *str;
        char class[9];
@@ -532,15 +531,15 @@ static gboolean store_device_info_cb(gpointer user_data)
 
        device->store_id = 0;
 
-       ba2str(btd_adapter_get_address(device->adapter), adapter_addr);
        ba2str(&device->bdaddr, device_addr);
 
 #ifdef TIZEN_FEATURE_BLUEZ_MODIFY
        if (device->rpa)
                ba2str(device->rpa, device_addr);
 #endif
-       snprintf(filename, PATH_MAX, STORAGEDIR "/%s/%s/info", adapter_addr,
-                       device_addr);
+       snprintf(filename, PATH_MAX, STORAGEDIR "/%s/%s/info",
+                               btd_adapter_get_storage_dir(device->adapter),
+                               device_addr);
 
        key_file = g_key_file_new();
        g_key_file_load_from_file(key_file, filename, 0, NULL);
@@ -712,7 +711,7 @@ static void store_device_info(struct btd_device *device)
 void device_store_cached_name(struct btd_device *dev, const char *name)
 {
        char filename[PATH_MAX];
-       char s_addr[18], d_addr[18];
+       char d_addr[18];
        GKeyFile *key_file;
        char *data;
        gsize length = 0;
@@ -723,7 +722,6 @@ void device_store_cached_name(struct btd_device *dev, const char *name)
                return;
        }
 
-       ba2str(btd_adapter_get_address(dev->adapter), s_addr);
        ba2str(&dev->bdaddr, d_addr);
 
 #ifdef TIZEN_FEATURE_BLUEZ_MODIFY
@@ -731,7 +729,8 @@ void device_store_cached_name(struct btd_device *dev, const char *name)
                ba2str(dev->rpa, d_addr);
 #endif
 
-       snprintf(filename, PATH_MAX, STORAGEDIR "/%s/cache/%s", s_addr, d_addr);
+       snprintf(filename, PATH_MAX, STORAGEDIR "/%s/cache/%s",
+                       btd_adapter_get_storage_dir(dev->adapter), d_addr);
        create_file(filename, S_IRUSR | S_IWUSR);
 
        key_file = g_key_file_new();
@@ -2632,9 +2631,8 @@ static DBusMessage *disconnect_ext_profile(DBusConnection *conn,
 
 static void store_services(struct btd_device *device)
 {
-       struct btd_adapter *adapter = device->adapter;
        char filename[PATH_MAX];
-       char src_addr[18], dst_addr[18];
+       char dst_addr[18];
        uuid_t uuid;
        char *prim_uuid;
        GKeyFile *key_file;
@@ -2653,7 +2651,6 @@ static void store_services(struct btd_device *device)
        if (prim_uuid == NULL)
                return;
 
-       ba2str(btd_adapter_get_address(adapter), src_addr);
        ba2str(&device->bdaddr, dst_addr);
 
 #ifdef TIZEN_FEATURE_BLUEZ_MODIFY
@@ -2661,8 +2658,9 @@ static void store_services(struct btd_device *device)
                ba2str(device->rpa, dst_addr);
 #endif
 
-       snprintf(filename, PATH_MAX, STORAGEDIR "/%s/%s/attributes", src_addr,
-                                                               dst_addr);
+       snprintf(filename, PATH_MAX, STORAGEDIR "/%s/%s/attributes",
+                               btd_adapter_get_storage_dir(device->adapter),
+                               dst_addr);
        key_file = g_key_file_new();
 
        for (l = device->primaries; l; l = l->next) {
@@ -2828,9 +2826,8 @@ static void store_service(struct gatt_db_attribute *attr, void *user_data)
 
 static void store_gatt_db(struct btd_device *device)
 {
-       struct btd_adapter *adapter = device->adapter;
        char filename[PATH_MAX];
-       char src_addr[18], dst_addr[18];
+       char dst_addr[18];
        GKeyFile *key_file;
        char *data;
        gsize length = 0;
@@ -2845,11 +2842,11 @@ static void store_gatt_db(struct btd_device *device)
        if (!gatt_cache_is_enabled(device))
                return;
 
-       ba2str(btd_adapter_get_address(adapter), src_addr);
        ba2str(&device->bdaddr, dst_addr);
 
-       snprintf(filename, PATH_MAX, STORAGEDIR "/%s/cache/%s", src_addr,
-                                                               dst_addr);
+       snprintf(filename, PATH_MAX, STORAGEDIR "/%s/cache/%s",
+                               btd_adapter_get_storage_dir(device->adapter),
+                               dst_addr);
        create_file(filename, S_IRUSR | S_IWUSR);
 
        key_file = g_key_file_new();
@@ -5604,8 +5601,7 @@ struct btd_device *device_create_from_storage(struct btd_adapter *adapter,
                                const char *address, GKeyFile *key_file)
 {
        struct btd_device *device;
-       const bdaddr_t *src;
-       char srcaddr[18];
+       const char *src_dir;
 
        DBG("address %s", address);
 
@@ -5613,13 +5609,12 @@ struct btd_device *device_create_from_storage(struct btd_adapter *adapter,
        if (device == NULL)
                return NULL;
 
-       src = btd_adapter_get_address(adapter);
-       ba2str(src, srcaddr);
-
        convert_info(device, key_file);
 
-       load_info(device, srcaddr, address, key_file);
-       load_att_info(device, srcaddr, address);
+       src_dir = btd_adapter_get_storage_dir(adapter);
+
+       load_info(device, src_dir, address, key_file);
+       load_att_info(device, src_dir, address);
 
        return device;
 }
@@ -5628,8 +5623,7 @@ struct btd_device *device_create(struct btd_adapter *adapter,
                                const bdaddr_t *bdaddr, uint8_t bdaddr_type)
 {
        struct btd_device *device;
-       const bdaddr_t *sba;
-       char src[18], dst[18];
+       char dst[18];
        char *str;
 
        ba2str(bdaddr, dst);
@@ -5646,10 +5640,8 @@ struct btd_device *device_create(struct btd_adapter *adapter,
        else
                device->le = true;
 
-       sba = btd_adapter_get_address(adapter);
-       ba2str(sba, src);
-
-       str = load_cached_name(device, src, dst);
+       str = load_cached_name(device, btd_adapter_get_storage_dir(adapter),
+                                                                       dst);
        if (str) {
                strcpy(device->name, str);
                g_free(str);
@@ -5661,7 +5653,7 @@ struct btd_device *device_create(struct btd_adapter *adapter,
 char *btd_device_get_storage_path(struct btd_device *device,
                                const char *filename)
 {
-       char srcaddr[18], dstaddr[18];
+       char dstaddr[18];
 
        if (device_address_is_private(device)) {
                warn("Refusing storage path for private addressed device %s",
@@ -5669,7 +5661,6 @@ char *btd_device_get_storage_path(struct btd_device *device,
                return NULL;
        }
 
-       ba2str(btd_adapter_get_address(device->adapter), srcaddr);
        ba2str(&device->bdaddr, dstaddr);
 
 #ifdef TIZEN_FEATURE_BLUEZ_MODIFY
@@ -5678,10 +5669,13 @@ char *btd_device_get_storage_path(struct btd_device *device,
 #endif
 
        if (!filename)
-               return g_strdup_printf(STORAGEDIR "/%s/%s", srcaddr, dstaddr);
+               return g_strdup_printf(STORAGEDIR "/%s/%s",
+                               btd_adapter_get_storage_dir(device->adapter),
+                               dstaddr);
 
-       return g_strdup_printf(STORAGEDIR "/%s/%s/%s", srcaddr, dstaddr,
-                                                       filename);
+       return g_strdup_printf(STORAGEDIR "/%s/%s/%s",
+                               btd_adapter_get_storage_dir(device->adapter),
+                               dstaddr, filename);
 }
 
 void btd_device_device_set_name(struct btd_device *device, const char *name)
@@ -5911,8 +5905,6 @@ static void delete_folder_tree(const char *dirname)
 
 static void device_remove_stored(struct btd_device *device)
 {
-       const bdaddr_t *src = btd_adapter_get_address(device->adapter);
-       char adapter_addr[18];
        char device_addr[18];
        char filename[PATH_MAX];
        GKeyFile *key_file;
@@ -5937,7 +5929,6 @@ static void device_remove_stored(struct btd_device *device)
        if (device->blocked)
                device_unblock(device, TRUE, FALSE);
 
-       ba2str(src, adapter_addr);
        ba2str(&device->bdaddr, device_addr);
 
 #ifdef TIZEN_FEATURE_BLUEZ_MODIFY
@@ -5945,12 +5936,14 @@ static void device_remove_stored(struct btd_device *device)
                ba2str(device->rpa, device_addr);
 #endif
 
-       snprintf(filename, PATH_MAX, STORAGEDIR "/%s/%s", adapter_addr,
-                       device_addr);
+       snprintf(filename, PATH_MAX, STORAGEDIR "/%s/%s",
+                               btd_adapter_get_storage_dir(device->adapter),
+                               device_addr);
        delete_folder_tree(filename);
 
-       snprintf(filename, PATH_MAX, STORAGEDIR "/%s/cache/%s", adapter_addr,
-                       device_addr);
+       snprintf(filename, PATH_MAX, STORAGEDIR "/%s/cache/%s",
+                               btd_adapter_get_storage_dir(device->adapter),
+                               device_addr);
 
        key_file = g_key_file_new();
        g_key_file_load_from_file(key_file, filename, 0, NULL);
@@ -7140,10 +7133,12 @@ bool device_attach_att(struct btd_device *dev, GIOChannel *io)
        uint16_t mtu;
        uint16_t cid;
        struct btd_gatt_database *database;
-       const bdaddr_t *src, *dst;
-       char srcaddr[18], dstaddr[18];
+       const bdaddr_t *dst;
+       char dstaddr[18];
 #ifdef TIZEN_FEATURE_BLUEZ_MODIFY
        uint8_t dst_type = BDADDR_BREDR;
+       char srcaddr[18];
+       const bdaddr_t *src;
 #endif
 
        bt_io_get(io, &gerr, BT_IO_OPT_SEC_LEVEL, &sec_level,
@@ -7213,14 +7208,12 @@ bool device_attach_att(struct btd_device *dev, GIOChannel *io)
 
        database = btd_adapter_get_database(dev->adapter);
 
-       src = btd_adapter_get_address(dev->adapter);
-       ba2str(src, srcaddr);
-
        dst = device_get_address(dev);
        ba2str(dst, dstaddr);
 
        if (gatt_db_isempty(dev->db))
-               load_gatt_db(dev, srcaddr, dstaddr);
+               load_gatt_db(dev, btd_adapter_get_storage_dir(dev->adapter),
+                                                               dstaddr);
 
        gatt_client_init(dev);
        gatt_server_init(dev, btd_gatt_database_get_db(database));
@@ -7233,6 +7226,9 @@ bool device_attach_att(struct btd_device *dev, GIOChannel *io)
        adapter_connect_list_remove(dev->adapter, dev);
 
 #ifdef TIZEN_FEATURE_BLUEZ_MODIFY
+       src = btd_adapter_get_address(dev->adapter);
+       ba2str(src, srcaddr);
+
        /* load the service changed indication status on connection */
        load_svc_change_indication_status(dev, srcaddr, dstaddr);
 #endif