From: Szymon Janc Date: Tue, 6 Mar 2018 13:28:07 +0000 (+0100) Subject: Fix storage for adapters without public address X-Git-Tag: accepted/tizen/unified/20190522.085452~1^2~150 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=ac6dd382c936e54a7bd268867597c464387c327b;p=platform%2Fupstream%2Fbluez.git Fix storage for adapters without public address 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 --- diff --git a/src/adapter.c b/src/adapter.c index 57666b2..49cbfc3 100644 --- a/src/adapter.c +++ b/src/adapter.c @@ -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); diff --git a/src/adapter.h b/src/adapter.h index 9e13e64..53fedf1 100644 --- a/src/adapter.h +++ b/src/adapter.h @@ -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); diff --git a/src/device.c b/src/device.c index ba61358..745362e 100644 --- a/src/device.c +++ b/src/device.c @@ -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