Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit bca1e9dc authored by Martin Brabham's avatar Martin Brabham
Browse files

Facade Configuration: Set disconnect callback.

Tests need to know when the ACL disconnects in order to continue
otherwise race conditions are triggered.

Bug: 164495896
Tag: #gd-refactor
Test: cert/run --host SecurityTest
Change-Id: Ie62cae6a8e639ddab1027138e5dfb03a6694e669
parent 5c5b1fc1
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -24,6 +24,10 @@
namespace bluetooth {
namespace security {

void FacadeConfigurationApi::SetDisconnectCallback(internal::SecurityManagerImpl::FacadeDisconnectCallback callback) {
  security_handler_->CallOn(security_manager_impl_, &internal::SecurityManagerImpl::SetDisconnectCallback, callback);
}

void FacadeConfigurationApi::SetIoCapability(hci::IoCapability io_capability) {
  security_handler_->CallOn(security_manager_impl_, &internal::SecurityManagerImpl::SetIoCapability, io_capability);
}
+1 −0
Original line number Diff line number Diff line
@@ -38,6 +38,7 @@ class FacadeConfigurationApi {
  friend class internal::SecurityManagerImpl;
  friend class SecurityModule;

  void SetDisconnectCallback(internal::SecurityManagerImpl::FacadeDisconnectCallback callback);
  void SetIoCapability(hci::IoCapability io_capability);
  void SetAuthenticationRequirements(hci::AuthenticationRequirements authentication_requirement);
  void SetOobDataPresent(hci::OobDataPresent oob_present);
+8 −0
Original line number Diff line number Diff line
@@ -326,6 +326,10 @@ void SecurityManagerImpl::OnConnectionClosed(hci::Address address) {
  if (record->IsTemporary()) {
    security_database_.Remove(hci::AddressWithType(address, hci::AddressType::PUBLIC_DEVICE_ADDRESS));
  }
  if (this->facade_disconnect_callback_) {
    this->security_handler_->Call(
        *this->facade_disconnect_callback_, hci::AddressWithType(address, hci::AddressType::PUBLIC_DEVICE_ADDRESS));
  }
}

void SecurityManagerImpl::OnHciLeEvent(hci::LeMetaEventView event) {
@@ -653,6 +657,10 @@ void SecurityManagerImpl::WipeLePairingHandler() {
}

// Facade Configuration API functions
void SecurityManagerImpl::SetDisconnectCallback(FacadeDisconnectCallback callback) {
  this->facade_disconnect_callback_ = std::make_optional<FacadeDisconnectCallback>(callback);
}

void SecurityManagerImpl::SetIoCapability(hci::IoCapability io_capability) {
  this->local_io_capability_ = io_capability;
}
+3 −0
Original line number Diff line number Diff line
@@ -167,6 +167,8 @@ class SecurityManagerImpl : public channel::ISecurityManagerChannelListener, pub
  void OnPasskeyEntry(const bluetooth::hci::AddressWithType& address, uint32_t passkey) override;

  // Facade Configuration API functions
  using FacadeDisconnectCallback = common::Callback<void(bluetooth::hci::AddressWithType)>;
  void SetDisconnectCallback(FacadeDisconnectCallback callback);
  void SetIoCapability(hci::IoCapability io_capability);
  void SetAuthenticationRequirements(hci::AuthenticationRequirements authentication_requirements);
  void SetOobDataPresent(hci::OobDataPresent data_present);
@@ -241,6 +243,7 @@ class SecurityManagerImpl : public channel::ISecurityManagerChannelListener, pub
  std::optional<hci::AddressWithType> remote_oob_data_address_;
  std::optional<crypto_toolbox::Octet16> remote_oob_data_le_sc_c_;
  std::optional<crypto_toolbox::Octet16> remote_oob_data_le_sc_r_;
  std::optional<FacadeDisconnectCallback> facade_disconnect_callback_;

  std::unordered_map<
      hci::AddressWithType,