diff options
author | 2025-02-24 13:39:24 -0800 | |
---|---|---|
committer | 2025-02-26 17:10:04 -0800 | |
commit | 34ad98af6dabdd96fa8edfe6fcefeba7b1777a7c (patch) | |
tree | 3c4b5b0e1a5c17930ade3595a606f4c69b8c6ef3 /system | |
parent | ccaf3736f81df0f80a0ff8326636e259a954f4c6 (diff) |
Consolidate native interfaces for checking bond status
BTM offers two sets of bond status interfaces. IsLinkKeyKnown() can be used for either transport but does not consider the temporary pairing. IsDeviceBonded() just checks if the device is bonded over any transport.
Both of these interfaces are now consolidated into a single interface which allows checking transport specific bond status or bond status irrespective of transport.
Test: mmm packages/modules/Bluetooth
Flag: EXEMPT refactor
Bug: 396433944
Change-Id: Icef05f847de04b7fc06e741313da88a48d2efe1c
Diffstat (limited to 'system')
30 files changed, 63 insertions, 75 deletions
diff --git a/system/bta/csis/csis_client.cc b/system/bta/csis/csis_client.cc index 1abf97356e..aaf20ddeca 100644 --- a/system/bta/csis/csis_client.cc +++ b/system/bta/csis/csis_client.cc @@ -271,7 +271,7 @@ public: auto device = FindDeviceByAddress(address); if (device == nullptr) { - if (!BTM_IsLinkKeyKnown(address, BT_TRANSPORT_LE)) { + if (!BTM_IsBonded(address, BT_TRANSPORT_LE)) { log::error("Connecting {} when not bonded", address); callbacks_->OnConnectionState(address, ConnectionState::DISCONNECTED); return; diff --git a/system/bta/csis/csis_client_test.cc b/system/bta/csis/csis_client_test.cc index a9a2480849..85f0fd64ea 100644 --- a/system/bta/csis/csis_client_test.cc +++ b/system/bta/csis/csis_client_test.cc @@ -369,7 +369,7 @@ protected: SetMockCsisLockCallback(&csis_lock_cb); callbacks.reset(new MockCsisCallbacks()); - ON_CALL(btm_interface, IsLinkKeyKnown(_, _)).WillByDefault(DoAll(Return(true))); + ON_CALL(btm_interface, IsDeviceBonded(_, _)).WillByDefault(DoAll(Return(true))); ON_CALL(btm_interface, BTM_IsEncrypted(_, _)).WillByDefault(DoAll(Return(true))); @@ -724,7 +724,7 @@ TEST_F(CsisClientTest, test_connect_after_remove) { CsisClient::Get()->RemoveDevice(test_address); EXPECT_CALL(*callbacks, OnConnectionState(test_address, ConnectionState::DISCONNECTED)); - ON_CALL(btm_interface, IsLinkKeyKnown(_, _)).WillByDefault(Return(false)); + ON_CALL(btm_interface, IsDeviceBonded(_, _)).WillByDefault(Return(false)); CsisClient::Get()->Connect(test_address); Mock::VerifyAndClearExpectations(callbacks.get()); diff --git a/system/bta/has/has_client.cc b/system/bta/has/has_client.cc index 15bdfc5bfc..cb99045b41 100644 --- a/system/bta/has/has_client.cc +++ b/system/bta/has/has_client.cc @@ -164,7 +164,7 @@ public: void Connect(const RawAddress& address) override { log::info("{}", address); - if (!BTM_IsLinkKeyKnown(address, BT_TRANSPORT_LE)) { + if (!BTM_IsBonded(address, BT_TRANSPORT_LE)) { log::error("Connecting {} when not bonded", address); callbacks_->OnConnectionState(ConnectionState::DISCONNECTED, address); return; diff --git a/system/bta/has/has_client_test.cc b/system/bta/has/has_client_test.cc index 527ab2ef93..9b02f00027 100644 --- a/system/bta/has/has_client_test.cc +++ b/system/bta/has/has_client_test.cc @@ -633,7 +633,7 @@ protected: encryption_result = true; - ON_CALL(btm_interface, IsLinkKeyKnown(_, _)).WillByDefault(DoAll(Return(true))); + ON_CALL(btm_interface, IsDeviceBonded(_, _)).WillByDefault(DoAll(Return(true))); ON_CALL(btm_interface, SetEncryption(_, _, _, _, _)) .WillByDefault(Invoke([this](const RawAddress& bd_addr, tBT_TRANSPORT /*transport*/, @@ -861,7 +861,7 @@ protected: ON_CALL(btm_interface, BTM_IsEncrypted(address, _)) .WillByDefault(DoAll(Return(encryption_result))); - ON_CALL(btm_interface, IsLinkKeyKnown(address, _)).WillByDefault(DoAll(Return(true))); + ON_CALL(btm_interface, IsDeviceBonded(address, _)).WillByDefault(DoAll(Return(true))); } void InjectNotifyReadPresetResponse(uint16_t conn_id, RawAddress const& address, uint16_t handle, @@ -1189,7 +1189,7 @@ TEST_F(HasClientTest, test_connect_after_remove) { EXPECT_CALL(*callbacks, OnConnectionState(ConnectionState::DISCONNECTED, test_address)); // Device has no Link Key - ON_CALL(btm_interface, IsLinkKeyKnown(test_address, _)).WillByDefault(DoAll(Return(true))); + ON_CALL(btm_interface, IsDeviceBonded(test_address, _)).WillByDefault(DoAll(Return(true))); HasClient::Get()->Connect(test_address); Mock::VerifyAndClearExpectations(&callbacks); } diff --git a/system/bta/hearing_aid/hearing_aid.cc b/system/bta/hearing_aid/hearing_aid.cc index 58a4313638..d19ac8070c 100644 --- a/system/bta/hearing_aid/hearing_aid.cc +++ b/system/bta/hearing_aid/hearing_aid.cc @@ -572,7 +572,7 @@ public: return; } - if (BTM_IsLinkKeyKnown(address, BT_TRANSPORT_LE)) { + if (BTM_IsBonded(address, BT_TRANSPORT_LE)) { /* if bonded and link not encrypted */ BTM_SetEncryption(address, BT_TRANSPORT_LE, encryption_callback, nullptr, BTM_BLE_SEC_ENCRYPT); diff --git a/system/bta/hh/bta_hh_le.cc b/system/bta/hh/bta_hh_le.cc index 5a5c261f98..031462aedc 100644 --- a/system/bta/hh/bta_hh_le.cc +++ b/system/bta/hh/bta_hh_le.cc @@ -280,7 +280,7 @@ void bta_hh_le_open_conn(tBTA_HH_DEV_CB* p_cb, bool direct) { bta_hh_cb.le_cb_index[BTA_HH_GET_LE_CB_IDX(p_cb->hid_handle)] = p_cb->index; // Update index map if (!direct) { // don't reconnect unbonded device - if (!BTM_IsLinkKeyKnown(p_cb->link_spec.addrt.bda, BT_TRANSPORT_LE)) { + if (!BTM_IsBonded(p_cb->link_spec.addrt.bda, BT_TRANSPORT_LE)) { return; } log::debug("Add {} to background connection list", p_cb->link_spec); @@ -1108,7 +1108,7 @@ void bta_hh_start_security(tBTA_HH_DEV_CB* p_cb, const tBTA_HH_DATA* /* p_buf */ log::debug("addr:{} already encrypted", p_cb->link_spec.addrt.bda); p_cb->status = BTA_HH_OK; bta_hh_sm_execute(p_cb, BTA_HH_ENC_CMPL_EVT, NULL); - } else if (BTM_IsLinkKeyKnown(p_cb->link_spec.addrt.bda, BT_TRANSPORT_LE)) { + } else if (BTM_IsBonded(p_cb->link_spec.addrt.bda, BT_TRANSPORT_LE)) { /* if bonded and link not encrypted */ log::debug("addr:{} bonded, not encrypted", p_cb->link_spec.addrt.bda); p_cb->status = BTA_HH_ERR_AUTH_FAILED; diff --git a/system/bta/le_audio/client.cc b/system/bta/le_audio/client.cc index 18f5f501da..16114df846 100644 --- a/system/bta/le_audio/client.cc +++ b/system/bta/le_audio/client.cc @@ -1882,7 +1882,7 @@ public: LeAudioDevice* leAudioDevice = leAudioDevices_.FindByAddress(address); if (!leAudioDevice) { - if (!BTM_IsLinkKeyKnown(address, BT_TRANSPORT_LE)) { + if (!BTM_IsBonded(address, BT_TRANSPORT_LE)) { log::error("Connecting {} when not bonded", address); callbacks_->OnConnectionState(ConnectionState::DISCONNECTED, address); return; diff --git a/system/bta/le_audio/le_audio_client_test.cc b/system/bta/le_audio/le_audio_client_test.cc index 2e518e4ae5..42c7f9d634 100644 --- a/system/bta/le_audio/le_audio_client_test.cc +++ b/system/bta/le_audio/le_audio_client_test.cc @@ -1535,7 +1535,7 @@ protected: mock_iso_manager_ = MockIsoManager::GetInstance(); ON_CALL(*mock_iso_manager_, RegisterCigCallbacks(_)).WillByDefault(SaveArg<0>(&cig_callbacks_)); - ON_CALL(mock_btm_interface_, IsLinkKeyKnown(_, _)).WillByDefault(DoAll(Return(true))); + ON_CALL(mock_btm_interface_, IsDeviceBonded(_, _)).WillByDefault(DoAll(Return(true))); // Required since we call OnAudioDataReady() const auto codec_location = ::bluetooth::le_audio::types::CodecLocation::HOST; @@ -1779,7 +1779,7 @@ protected: ON_CALL(mock_btm_interface_, BTM_IsEncrypted(address, _)) .WillByDefault(DoAll(Return(isEncrypted))); - ON_CALL(mock_btm_interface_, IsLinkKeyKnown(address, _)).WillByDefault(DoAll(Return(true))); + ON_CALL(mock_btm_interface_, IsDeviceBonded(address, _)).WillByDefault(DoAll(Return(true))); EXPECT_CALL(mock_gatt_interface_, Open(gatt_if, address, BTM_BLE_DIRECT_CONNECTION, _)) .Times(1); @@ -5797,7 +5797,7 @@ TEST_F(UnicastTest, ConnectAfterRemove) { LeAudioClient::Get(), test_address0)); SyncOnMainLoop(); - ON_CALL(mock_btm_interface_, IsLinkKeyKnown(_, _)).WillByDefault(DoAll(Return(false))); + ON_CALL(mock_btm_interface_, IsDeviceBonded(_, _)).WillByDefault(DoAll(Return(false))); do_in_main_thread(base::BindOnce(&LeAudioClient::Connect, base::Unretained(LeAudioClient::Get()), test_address0)); diff --git a/system/bta/test/common/btm_api_mock.cc b/system/bta/test/common/btm_api_mock.cc index 87907f80f8..7f3f228dfe 100644 --- a/system/bta/test/common/btm_api_mock.cc +++ b/system/bta/test/common/btm_api_mock.cc @@ -61,9 +61,9 @@ void bluetooth::manager::SetMockBtmInterface(MockBtmInterface* mock_btm_interfac }; } -bool BTM_IsLinkKeyKnown(const RawAddress& bd_addr, tBT_TRANSPORT transport) { +bool BTM_IsBonded(const RawAddress& bd_addr, tBT_TRANSPORT transport) { log::assert_that(btm_interface != nullptr, "Mock btm interface not set!"); - return btm_interface->IsLinkKeyKnown(bd_addr, transport); + return btm_interface->IsDeviceBonded(bd_addr, transport); } bool BTM_IsEncrypted(const RawAddress& bd_addr, tBT_TRANSPORT transport) { diff --git a/system/bta/test/common/btm_api_mock.h b/system/bta/test/common/btm_api_mock.h index 6f746a66ac..a293985a80 100644 --- a/system/bta/test/common/btm_api_mock.h +++ b/system/bta/test/common/btm_api_mock.h @@ -35,7 +35,7 @@ class BtmInterface { public: virtual bool GetSecurityFlagsByTransport(const RawAddress& bd_addr, uint8_t* p_sec_flags, tBT_TRANSPORT transport) = 0; - virtual bool IsLinkKeyKnown(const RawAddress& bd_addr, tBT_TRANSPORT transport) = 0; + virtual bool IsDeviceBonded(const RawAddress& bd_addr, tBT_TRANSPORT transport) = 0; virtual bool BTM_IsEncrypted(const RawAddress& bd_addr, tBT_TRANSPORT transport) = 0; virtual tBTM_STATUS SetEncryption(const RawAddress& bd_addr, tBT_TRANSPORT transport, tBTM_SEC_CALLBACK* p_callback, void* p_ref_data, @@ -66,7 +66,7 @@ public: MOCK_METHOD((bool), GetSecurityFlagsByTransport, (const RawAddress& bd_addr, uint8_t* p_sec_flags, tBT_TRANSPORT transport), (override)); - MOCK_METHOD((bool), IsLinkKeyKnown, (const RawAddress& bd_addr, tBT_TRANSPORT transport), + MOCK_METHOD((bool), IsDeviceBonded, (const RawAddress& bd_addr, tBT_TRANSPORT transport), (override)); MOCK_METHOD((bool), BTM_IsEncrypted, (const RawAddress& bd_addr, tBT_TRANSPORT transport), (override)); diff --git a/system/bta/vc/vc.cc b/system/bta/vc/vc.cc index 0313b3962c..df8e6a00e7 100644 --- a/system/bta/vc/vc.cc +++ b/system/bta/vc/vc.cc @@ -144,7 +144,7 @@ public: auto device = volume_control_devices_.FindByAddress(address); if (!device) { - if (!BTM_IsLinkKeyKnown(address, BT_TRANSPORT_LE)) { + if (!BTM_IsBonded(address, BT_TRANSPORT_LE)) { bluetooth::log::error("Connecting {} when not bonded", address); callbacks_->OnConnectionState(ConnectionState::DISCONNECTED, address); return; diff --git a/system/bta/vc/vc_test.cc b/system/bta/vc/vc_test.cc index 4961a32399..c52dc9f2a6 100644 --- a/system/bta/vc/vc_test.cc +++ b/system/bta/vc/vc_test.cc @@ -444,7 +444,7 @@ protected: gatt::SetMockBtaGattQueue(&gatt_queue); reset_mock_function_count_map(); - ON_CALL(btm_interface, IsLinkKeyKnown(_, _)).WillByDefault(DoAll(Return(true))); + ON_CALL(btm_interface, IsDeviceBonded(_, _)).WillByDefault(DoAll(Return(true))); // default action for GetCharacteristic function call ON_CALL(gatt_interface, GetCharacteristic(_, _)) @@ -695,7 +695,7 @@ protected: void SetEncryptionResult(const RawAddress& address, bool success) { ON_CALL(btm_interface, BTM_IsEncrypted(address, _)).WillByDefault(DoAll(Return(false))); - ON_CALL(btm_interface, IsLinkKeyKnown(address, _)).WillByDefault(DoAll(Return(true))); + ON_CALL(btm_interface, IsDeviceBonded(address, _)).WillByDefault(DoAll(Return(true))); ON_CALL(btm_interface, SetEncryption(address, _, _, _, BTM_BLE_SEC_ENCRYPT)) .WillByDefault( Invoke([&success, this](const RawAddress& bd_addr, tBT_TRANSPORT transport, @@ -820,7 +820,7 @@ TEST_F(VolumeControlTest, test_connect_after_remove) { Mock::VerifyAndClearExpectations(&callbacks); EXPECT_CALL(callbacks, OnConnectionState(ConnectionState::DISCONNECTED, test_address)).Times(1); - ON_CALL(btm_interface, IsLinkKeyKnown(_, _)).WillByDefault(DoAll(Return(false))); + ON_CALL(btm_interface, IsDeviceBonded(_, _)).WillByDefault(DoAll(Return(false))); VolumeControl::Get()->Connect(test_address); Mock::VerifyAndClearExpectations(&callbacks); @@ -1033,7 +1033,7 @@ TEST_F(VolumeControlTest, test_service_discovery_completed_before_encryption) { TestConnect(test_address); ON_CALL(btm_interface, BTM_IsEncrypted(test_address, _)).WillByDefault(DoAll(Return(false))); - ON_CALL(btm_interface, IsLinkKeyKnown(test_address, _)).WillByDefault(DoAll(Return(true))); + ON_CALL(btm_interface, IsDeviceBonded(test_address, _)).WillByDefault(DoAll(Return(true))); ON_CALL(btm_interface, SetEncryption(test_address, _, _, _, _)) .WillByDefault(Return(tBTM_STATUS::BTM_SUCCESS)); diff --git a/system/stack/btm/btm_ble_sec.cc b/system/stack/btm/btm_ble_sec.cc index 29d48e6033..8ac6f25bac 100644 --- a/system/stack/btm/btm_ble_sec.cc +++ b/system/stack/btm/btm_ble_sec.cc @@ -2110,8 +2110,7 @@ std::optional<Octet16> BTM_BleGetPeerIRK(const RawAddress address) { } bool BTM_BleIsLinkKeyKnown(const RawAddress address) { - tBTM_SEC_DEV_REC* p_dev_rec = btm_find_dev(address); - return p_dev_rec != nullptr && p_dev_rec->sec_rec.is_le_link_key_known(); + return btm_sec_cb.IsDeviceBonded(address, BT_TRANSPORT_LE); } std::optional<tBLE_BD_ADDR> BTM_BleGetIdentityAddress(const RawAddress address) { diff --git a/system/stack/btm/btm_sec.cc b/system/stack/btm/btm_sec.cc index e181349129..3f82fc5ac1 100644 --- a/system/stack/btm/btm_sec.cc +++ b/system/stack/btm/btm_sec.cc @@ -407,8 +407,8 @@ bool BTM_IsLinkKeyAuthed(const RawAddress& bd_addr, tBT_TRANSPORT transport) { return btm_sec_cb.IsLinkKeyAuthenticated(bd_addr, transport); } -bool BTM_IsLinkKeyKnown(const RawAddress& bd_addr, tBT_TRANSPORT transport) { - return btm_sec_cb.IsLinkKeyKnown(bd_addr, transport); +bool BTM_IsBonded(const RawAddress& bd_addr, tBT_TRANSPORT transport) { + return btm_sec_cb.IsDeviceBonded(bd_addr, transport); } bool BTM_IsAuthenticated(const RawAddress& bd_addr, tBT_TRANSPORT transport) { diff --git a/system/stack/btm/btm_sec.h b/system/stack/btm/btm_sec.h index ade49b883e..05bafc40d5 100644 --- a/system/stack/btm/btm_sec.h +++ b/system/stack/btm/btm_sec.h @@ -57,7 +57,7 @@ bool BTM_SecRegister(const tBTM_APPL_INFO* p_cb_info); bool BTM_IsEncrypted(const RawAddress& bd_addr, tBT_TRANSPORT transport); bool BTM_IsLinkKeyAuthed(const RawAddress& bd_addr, tBT_TRANSPORT transport); -bool BTM_IsLinkKeyKnown(const RawAddress& bd_addr, tBT_TRANSPORT transport); +bool BTM_IsBonded(const RawAddress& bd_addr, tBT_TRANSPORT transport = BT_TRANSPORT_AUTO); bool BTM_IsAuthenticated(const RawAddress& bd_addr, tBT_TRANSPORT transport); bool BTM_CanReadDiscoverableCharacteristics(const RawAddress& bd_addr); void BTM_update_version_info(const RawAddress& bd_addr, diff --git a/system/stack/btm/btm_sec_cb.cc b/system/stack/btm/btm_sec_cb.cc index c40d8fe416..3f253059c2 100644 --- a/system/stack/btm/btm_sec_cb.cc +++ b/system/stack/btm/btm_sec_cb.cc @@ -117,7 +117,7 @@ tBTM_SEC_SERV_REC* tBTM_SEC_CB::find_first_serv_rec(bool is_originator, uint16_t tBTM_SEC_REC* tBTM_SEC_CB::getSecRec(const RawAddress bd_addr) { tBTM_SEC_DEV_REC* p_dev_rec = btm_find_dev(bd_addr); - if (p_dev_rec) { + if (p_dev_rec != nullptr) { return &p_dev_rec->sec_rec; } return nullptr; @@ -171,33 +171,25 @@ bool tBTM_SEC_CB::IsDeviceAuthenticated(const RawAddress bd_addr, tBT_TRANSPORT return false; } -bool tBTM_SEC_CB::IsLinkKeyKnown(const RawAddress bd_addr, tBT_TRANSPORT transport) { +bool tBTM_SEC_CB::IsDeviceBonded(const RawAddress bd_addr, tBT_TRANSPORT transport) { tBTM_SEC_REC* sec_rec = getSecRec(bd_addr); - if (sec_rec) { - if (transport == BT_TRANSPORT_BR_EDR) { - return sec_rec->is_link_key_known(); - } else if (transport == BT_TRANSPORT_LE) { - return sec_rec->is_le_link_key_known(); - } - log::error("unknown transport:{}", bt_transport_text(transport)); + if (sec_rec == nullptr) { return false; } - log::error("unknown device:{}", bd_addr); - return false; -} + bool bonded = false; -bool tBTM_SEC_CB::IsDeviceBonded(const RawAddress bd_addr) { - tBTM_SEC_DEV_REC* p_dev_rec = btm_find_dev(bd_addr); - bool is_bonded = false; + // Check BR/EDR bond status if requested transport is BT_TRANSPORT_BR_EDR or BT_TRANSPORT_AUTO + if (transport != BT_TRANSPORT_LE) { + bonded = sec_rec->is_link_key_known(); + } - if (p_dev_rec && - ((p_dev_rec->sec_rec.ble_keys.key_type && p_dev_rec->sec_rec.is_le_link_key_known()) || - p_dev_rec->sec_rec.is_link_key_known())) { - is_bonded = true; + // Check LE bond status if requested transport is BT_TRANSPORT_LE or BT_TRANSPORT_AUTO + if (transport != BT_TRANSPORT_BR_EDR) { + bonded |= (sec_rec->ble_keys.key_type != BTM_LE_KEY_NONE && sec_rec->is_le_link_key_known()); } - log::debug("Device record bonded check peer:{} is_bonded:{}", bd_addr, is_bonded); - return is_bonded; + + return bonded; } #define BTM_NO_AVAIL_SEC_SERVICES ((uint16_t)0xffff) diff --git a/system/stack/btm/btm_sec_cb.h b/system/stack/btm/btm_sec_cb.h index b851aa32cb..1e3ae3b258 100644 --- a/system/stack/btm/btm_sec_cb.h +++ b/system/stack/btm/btm_sec_cb.h @@ -84,13 +84,11 @@ public: tBTM_SEC_SERV_REC* find_first_serv_rec(bool is_originator, uint16_t psm); - bool IsDeviceBonded(const RawAddress bd_addr); + bool IsDeviceBonded(const RawAddress bd_addr, tBT_TRANSPORT transport = BT_TRANSPORT_AUTO); bool IsDeviceEncrypted(const RawAddress bd_addr, tBT_TRANSPORT transport); bool IsDeviceAuthenticated(const RawAddress bd_addr, tBT_TRANSPORT transport); bool IsLinkKeyAuthenticated(const RawAddress bd_addr, tBT_TRANSPORT transport); - bool IsLinkKeyKnown(const RawAddress bd_addr, tBT_TRANSPORT transport); - tBTM_SEC_REC* getSecRec(const RawAddress bd_addr); bool AddService(bool is_originator, const char* p_name, uint8_t service_id, uint16_t sec_level, diff --git a/system/stack/btm/btm_security_client_interface.cc b/system/stack/btm/btm_security_client_interface.cc index 3adda4d0f8..ae3161b6e0 100644 --- a/system/stack/btm/btm_security_client_interface.cc +++ b/system/stack/btm/btm_security_client_interface.cc @@ -55,7 +55,7 @@ static SecurityClientInterface security = { .BTM_SetEncryption = BTM_SetEncryption, .BTM_IsEncrypted = BTM_IsEncrypted, .BTM_SecIsLeSecurityPending = BTM_SecIsLeSecurityPending, - .BTM_IsLinkKeyKnown = BTM_IsLinkKeyKnown, + .BTM_IsBonded = BTM_IsBonded, .BTM_SetSecurityLevel = BTM_SetSecurityLevel, .BTM_SecClrService = BTM_SecClrService, diff --git a/system/stack/btm/security_device_record.h b/system/stack/btm/security_device_record.h index 61a6d182a6..c7074ec253 100644 --- a/system/stack/btm/security_device_record.h +++ b/system/stack/btm/security_device_record.h @@ -221,12 +221,11 @@ struct tBTM_SEC_REC { LinkKey link_key; /* Device link key */ uint8_t link_key_type; /* Type of key used in pairing */ uint8_t enc_key_size; /* current link encryption key size */ + tBTM_BOND_TYPE bond_type; /* Whether the BR/EDR pairing was persistent or temporary */ // LE Link Key Info tBTM_SEC_BLE_KEYS ble_keys; - tBTM_BOND_TYPE bond_type; /* bond type */ - public: bool is_device_authenticated() const { return sec_flags & BTM_SEC_AUTHENTICATED; } void set_device_authenticated() { sec_flags |= BTM_SEC_AUTHENTICATED; } diff --git a/system/stack/eatt/eatt_impl.h b/system/stack/eatt/eatt_impl.h index c746695cb7..0d27726af4 100644 --- a/system/stack/eatt/eatt_impl.h +++ b/system/stack/eatt/eatt_impl.h @@ -308,7 +308,7 @@ struct eatt_impl { std::vector<uint16_t> empty; tL2CAP_LE_RESULT_CODE result = tL2CAP_LE_RESULT_CODE::L2CAP_LE_RESULT_INSUFFICIENT_AUTHENTICATION; - if (BTM_IsLinkKeyKnown(bda, BT_TRANSPORT_LE)) { + if (BTM_IsBonded(bda, BT_TRANSPORT_LE)) { result = tL2CAP_LE_RESULT_CODE::L2CAP_LE_RESULT_INSUFFICIENT_ENCRYP; } log::error("ACL to device {} is unencrypted.", bda); diff --git a/system/stack/gatt/gatt_auth.cc b/system/stack/gatt/gatt_auth.cc index 4323c8ed13..7c4b935389 100644 --- a/system/stack/gatt/gatt_auth.cc +++ b/system/stack/gatt/gatt_auth.cc @@ -299,7 +299,7 @@ static tGATT_SEC_ACTION gatt_determine_sec_act(tGATT_CLCB* p_clcb) { return GATT_SEC_ENC_PENDING; } - is_link_key_known = BTM_IsLinkKeyKnown(p_tcb->peer_bda, p_clcb->p_tcb->transport); + is_link_key_known = BTM_IsBonded(p_tcb->peer_bda, p_clcb->p_tcb->transport); is_link_encrypted = BTM_IsEncrypted(p_tcb->peer_bda, p_clcb->p_tcb->transport); is_key_mitm = BTM_IsLinkKeyAuthed(p_tcb->peer_bda, p_clcb->p_tcb->transport); @@ -363,7 +363,7 @@ tGATT_STATUS gatt_get_link_encrypt_status(tGATT_TCB& tcb) { tGATT_STATUS encrypt_status = GATT_NOT_ENCRYPTED; bool encrypted = BTM_IsEncrypted(tcb.peer_bda, tcb.transport); - bool link_key_known = BTM_IsLinkKeyKnown(tcb.peer_bda, tcb.transport); + bool link_key_known = BTM_IsBonded(tcb.peer_bda, tcb.transport); bool link_key_authed = BTM_IsLinkKeyAuthed(tcb.peer_bda, tcb.transport); if (encrypted && link_key_known) { diff --git a/system/stack/gatt/gatt_utils.cc b/system/stack/gatt/gatt_utils.cc index b0d18f892e..f401be9285 100644 --- a/system/stack/gatt/gatt_utils.cc +++ b/system/stack/gatt/gatt_utils.cc @@ -867,7 +867,7 @@ std::list<tGATT_SRV_LIST_ELEM>::iterator gatt_sr_find_i_rcb_by_handle(uint16_t h void gatt_sr_get_sec_info(const RawAddress& rem_bda, tBT_TRANSPORT transport, tGATT_SEC_FLAG* p_sec_flag, uint8_t* p_key_size) { tGATT_SEC_FLAG flags = {}; - flags.is_link_key_known = BTM_IsLinkKeyKnown(rem_bda, transport); + flags.is_link_key_known = BTM_IsBonded(rem_bda, transport); flags.is_link_key_authed = BTM_IsLinkKeyAuthed(rem_bda, transport); flags.is_encrypted = BTM_IsEncrypted(rem_bda, transport); flags.can_read_discoverable_characteristics = BTM_CanReadDiscoverableCharacteristics(rem_bda); diff --git a/system/stack/include/security_client_callbacks.h b/system/stack/include/security_client_callbacks.h index d9d19f33f6..f8a29e7bc3 100644 --- a/system/stack/include/security_client_callbacks.h +++ b/system/stack/include/security_client_callbacks.h @@ -111,7 +111,7 @@ typedef struct { tBTM_BLE_SEC_ACT sec_act); bool (*BTM_IsEncrypted)(const RawAddress& bd_addr, tBT_TRANSPORT transport); bool (*BTM_SecIsLeSecurityPending)(const RawAddress& bd_addr); - bool (*BTM_IsLinkKeyKnown)(const RawAddress& bd_addr, tBT_TRANSPORT transport); + bool (*BTM_IsBonded)(const RawAddress& bd_addr, tBT_TRANSPORT transport); // Secure service management bool (*BTM_SetSecurityLevel)(bool is_originator, const char* p_name, uint8_t service_id, diff --git a/system/stack/test/common/mock_btm_api_layer.cc b/system/stack/test/common/mock_btm_api_layer.cc index 83d969dc72..763309abea 100644 --- a/system/stack/test/common/mock_btm_api_layer.cc +++ b/system/stack/test/common/mock_btm_api_layer.cc @@ -37,8 +37,8 @@ bool BTM_IsEncrypted(const RawAddress& remote_bd_addr, tBT_TRANSPORT transport) return btm_api_interface->IsEncrypted(remote_bd_addr, transport); } -bool BTM_IsLinkKeyKnown(const RawAddress& remote_bd_addr, tBT_TRANSPORT transport) { - return btm_api_interface->IsLinkKeyKnown(remote_bd_addr, transport); +bool BTM_IsBonded(const RawAddress& remote_bd_addr, tBT_TRANSPORT transport) { + return btm_api_interface->IsDeviceBonded(remote_bd_addr, transport); } uint8_t btm_ble_read_sec_key_size(const RawAddress& bd_addr) { diff --git a/system/stack/test/common/mock_btm_api_layer.h b/system/stack/test/common/mock_btm_api_layer.h index b9a748d36c..e852053661 100644 --- a/system/stack/test/common/mock_btm_api_layer.h +++ b/system/stack/test/common/mock_btm_api_layer.h @@ -31,7 +31,7 @@ public: uint32_t mx_chan_id) = 0; virtual uint8_t acl_link_role(const RawAddress& remote_bd_addr, tBT_TRANSPORT transport) = 0; virtual bool IsEncrypted(const RawAddress& remote_bd_addr, tBT_TRANSPORT transport) = 0; - virtual bool IsLinkKeyKnown(const RawAddress& remote_bd_addr, tBT_TRANSPORT transport) = 0; + virtual bool IsDeviceBonded(const RawAddress& remote_bd_addr, tBT_TRANSPORT transport) = 0; virtual uint8_t ReadSecKeySize(const RawAddress& remote_bd_addr) = 0; virtual ~BtmApiInterface() = default; }; @@ -43,7 +43,7 @@ public: uint16_t psm, uint32_t mx_proto_id, uint32_t mx_chan_id)); MOCK_METHOD2(acl_link_role, uint8_t(const RawAddress& remote_bd_addr, tBT_TRANSPORT transport)); MOCK_METHOD2(IsEncrypted, bool(const RawAddress& remote_bd_addr, tBT_TRANSPORT transport)); - MOCK_METHOD2(IsLinkKeyKnown, bool(const RawAddress& remote_bd_addr, tBT_TRANSPORT transport)); + MOCK_METHOD2(IsDeviceBonded, bool(const RawAddress& remote_bd_addr, tBT_TRANSPORT transport)); MOCK_METHOD1(ReadSecKeySize, uint8_t(const RawAddress& remote_bd_addr)); }; diff --git a/system/stack/test/eatt/eatt_test.cc b/system/stack/test/eatt/eatt_test.cc index 31ceba5060..130893a0a5 100644 --- a/system/stack/test/eatt/eatt_test.cc +++ b/system/stack/test/eatt/eatt_test.cc @@ -336,7 +336,7 @@ TEST_F(EattTest, IncomingEattConnectionByKnownDeviceEncryptionOff) { ON_CALL(btm_api_interface_, IsEncrypted) .WillByDefault( [](const RawAddress& /*addr*/, tBT_TRANSPORT /*transport*/) { return false; }); - ON_CALL(btm_api_interface_, IsLinkKeyKnown) + ON_CALL(btm_api_interface_, IsDeviceBonded) .WillByDefault( [](const RawAddress& /*addr*/, tBT_TRANSPORT /*transport*/) { return true; }); ON_CALL(gatt_interface_, ClientReadSupportedFeatures) @@ -370,7 +370,7 @@ TEST_F(EattTest, IncomingEattConnectionByUnknownDeviceEncryptionOff) { ON_CALL(btm_api_interface_, IsEncrypted) .WillByDefault( [](const RawAddress& /*addr*/, tBT_TRANSPORT /*transport*/) { return false; }); - ON_CALL(btm_api_interface_, IsLinkKeyKnown) + ON_CALL(btm_api_interface_, IsDeviceBonded) .WillByDefault( [](const RawAddress& /*addr*/, tBT_TRANSPORT /*transport*/) { return false; }); EXPECT_CALL(mock_stack_l2cap_interface_, diff --git a/system/test/mock/mock_stack_btm_interface.cc b/system/test/mock/mock_stack_btm_interface.cc index 44c542081d..20a8f7a586 100644 --- a/system/test/mock/mock_stack_btm_interface.cc +++ b/system/test/mock/mock_stack_btm_interface.cc @@ -140,7 +140,7 @@ struct btm_client_interface_t default_btm_client_interface = { .BTM_SecIsLeSecurityPending = [](const RawAddress& /* bd_addr */) -> bool { return false; }, - .BTM_IsLinkKeyKnown = [](const RawAddress& /* bd_addr */, + .BTM_IsBonded = [](const RawAddress& /* bd_addr */, tBT_TRANSPORT /* transport */) -> bool { return false; }, .BTM_SetSecurityLevel = [](bool /* is_originator */, const char* /*p_name */, uint8_t /* service_id */, uint16_t /* sec_level */, diff --git a/system/test/mock/mock_stack_btm_sec.cc b/system/test/mock/mock_stack_btm_sec.cc index ca943498fe..532404c409 100644 --- a/system/test/mock/mock_stack_btm_sec.cc +++ b/system/test/mock/mock_stack_btm_sec.cc @@ -46,7 +46,7 @@ struct BTM_ConfirmReqReply BTM_ConfirmReqReply; struct BTM_IsAuthenticated BTM_IsAuthenticated; struct BTM_IsEncrypted BTM_IsEncrypted; struct BTM_IsLinkKeyAuthed BTM_IsLinkKeyAuthed; -struct BTM_IsLinkKeyKnown BTM_IsLinkKeyKnown; +struct BTM_IsBonded BTM_IsBonded; struct BTM_PINCodeReply BTM_PINCodeReply; struct BTM_PasskeyReqReply BTM_PasskeyReqReply; struct BTM_PeerSupportsSecureConnections BTM_PeerSupportsSecureConnections; @@ -111,7 +111,7 @@ bool BTM_CanReadDiscoverableCharacteristics::return_value = false; bool BTM_IsAuthenticated::return_value = false; bool BTM_IsEncrypted::return_value = false; bool BTM_IsLinkKeyAuthed::return_value = false; -bool BTM_IsLinkKeyKnown::return_value = false; +bool BTM_IsBonded::return_value = false; bool BTM_PeerSupportsSecureConnections::return_value = false; tBTM_STATUS BTM_SecBond::return_value = tBTM_STATUS::BTM_SUCCESS; tBTM_STATUS BTM_SecBondCancel::return_value = tBTM_STATUS::BTM_SUCCESS; @@ -155,9 +155,9 @@ bool BTM_IsLinkKeyAuthed(const RawAddress& bd_addr, tBT_TRANSPORT transport) { inc_func_call_count(__func__); return test::mock::stack_btm_sec::BTM_IsLinkKeyAuthed(bd_addr, transport); } -bool BTM_IsLinkKeyKnown(const RawAddress& bd_addr, tBT_TRANSPORT transport) { +bool BTM_IsBonded(const RawAddress& bd_addr, tBT_TRANSPORT transport) { inc_func_call_count(__func__); - return test::mock::stack_btm_sec::BTM_IsLinkKeyKnown(bd_addr, transport); + return test::mock::stack_btm_sec::BTM_IsBonded(bd_addr, transport); } void BTM_PINCodeReply(const RawAddress& bd_addr, tBTM_STATUS res, uint8_t pin_len, uint8_t* p_pin) { inc_func_call_count(__func__); diff --git a/system/test/mock/mock_stack_btm_sec.h b/system/test/mock/mock_stack_btm_sec.h index a54782c9fb..3ae397be41 100644 --- a/system/test/mock/mock_stack_btm_sec.h +++ b/system/test/mock/mock_stack_btm_sec.h @@ -111,10 +111,10 @@ struct BTM_IsLinkKeyAuthed { }; extern struct BTM_IsLinkKeyAuthed BTM_IsLinkKeyAuthed; -// Name: BTM_IsLinkKeyKnown +// Name: BTM_IsBonded // Params: const RawAddress& bd_addr, tBT_TRANSPORT transport // Return: bool -struct BTM_IsLinkKeyKnown { +struct BTM_IsBonded { static bool return_value; std::function<bool(const RawAddress& bd_addr, tBT_TRANSPORT transport)> body{ [](const RawAddress& /* bd_addr */, tBT_TRANSPORT /* transport */) { @@ -124,7 +124,7 @@ struct BTM_IsLinkKeyKnown { return body(bd_addr, transport); } }; -extern struct BTM_IsLinkKeyKnown BTM_IsLinkKeyKnown; +extern struct BTM_IsBonded BTM_IsBonded; // Name: BTM_PINCodeReply // Params: const RawAddress& bd_addr, tBTM_STATUS res, uint8_t pin_len, uint8_t* diff --git a/system/test/mock/mock_stack_security_client_interface.h b/system/test/mock/mock_stack_security_client_interface.h index 224d880905..1487326ac5 100644 --- a/system/test/mock/mock_stack_security_client_interface.h +++ b/system/test/mock/mock_stack_security_client_interface.h @@ -44,7 +44,7 @@ struct MockSecurityClientInterface : public SecurityClientInterface { MOCK_METHOD((bool), BTM_IsEncrypted, (const RawAddress& /* bd_addr */, tBT_TRANSPORT /* transport */)); MOCK_METHOD((bool), BTM_SecIsLeSecurityPending, (const RawAddress& /* bd_addr */)); - MOCK_METHOD((bool), BTM_IsLinkKeyKnown, + MOCK_METHOD((bool), BTM_IsDeviceBonded, (const RawAddress& /* bd_addr */, tBT_TRANSPORT /* transport */)); MOCK_METHOD((bool), BTM_SetSecurityLevel, (bool /* is_originator */, const char* /* p_name */, uint8_t /* service_id */, |