diff --git a/connections/implementation/mediums/ble_v2.cc b/connections/implementation/mediums/ble_v2.cc index 75e60714..7fd32c50 100644 --- a/connections/implementation/mediums/ble_v2.cc +++ b/connections/implementation/mediums/ble_v2.cc @@ -231,6 +231,12 @@ bool BleV2::IsAdvertising(const std::string& service_id) const { return IsAdvertisingLocked(service_id); } +bool BleV2::IsAdvertisingForLegacyDevice(const std::string& service_id) const { + MutexLock lock(&mutex_); + + return IsAdvertisingForLegacyDeviceLocked(service_id); +} + bool BleV2::StartLegacyAdvertising( const std::string& input_service_id, const std::string& local_endpoint_id, const std::string& fast_advertisement_service_uuid) { @@ -621,6 +627,11 @@ bool BleV2::IsAdvertisingLocked(const std::string& service_id) const { return advertising_infos_.contains(service_id); } +bool BleV2::IsAdvertisingForLegacyDeviceLocked( + const std::string& service_id) const { + return service_ids_to_advertising_sessions_.contains(service_id + "-Legacy"); +} + bool BleV2::IsScanningLocked(const std::string& service_id) const { if (FeatureFlags::GetInstance() .GetFlags() diff --git a/connections/implementation/mediums/ble_v2.h b/connections/implementation/mediums/ble_v2.h index 1b6017f7..e580d6f4 100644 --- a/connections/implementation/mediums/ble_v2.h +++ b/connections/implementation/mediums/ble_v2.h @@ -78,6 +78,9 @@ class BleV2 final { bool IsAdvertising(const std::string& service_id) const ABSL_LOCKS_EXCLUDED(mutex_); + bool IsAdvertisingForLegacyDevice(const std::string& service_id) const + ABSL_LOCKS_EXCLUDED(mutex_); + // Use dummy bytes to do ble advertising, only for legacy devices. // Returns true, if data is successfully set, and false otherwise. bool StartLegacyAdvertising( @@ -150,6 +153,11 @@ class BleV2 final { bool IsAdvertisingLocked(const std::string& service_id) const ABSL_EXCLUSIVE_LOCKS_REQUIRED(mutex_); + // Same as IsAdvertisingForLegacyDevice(), but must be called with `mutex_` + // held. + bool IsAdvertisingForLegacyDeviceLocked(const std::string& service_id) const + ABSL_EXCLUSIVE_LOCKS_REQUIRED(mutex_); + // Same as IsScanning(), but must be called with `mutex_` held. bool IsScanningLocked(const std::string& service_id) const ABSL_EXCLUSIVE_LOCKS_REQUIRED(mutex_); diff --git a/connections/implementation/mediums/ble_v2_test.cc b/connections/implementation/mediums/ble_v2_test.cc index 96c9f5a0..58ba3845 100644 --- a/connections/implementation/mediums/ble_v2_test.cc +++ b/connections/implementation/mediums/ble_v2_test.cc @@ -592,7 +592,9 @@ TEST_F(BleV2Test, CanStartAndStopLegacyAdvertising) { ble_a.StartLegacyAdvertising(service_id, std::string(kLocalEndpointId), std::string(kFastAdvertisementServiceUuid))); EXPECT_FALSE(ble_a.IsAdvertising(service_id)); + EXPECT_TRUE(ble_a.IsAdvertisingForLegacyDevice(service_id)); EXPECT_TRUE(ble_a.StopLegacyAdvertising(service_id)); + EXPECT_FALSE(ble_a.IsAdvertisingForLegacyDevice(service_id)); env_.Stop(); } @@ -607,6 +609,7 @@ TEST_F(BleV2Test, CanNotStartLegacyAdvertisingWhenRadioNotEnabled) { EXPECT_FALSE( ble_a.StartLegacyAdvertising(service_id, std::string(kLocalEndpointId), std::string(kFastAdvertisementServiceUuid))); + EXPECT_FALSE(ble_a.IsAdvertisingForLegacyDevice(service_id)); env_.Stop(); } @@ -618,11 +621,14 @@ TEST_F(BleV2Test, CanNotStopLegacyAdvertisingForNonExistingServiceId) { BleV2 ble_a{radio_a}; radio_a.Enable(); std::string service_id(kServiceIDA); + EXPECT_FALSE(ble_a.IsAdvertisingForLegacyDevice(service_id)); EXPECT_FALSE(ble_a.StopLegacyAdvertising(service_id)); EXPECT_TRUE( ble_a.StartLegacyAdvertising(service_id, std::string(kLocalEndpointId), std::string(kFastAdvertisementServiceUuid))); + EXPECT_TRUE(ble_a.IsAdvertisingForLegacyDevice(service_id)); EXPECT_TRUE(ble_a.StopLegacyAdvertising(service_id)); + EXPECT_FALSE(ble_a.IsAdvertisingForLegacyDevice(service_id)); env_.Stop(); } @@ -641,6 +647,7 @@ TEST_F(BleV2Test, StartLegacyAdvertisingBlockedByRegularAdvertising) { EXPECT_FALSE( ble_a.StartLegacyAdvertising(service_id, std::string(kLocalEndpointId), std::string(kFastAdvertisementServiceUuid))); + EXPECT_FALSE(ble_a.IsAdvertisingForLegacyDevice(service_id)); ble_a.StopAdvertising(std::string(kServiceIDA)); env_.Stop(); } @@ -651,13 +658,16 @@ TEST_F(BleV2Test, DuplicateStartLegacyAdvertisingReturnsFalse) { BleV2 ble_a{radio_a}; radio_a.Enable(); std::string service_id(kServiceIDA); + EXPECT_FALSE(ble_a.IsAdvertisingForLegacyDevice(service_id)); EXPECT_TRUE( ble_a.StartLegacyAdvertising(service_id, std::string(kLocalEndpointId), std::string(kFastAdvertisementServiceUuid))); + EXPECT_TRUE(ble_a.IsAdvertisingForLegacyDevice(service_id)); EXPECT_FALSE( ble_a.StartLegacyAdvertising(service_id, std::string(kLocalEndpointId), std::string(kFastAdvertisementServiceUuid))); EXPECT_TRUE(ble_a.StopLegacyAdvertising(service_id)); + EXPECT_FALSE(ble_a.IsAdvertisingForLegacyDevice(service_id)); env_.Stop(); } @@ -678,6 +688,7 @@ TEST_F(BleV2Test, HandleLegacyAdvertising) { ble_b.StartLegacyAdvertising(std::string(kServiceIDA), std::string(kLocalEndpointId), std::string(kFastAdvertisementServiceUuid)); + EXPECT_FALSE(ble_a.IsAdvertisingForLegacyDevice(std::string(kServiceIDA))); std::string legacy_service_id("NearbySharing"); EXPECT_TRUE(ble_a.StartScanning( legacy_service_id, PowerLevel::kHighPower,