BTM_API Shim: Add ShimBondListener
Create a new class ShimBondListener that accepts the
tBTM_APPL_INFO as a constructor argument.
Bug: 159815595
Tag: #gd-refactor
Test: cert/run --host SecurityTest
Test: atest --host bluetooth_test_gd
Test: Manual testing with hybrid stack
Change-Id: Ifb524cd7af85dba5f5659112437cb5d6284bb8b6
diff --git a/system/main/shim/btm_api.cc b/system/main/shim/btm_api.cc
index 437c0c5..637455b 100644
--- a/system/main/shim/btm_api.cc
+++ b/system/main/shim/btm_api.cc
@@ -24,6 +24,7 @@
#include "device/include/controller.h"
#include "gd/common/callback.h"
#include "gd/neighbor/name.h"
+#include "gd/security/security_module.h"
#include "main/shim/btm.h"
#include "main/shim/btm_api.h"
#include "main/shim/controller.h"
@@ -230,6 +231,82 @@
}
}
+class ShimBondListener : public bluetooth::security::ISecurityManagerListener {
+ public:
+ static ShimBondListener* GetInstance() {
+ static ShimBondListener instance;
+ return &instance;
+ }
+
+ ShimBondListener(const ShimBondListener&) = delete;
+ ShimBondListener& operator=(const ShimBondListener&) = delete;
+
+ void SetBtaCallbacks(const tBTM_APPL_INFO* bta_callbacks) {
+ bta_callbacks_ = bta_callbacks;
+ if (bta_callbacks->p_pin_callback == nullptr) {
+ LOG_INFO("UNIMPLEMENTED %s pin_callback", __func__);
+ }
+
+ if (bta_callbacks->p_link_key_callback == nullptr) {
+ LOG_INFO("UNIMPLEMENTED %s link_key_callback", __func__);
+ }
+
+ if (bta_callbacks->p_auth_complete_callback == nullptr) {
+ LOG_INFO("UNIMPLEMENTED %s auth_complete_callback", __func__);
+ }
+
+ if (bta_callbacks->p_bond_cancel_cmpl_callback == nullptr) {
+ LOG_INFO("UNIMPLEMENTED %s bond_cancel_complete_callback", __func__);
+ }
+
+ if (bta_callbacks->p_le_callback == nullptr) {
+ LOG_INFO("UNIMPLEMENTED %s le_callback", __func__);
+ }
+
+ if (bta_callbacks->p_le_key_callback == nullptr) {
+ LOG_INFO("UNIMPLEMENTED %s le_key_callback", __func__);
+ }
+ }
+
+ void OnDeviceBonded(bluetooth::hci::AddressWithType device) override {
+ if (bta_callbacks_->p_sp_callback) {
+ // SP_CBACK (what events?)
+ // link key notification
+ // auth complete
+ }
+ }
+
+ void OnDeviceUnbonded(bluetooth::hci::AddressWithType device) override {
+ if (bta_callbacks_->p_sp_callback) {
+ // SP_CBACK (what events?)
+ // link key notification
+ // auth complete
+ }
+ }
+
+ void OnDeviceBondFailed(bluetooth::hci::AddressWithType device) override {
+ if (bta_callbacks_->p_sp_callback) {
+ // SP_CBACK (what events?)
+ // link key notification
+ // auth complete
+ }
+ }
+
+ void OnEncryptionStateChanged(
+ bluetooth::hci::EncryptionChangeView encryption_change_view) override {
+ if (bta_callbacks_->p_sp_callback) {
+ // SP_CBACK (what events?)
+ // link key notification
+ // auth complete
+ }
+ }
+
+ private:
+ ShimBondListener() : bta_callbacks_(nullptr) {}
+ ~ShimBondListener() {}
+ const tBTM_APPL_INFO* bta_callbacks_;
+};
+
tBTM_STATUS bluetooth::shim::BTM_StartInquiry(tBTM_INQ_RESULTS_CB* p_results_cb,
tBTM_CMPL_CB* p_cmpl_cb) {
CHECK(p_results_cb != nullptr);
@@ -912,34 +989,40 @@
transport, device_type);
}
-bool bluetooth::shim::BTM_SecRegister(const tBTM_APPL_INFO* p_cb_info) {
- CHECK(p_cb_info != nullptr);
+bool bluetooth::shim::BTM_SecRegister(const tBTM_APPL_INFO* bta_callbacks) {
+ CHECK(bta_callbacks != nullptr);
LOG_DEBUG("%s Registering security application", __func__);
- if (p_cb_info->p_pin_callback == nullptr) {
+ if (bta_callbacks->p_pin_callback == nullptr) {
LOG_INFO("UNIMPLEMENTED %s pin_callback", __func__);
}
- if (p_cb_info->p_link_key_callback == nullptr) {
+ if (bta_callbacks->p_link_key_callback == nullptr) {
LOG_INFO("UNIMPLEMENTED %s link_key_callback", __func__);
}
- if (p_cb_info->p_auth_complete_callback == nullptr) {
+ if (bta_callbacks->p_auth_complete_callback == nullptr) {
LOG_INFO("UNIMPLEMENTED %s auth_complete_callback", __func__);
}
- if (p_cb_info->p_bond_cancel_cmpl_callback == nullptr) {
+ if (bta_callbacks->p_bond_cancel_cmpl_callback == nullptr) {
LOG_INFO("UNIMPLEMENTED %s bond_cancel_complete_callback", __func__);
}
- if (p_cb_info->p_le_callback == nullptr) {
+ if (bta_callbacks->p_le_callback == nullptr) {
LOG_INFO("UNIMPLEMENTED %s le_callback", __func__);
}
- if (p_cb_info->p_le_key_callback == nullptr) {
+ if (bta_callbacks->p_le_key_callback == nullptr) {
LOG_INFO("UNIMPLEMENTED %s le_key_callback", __func__);
}
+ ShimBondListener::GetInstance()->SetBtaCallbacks(bta_callbacks);
+
+ bluetooth::shim::GetSecurityModule()
+ ->GetSecurityManager()
+ ->RegisterCallbackListener(ShimBondListener::GetInstance(),
+ bluetooth::shim::GetGdShimHandler());
return true;
}