Loading system/btif/src/btif_storage.c +92 −34 Original line number Diff line number Diff line Loading @@ -427,6 +427,44 @@ static int cfg2prop(bt_bdaddr_t *remote_bd_addr, bt_property_t *prop) return ret; } /******************************************************************************* ** ** Function btif_in_fetch_bonded_devices ** ** Description Internal helper function to fetch the bonded devices ** from NVRAM ** ** Returns BT_STATUS_SUCCESS if successful, BT_STATUS_FAIL otherwise ** *******************************************************************************/ static bt_status_t btif_in_fetch_bonded_device(char *bdstr) { BOOLEAN bt_linkkey_file_found=FALSE; int device_type; int type = BTIF_CFG_TYPE_BIN; LINK_KEY link_key; int size = sizeof(link_key); if(btif_config_get("Remote", bdstr, "LinkKey", (char*)link_key, &size, &type)) { int linkkey_type; if(btif_config_get_int("Remote", bdstr, "LinkKeyType", &linkkey_type)) { bt_linkkey_file_found = TRUE; } else { bt_linkkey_file_found = FALSE; } } if((btif_in_fetch_bonded_ble_device(bdstr, FALSE, NULL) != BT_STATUS_SUCCESS) && (!bt_linkkey_file_found)) { BTIF_TRACE_DEBUG1("Remote device:%s, no link key or ble key found", bdstr); return BT_STATUS_FAIL; } return BT_STATUS_SUCCESS; } /******************************************************************************* ** Loading Loading @@ -1130,6 +1168,7 @@ bt_status_t btif_in_fetch_bonded_ble_device(char *remote_bd_addr,int add, btif_b bt_bdaddr_t bd_addr; BD_ADDR bta_bd_addr; BOOLEAN is_device_added =FALSE; BOOLEAN key_found = FALSE; tBTA_LE_KEY_VALUE *p; if(!btif_config_get_int("Remote", remote_bd_addr,"DevType", &device_type)) Loading Loading @@ -1171,6 +1210,7 @@ bt_status_t btif_in_fetch_bonded_ble_device(char *remote_bd_addr,int add, btif_b BTIF_TRACE_DEBUG1("p->penc_key.key_size=0x%02x",p->penc_key.key_size); BTA_DmAddBleKey (bta_bd_addr, (tBTA_LE_KEY_VALUE *)buf, BTIF_DM_LE_KEY_PENC); } key_found = TRUE; } memset(buf, 0, sizeof(buf)); Loading @@ -1194,6 +1234,7 @@ bt_status_t btif_in_fetch_bonded_ble_device(char *remote_bd_addr,int add, btif_b BTA_DmAddBleKey (bta_bd_addr, (tBTA_LE_KEY_VALUE *)buf, BTIF_DM_LE_KEY_PID); } key_found = TRUE; } memset(buf, 0, sizeof(buf)); Loading @@ -1220,6 +1261,7 @@ bt_status_t btif_in_fetch_bonded_ble_device(char *remote_bd_addr,int add, btif_b BTA_DmAddBleKey (bta_bd_addr, (tBTA_LE_KEY_VALUE *)buf, BTIF_DM_LE_KEY_PCSRK); } key_found = TRUE; } memset(buf, 0, sizeof(buf)); Loading @@ -1242,6 +1284,7 @@ bt_status_t btif_in_fetch_bonded_ble_device(char *remote_bd_addr,int add, btif_b BTA_DmAddBleKey (bta_bd_addr, (tBTA_LE_KEY_VALUE *)buf, BTIF_DM_LE_KEY_LENC); } key_found = TRUE; } memset(buf, 0, sizeof(buf)); Loading @@ -1264,6 +1307,7 @@ bt_status_t btif_in_fetch_bonded_ble_device(char *remote_bd_addr,int add, btif_b BTA_DmAddBleKey (bta_bd_addr, (tBTA_LE_KEY_VALUE *)buf, BTIF_DM_LE_KEY_LCSRK); } key_found = TRUE; } /* Fill in the bonded devices */ Loading @@ -1273,7 +1317,10 @@ bt_status_t btif_in_fetch_bonded_ble_device(char *remote_bd_addr,int add, btif_b btif_gatts_add_bonded_dev_from_nv(bta_bd_addr); } if(key_found) return BT_STATUS_SUCCESS; else return BT_STATUS_FAIL; } return BT_STATUS_FAIL; } Loading Loading @@ -1375,6 +1422,8 @@ bt_status_t btif_storage_load_bonded_hid_info(void) kpos = btif_config_next_key(kpos, "Remote", kname, &kname_size); BTIF_TRACE_DEBUG2("Remote device:%s, size:%d", kname, kname_size); int value; if(btif_in_fetch_bonded_device(kname) == BT_STATUS_SUCCESS) { if(btif_config_get_int("Remote", kname, "HidAttrMask", &value)) { attr_mask = (uint16_t)value; Loading Loading @@ -1422,6 +1471,15 @@ bt_status_t btif_storage_load_bonded_hid_info(void) app_id, dscp_info); } } } else { if(btif_config_get_int("Remote", kname, "HidAttrMask", &value)) { btif_storage_remove_hid_info(&bd_addr); str2bd(kname, &bd_addr); } } } while(kpos != -1); return BT_STATUS_SUCCESS; Loading Loading
system/btif/src/btif_storage.c +92 −34 Original line number Diff line number Diff line Loading @@ -427,6 +427,44 @@ static int cfg2prop(bt_bdaddr_t *remote_bd_addr, bt_property_t *prop) return ret; } /******************************************************************************* ** ** Function btif_in_fetch_bonded_devices ** ** Description Internal helper function to fetch the bonded devices ** from NVRAM ** ** Returns BT_STATUS_SUCCESS if successful, BT_STATUS_FAIL otherwise ** *******************************************************************************/ static bt_status_t btif_in_fetch_bonded_device(char *bdstr) { BOOLEAN bt_linkkey_file_found=FALSE; int device_type; int type = BTIF_CFG_TYPE_BIN; LINK_KEY link_key; int size = sizeof(link_key); if(btif_config_get("Remote", bdstr, "LinkKey", (char*)link_key, &size, &type)) { int linkkey_type; if(btif_config_get_int("Remote", bdstr, "LinkKeyType", &linkkey_type)) { bt_linkkey_file_found = TRUE; } else { bt_linkkey_file_found = FALSE; } } if((btif_in_fetch_bonded_ble_device(bdstr, FALSE, NULL) != BT_STATUS_SUCCESS) && (!bt_linkkey_file_found)) { BTIF_TRACE_DEBUG1("Remote device:%s, no link key or ble key found", bdstr); return BT_STATUS_FAIL; } return BT_STATUS_SUCCESS; } /******************************************************************************* ** Loading Loading @@ -1130,6 +1168,7 @@ bt_status_t btif_in_fetch_bonded_ble_device(char *remote_bd_addr,int add, btif_b bt_bdaddr_t bd_addr; BD_ADDR bta_bd_addr; BOOLEAN is_device_added =FALSE; BOOLEAN key_found = FALSE; tBTA_LE_KEY_VALUE *p; if(!btif_config_get_int("Remote", remote_bd_addr,"DevType", &device_type)) Loading Loading @@ -1171,6 +1210,7 @@ bt_status_t btif_in_fetch_bonded_ble_device(char *remote_bd_addr,int add, btif_b BTIF_TRACE_DEBUG1("p->penc_key.key_size=0x%02x",p->penc_key.key_size); BTA_DmAddBleKey (bta_bd_addr, (tBTA_LE_KEY_VALUE *)buf, BTIF_DM_LE_KEY_PENC); } key_found = TRUE; } memset(buf, 0, sizeof(buf)); Loading @@ -1194,6 +1234,7 @@ bt_status_t btif_in_fetch_bonded_ble_device(char *remote_bd_addr,int add, btif_b BTA_DmAddBleKey (bta_bd_addr, (tBTA_LE_KEY_VALUE *)buf, BTIF_DM_LE_KEY_PID); } key_found = TRUE; } memset(buf, 0, sizeof(buf)); Loading @@ -1220,6 +1261,7 @@ bt_status_t btif_in_fetch_bonded_ble_device(char *remote_bd_addr,int add, btif_b BTA_DmAddBleKey (bta_bd_addr, (tBTA_LE_KEY_VALUE *)buf, BTIF_DM_LE_KEY_PCSRK); } key_found = TRUE; } memset(buf, 0, sizeof(buf)); Loading @@ -1242,6 +1284,7 @@ bt_status_t btif_in_fetch_bonded_ble_device(char *remote_bd_addr,int add, btif_b BTA_DmAddBleKey (bta_bd_addr, (tBTA_LE_KEY_VALUE *)buf, BTIF_DM_LE_KEY_LENC); } key_found = TRUE; } memset(buf, 0, sizeof(buf)); Loading @@ -1264,6 +1307,7 @@ bt_status_t btif_in_fetch_bonded_ble_device(char *remote_bd_addr,int add, btif_b BTA_DmAddBleKey (bta_bd_addr, (tBTA_LE_KEY_VALUE *)buf, BTIF_DM_LE_KEY_LCSRK); } key_found = TRUE; } /* Fill in the bonded devices */ Loading @@ -1273,7 +1317,10 @@ bt_status_t btif_in_fetch_bonded_ble_device(char *remote_bd_addr,int add, btif_b btif_gatts_add_bonded_dev_from_nv(bta_bd_addr); } if(key_found) return BT_STATUS_SUCCESS; else return BT_STATUS_FAIL; } return BT_STATUS_FAIL; } Loading Loading @@ -1375,6 +1422,8 @@ bt_status_t btif_storage_load_bonded_hid_info(void) kpos = btif_config_next_key(kpos, "Remote", kname, &kname_size); BTIF_TRACE_DEBUG2("Remote device:%s, size:%d", kname, kname_size); int value; if(btif_in_fetch_bonded_device(kname) == BT_STATUS_SUCCESS) { if(btif_config_get_int("Remote", kname, "HidAttrMask", &value)) { attr_mask = (uint16_t)value; Loading Loading @@ -1422,6 +1471,15 @@ bt_status_t btif_storage_load_bonded_hid_info(void) app_id, dscp_info); } } } else { if(btif_config_get_int("Remote", kname, "HidAttrMask", &value)) { btif_storage_remove_hid_info(&bd_addr); str2bd(kname, &bd_addr); } } } while(kpos != -1); return BT_STATUS_SUCCESS; Loading