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

Commit acf58f75 authored by Rahul Arya's avatar Rahul Arya
Browse files

Add RotatingAddress() method to le_address_manager

This fixes an issue where we sent the LeMultiAdvtSetRandomAddr
command even when using a static address type.

Bug: 268112598
Test: unit
Change-Id: I51da3a2ce4f215e14f2f0f86a378211839f98407
parent 80c922dc
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -152,7 +152,10 @@ void LeAddressManager::SetPrivacyPolicyForInitiatorAddressForTest(
LeAddressManager::AddressPolicy LeAddressManager::GetAddressPolicy() {
  return address_policy_;
}

bool LeAddressManager::RotatingAddress() {
  return address_policy_ == AddressPolicy::USE_RESOLVABLE_ADDRESS ||
         address_policy_ == AddressPolicy::USE_NON_RESOLVABLE_ADDRESS;
}
LeAddressManager::AddressPolicy LeAddressManager::Register(LeAddressManagerCallback* callback) {
  handler_->BindOnceOn(this, &LeAddressManager::register_client, callback).Invoke();
  return address_policy_;
+1 −0
Original line number Diff line number Diff line
@@ -72,6 +72,7 @@ class LeAddressManager {
      std::chrono::milliseconds minimum_rotation_time,
      std::chrono::milliseconds maximum_rotation_time);
  AddressPolicy GetAddressPolicy();
  bool RotatingAddress();
  virtual void AckPause(LeAddressManagerCallback* callback);
  virtual void AckResume(LeAddressManagerCallback* callback);
  virtual AddressPolicy Register(LeAddressManagerCallback* callback);
+4 −10
Original line number Diff line number Diff line
@@ -314,9 +314,7 @@ struct LeAdvertisingManager::impl : public bluetooth::hci::LeAddressManagerCallb

    switch (advertising_api_type_) {
      case (AdvertisingApiType::LEGACY): {
        auto address_policy = le_address_manager_->GetAddressPolicy();
        if (address_policy == LeAddressManager::AddressPolicy::USE_NON_RESOLVABLE_ADDRESS ||
            address_policy == LeAddressManager::AddressPolicy::USE_RESOLVABLE_ADDRESS) {
        if (le_address_manager_->RotatingAddress()) {
          advertising_sets_[id].current_address = le_address_manager_->GetAnotherAddress();
        } else {
          advertising_sets_[id].current_address = le_address_manager_->GetCurrentAddress();
@@ -334,9 +332,7 @@ struct LeAdvertisingManager::impl : public bluetooth::hci::LeAddressManagerCallb
        }
      } break;
      case (AdvertisingApiType::ANDROID_HCI): {
        auto address_policy = le_address_manager_->GetAddressPolicy();
        if (address_policy == LeAddressManager::AddressPolicy::USE_NON_RESOLVABLE_ADDRESS ||
            address_policy == LeAddressManager::AddressPolicy::USE_RESOLVABLE_ADDRESS) {
        if (le_address_manager_->RotatingAddress()) {
          advertising_sets_[id].current_address = le_address_manager_->GetAnotherAddress();
        } else {
          advertising_sets_[id].current_address = le_address_manager_->GetCurrentAddress();
@@ -347,7 +343,7 @@ struct LeAdvertisingManager::impl : public bluetooth::hci::LeAddressManagerCallb
          set_data(id, true, config.scan_response);
        }
        set_data(id, false, config.advertisement);
        if (address_policy != LeAddressManager::AddressPolicy::USE_PUBLIC_ADDRESS) {
        if (le_address_manager_->RotatingAddress()) {
          le_advertising_interface_->EnqueueCommand(
              hci::LeMultiAdvtSetRandomAddrBuilder::Create(advertising_sets_[id].current_address.GetAddress(), id),
              module_handler_->BindOnce(impl::check_status<LeMultiAdvtCompleteView>));
@@ -415,11 +411,9 @@ struct LeAdvertisingManager::impl : public bluetooth::hci::LeAddressManagerCallb
    advertising_sets_[id].max_extended_advertising_events = max_ext_adv_events;
    advertising_sets_[id].handler = handler;

    auto address_policy = le_address_manager_->GetAddressPolicy();
    switch (config.requested_advertiser_address_type) {
      case AdvertiserAddressType::RESOLVABLE_RANDOM:
        if (address_policy == LeAddressManager::AddressPolicy::USE_NON_RESOLVABLE_ADDRESS ||
            address_policy == LeAddressManager::AddressPolicy::USE_RESOLVABLE_ADDRESS) {
        if (le_address_manager_->RotatingAddress()) {
          advertising_sets_[id].current_address = le_address_manager_->GetAnotherAddress();
          set_parameters(id, config);
          le_advertising_interface_->EnqueueCommand(
+1 −0
Original line number Diff line number Diff line
@@ -292,6 +292,7 @@ class LeAndroidHciAdvertisingManagerTest : public LeAdvertisingManagerTest {
  void SetUp() override {
    param_opcode_ = OpCode::LE_MULTI_ADVT;
    LeAdvertisingManagerTest::SetUp();
    test_acl_manager_->SetAddressPolicy(LeAddressManager::AddressPolicy::USE_RESOLVABLE_ADDRESS);
  }
};