diff options
author | Treehugger Robot <treehugger-gerrit@google.com> | 2021-11-01 23:07:27 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2021-11-01 23:07:27 +0000 |
commit | 780d48f40c0b5d0da4248d0a03f1aa6786b4581f (patch) | |
tree | 34c50d240245fbe412c9b456085a8adc1e9d57cf | |
parent | d7d50c190772c4f9a498b1b65f653e3425b64f31 (diff) | |
parent | fba7baf2d4107efdf0c2cde17ecdd844f2294920 (diff) | |
download | bt-780d48f40c0b5d0da4248d0a03f1aa6786b4581f.tar.gz |
Merge "Add SupportsBlePrivacy for gd privacy policy"
-rw-r--r-- | gd/hci/acl_manager/le_impl.h | 7 | ||||
-rw-r--r-- | gd/hci/le_address_manager.cc | 9 | ||||
-rw-r--r-- | gd/hci/le_address_manager.h | 5 |
3 files changed, 19 insertions, 2 deletions
diff --git a/gd/hci/acl_manager/le_impl.h b/gd/hci/acl_manager/le_impl.h index 6fb1de337..f251f7ce7 100644 --- a/gd/hci/acl_manager/le_impl.h +++ b/gd/hci/acl_manager/le_impl.h @@ -636,7 +636,12 @@ struct le_impl : public bluetooth::hci::LeAddressManagerCallback { std::chrono::milliseconds minimum_rotation_time, std::chrono::milliseconds maximum_rotation_time) { le_address_manager_->SetPrivacyPolicyForInitiatorAddress( - address_policy, fixed_address, rotation_irk, minimum_rotation_time, maximum_rotation_time); + address_policy, + fixed_address, + rotation_irk, + controller_->SupportsBlePrivacy(), + minimum_rotation_time, + maximum_rotation_time); } // TODO(jpawlowski): remove once we have config file abstraction in cert tests diff --git a/gd/hci/le_address_manager.cc b/gd/hci/le_address_manager.cc index c7600c511..c8b3ec655 100644 --- a/gd/hci/le_address_manager.cc +++ b/gd/hci/le_address_manager.cc @@ -48,12 +48,14 @@ void LeAddressManager::SetPrivacyPolicyForInitiatorAddress( AddressPolicy address_policy, AddressWithType fixed_address, crypto_toolbox::Octet16 rotation_irk, + bool supports_ble_privacy, std::chrono::milliseconds minimum_rotation_time, std::chrono::milliseconds maximum_rotation_time) { ASSERT(address_policy_ == AddressPolicy::POLICY_NOT_SET); ASSERT(address_policy != AddressPolicy::POLICY_NOT_SET); ASSERT_LOG(registered_clients_.empty(), "Policy must be set before clients are registered."); address_policy_ = address_policy; + supports_ble_privacy_ = supports_ble_privacy; LOG_INFO("SetPrivacyPolicyForInitiatorAddress with policy %d", address_policy); switch (address_policy_) { @@ -391,6 +393,13 @@ void LeAddressManager::AddDeviceToResolvingList( Command command = {CommandType::ADD_DEVICE_TO_RESOLVING_LIST, std::move(packet_builder)}; cached_commands_.push(std::move(command)); + if (supports_ble_privacy_) { + auto packet_builder = + hci::LeSetPrivacyModeBuilder::Create(peer_identity_address_type, peer_identity_address, PrivacyMode::DEVICE); + Command command = {CommandType::LE_SET_PRIVACY_MODE, std::move(packet_builder)}; + cached_commands_.push(std::move(command)); + } + // Enable Address resolution auto enable_builder = hci::LeSetAddressResolutionEnableBuilder::Create(hci::Enable::ENABLED); Command enable = {CommandType::SET_ADDRESS_RESOLUTION_ENABLE, std::move(enable_builder)}; diff --git a/gd/hci/le_address_manager.h b/gd/hci/le_address_manager.h index 9b54f0ee8..8aaa11f1f 100644 --- a/gd/hci/le_address_manager.h +++ b/gd/hci/le_address_manager.h @@ -57,6 +57,7 @@ class LeAddressManager { AddressPolicy address_policy, AddressWithType fixed_address, crypto_toolbox::Octet16 rotation_irk, + bool supports_ble_privacy, std::chrono::milliseconds minimum_rotation_time, std::chrono::milliseconds maximum_rotation_time); // TODO(jpawlowski): remove once we have config file abstraction in cert tests @@ -105,7 +106,8 @@ class LeAddressManager { ADD_DEVICE_TO_RESOLVING_LIST, REMOVE_DEVICE_FROM_RESOLVING_LIST, CLEAR_RESOLVING_LIST, - SET_ADDRESS_RESOLUTION_ENABLE + SET_ADDRESS_RESOLUTION_ENABLE, + LE_SET_PRIVACY_MODE }; struct Command { @@ -144,6 +146,7 @@ class LeAddressManager { uint8_t connect_list_size_; uint8_t resolving_list_size_; std::queue<Command> cached_commands_; + bool supports_ble_privacy_{false}; }; } // namespace hci |