From f976f7e05a66d4f7ea2045ef5785b9025c6a6ce6 Mon Sep 17 00:00:00 2001 From: hai007 Date: Mon, 27 Jan 2025 15:56:28 -0800 Subject: [PATCH] Add Bluetooth Multiplex and WiFiLan Multiplex flags for better control. PiperOrigin-RevId: 720337637 --- connections/implementation/client_proxy.cc | 11 ++++- .../implementation/client_proxy_test.cc | 43 ++++++++++++++++--- .../flags/nearby_connections_feature_flags.h | 6 +++ .../mediums/bluetooth_classic.cc | 9 +++- .../mediums/multiplex/multiplex_socket.cc | 7 ++- connections/implementation/mediums/wifi_lan.h | 5 ++- .../implementation/mediums/wifi_lan_test.cc | 11 +++++ 7 files changed, 81 insertions(+), 11 deletions(-) diff --git a/connections/implementation/client_proxy.cc b/connections/implementation/client_proxy.cc index 96a1c884..dfe04af8 100644 --- a/connections/implementation/client_proxy.cc +++ b/connections/implementation/client_proxy.cc @@ -1221,7 +1221,16 @@ std::int32_t ClientProxy::GetLocalMultiplexSocketBitmask() const { config_package_nearby::nearby_connections_feature:: kEnableMultiplex)) { std::int32_t multiplex_bitmask = - kBtMultiplexEnabled | kWifiLanMultiplexEnabled; + (NearbyFlags::GetInstance().GetBoolFlag( + config_package_nearby::nearby_connections_feature:: + kEnableMultiplexBluetooth) + ? kBtMultiplexEnabled + : 0) | + (NearbyFlags::GetInstance().GetBoolFlag( + config_package_nearby::nearby_connections_feature:: + kEnableMultiplexWifiLan) + ? kWifiLanMultiplexEnabled + : 0); NEARBY_LOGS(INFO) << "ClientProxy [GetLocalMultiplexSocketBitmask]: " << multiplex_bitmask; return multiplex_bitmask; diff --git a/connections/implementation/client_proxy_test.cc b/connections/implementation/client_proxy_test.cc index 150b8c47..3a5425dc 100644 --- a/connections/implementation/client_proxy_test.cc +++ b/connections/implementation/client_proxy_test.cc @@ -1564,18 +1564,43 @@ TEST_F(ClientProxyTest, TestMultiplexSocketBitmask) { NearbyFlags::GetInstance().OverrideBoolFlagValue( config_package_nearby::nearby_connections_feature::kEnableMultiplex, true); - EXPECT_EQ(client1()->GetLocalMultiplexSocketBitmask(), - ClientProxy::kBtMultiplexEnabled | - ClientProxy::kWifiLanMultiplexEnabled); + EXPECT_EQ(client1()->GetLocalMultiplexSocketBitmask(), 0); + NearbyFlags::GetInstance().OverrideBoolFlagValue( + config_package_nearby::nearby_connections_feature:: + kEnableMultiplexBluetooth, + true); + NearbyFlags::GetInstance().OverrideBoolFlagValue( + config_package_nearby::nearby_connections_feature:: + kEnableMultiplexWifiLan, + true); + EXPECT_EQ( + client1()->GetLocalMultiplexSocketBitmask(), + ClientProxy::kBtMultiplexEnabled | ClientProxy::kWifiLanMultiplexEnabled); NearbyFlags::GetInstance().OverrideBoolFlagValue( config_package_nearby::nearby_connections_feature::kEnableMultiplex, false); + NearbyFlags::GetInstance().OverrideBoolFlagValue( + config_package_nearby::nearby_connections_feature:: + kEnableMultiplexBluetooth, + false); + NearbyFlags::GetInstance().OverrideBoolFlagValue( + config_package_nearby::nearby_connections_feature:: + kEnableMultiplexWifiLan, + false); } TEST_F(ClientProxyTest, TestRemoteMultiplexSocketBitmask) { NearbyFlags::GetInstance().OverrideBoolFlagValue( config_package_nearby::nearby_connections_feature::kEnableMultiplex, true); + NearbyFlags::GetInstance().OverrideBoolFlagValue( + config_package_nearby::nearby_connections_feature:: + kEnableMultiplexBluetooth, + true); + NearbyFlags::GetInstance().OverrideBoolFlagValue( + config_package_nearby::nearby_connections_feature:: + kEnableMultiplexWifiLan, + true); Endpoint advertising_endpoint = StartAdvertising(client1(), advertising_connection_listener_); OnAdvertisingConnectionInitiated(client1(), advertising_endpoint); @@ -1593,12 +1618,20 @@ TEST_F(ClientProxyTest, TestRemoteMultiplexSocketBitmask) { EXPECT_TRUE(client1()->IsMultiplexSocketSupported(advertising_endpoint.id, Medium::BLUETOOTH)); EXPECT_TRUE(client1()->IsMultiplexSocketSupported(advertising_endpoint.id, - Medium::WIFI_LAN)); + Medium::WIFI_LAN)); EXPECT_FALSE(client1()->IsMultiplexSocketSupported(advertising_endpoint.id, - Medium::WIFI_AWARE)); + Medium::WIFI_AWARE)); NearbyFlags::GetInstance().OverrideBoolFlagValue( config_package_nearby::nearby_connections_feature::kEnableMultiplex, false); + NearbyFlags::GetInstance().OverrideBoolFlagValue( + config_package_nearby::nearby_connections_feature:: + kEnableMultiplexBluetooth, + false); + NearbyFlags::GetInstance().OverrideBoolFlagValue( + config_package_nearby::nearby_connections_feature:: + kEnableMultiplexWifiLan, + false); } } // namespace diff --git a/connections/implementation/flags/nearby_connections_feature_flags.h b/connections/implementation/flags/nearby_connections_feature_flags.h index dbcb13bf..e1b35d9e 100644 --- a/connections/implementation/flags/nearby_connections_feature_flags.h +++ b/connections/implementation/flags/nearby_connections_feature_flags.h @@ -50,6 +50,12 @@ constexpr auto kEnableInstantOnLost = // When true, enable multiplexing in NC. constexpr auto kEnableMultiplex = flags::Flag(kConfigPackage, "45647946", false); +// When true, enable multiplexing in NC for Bluetooth. +constexpr auto kEnableMultiplexBluetooth = + flags::Flag(kConfigPackage, "45676646", false); +// When true, enable multiplexing in NC for WifiLan. +constexpr auto kEnableMultiplexWifiLan = + flags::Flag(kConfigPackage, "45676647", false); // Enable/Disable payload manager to skip chunk update. constexpr auto kEnablePayloadManagerToSkipChunkUpdate = flags::Flag(kConfigPackage, "45415729", true); diff --git a/connections/implementation/mediums/bluetooth_classic.cc b/connections/implementation/mediums/bluetooth_classic.cc index 594c6607..6f592af7 100644 --- a/connections/implementation/mediums/bluetooth_classic.cc +++ b/connections/implementation/mediums/bluetooth_classic.cc @@ -64,8 +64,13 @@ BluetoothClassic::BluetoothClassic( : radio_(radio), adapter_(radio_.GetBluetoothAdapter()), medium_(std::move(medium)) { - is_multiplex_enabled_ = NearbyFlags::GetInstance().GetBoolFlag( - config_package_nearby::nearby_connections_feature::kEnableMultiplex); + is_multiplex_enabled_ = + NearbyFlags::GetInstance().GetBoolFlag( + config_package_nearby::nearby_connections_feature:: + kEnableMultiplex) && + NearbyFlags::GetInstance().GetBoolFlag( + config_package_nearby::nearby_connections_feature:: + kEnableMultiplexBluetooth); } BluetoothClassic::~BluetoothClassic() { diff --git a/connections/implementation/mediums/multiplex/multiplex_socket.cc b/connections/implementation/mediums/multiplex/multiplex_socket.cc index 7e983980..cb338946 100644 --- a/connections/implementation/mediums/multiplex/multiplex_socket.cc +++ b/connections/implementation/mediums/multiplex/multiplex_socket.cc @@ -148,7 +148,8 @@ MultiplexSocket* MultiplexSocket::CreateIncomingSocket( return multiplex_incoming_socket; } NEARBY_LOGS(INFO) << "CreateIncomingSocket with serviceId=" << service_id - << ", serviceIdHashSalt=" << kFakeSalt; + << ", serviceIdHashSalt=" << kFakeSalt << " for medium=" + << Medium_Name(physical_socket->GetMedium()); multiplex_incoming_socket->CreateFirstVirtualSocket(service_id, (std::string)kFakeSalt); @@ -194,7 +195,9 @@ MultiplexSocket* MultiplexSocket::CreateOutgoingSocket( return multiplex_outgoing_socket; } NEARBY_LOGS(INFO) << "CreateOutgoingSocket with serviceId=" << service_id - << ", serviceIdHashSalt=" << service_id_hash_salt; + << ", serviceIdHashSalt=" << service_id_hash_salt + << " for medium=" + << Medium_Name(physical_socket->GetMedium()); multiplex_outgoing_socket->CreateFirstVirtualSocket(service_id, service_id_hash_salt); diff --git a/connections/implementation/mediums/wifi_lan.h b/connections/implementation/mediums/wifi_lan.h index 32345f28..428a4e83 100644 --- a/connections/implementation/mediums/wifi_lan.h +++ b/connections/implementation/mediums/wifi_lan.h @@ -208,7 +208,10 @@ class WifiLan { // Whether the multiplex feature is enabled. bool is_multiplex_enabled_ = NearbyFlags::GetInstance().GetBoolFlag( - config_package_nearby::nearby_connections_feature::kEnableMultiplex); + config_package_nearby::nearby_connections_feature::kEnableMultiplex) && + NearbyFlags::GetInstance().GetBoolFlag( + config_package_nearby::nearby_connections_feature:: + kEnableMultiplexWifiLan); // A map of IpAddress -> MultiplexSocket. absl::flat_hash_map diff --git a/connections/implementation/mediums/wifi_lan_test.cc b/connections/implementation/mediums/wifi_lan_test.cc index 77b8f59e..679361c5 100644 --- a/connections/implementation/mediums/wifi_lan_test.cc +++ b/connections/implementation/mediums/wifi_lan_test.cc @@ -120,6 +120,13 @@ TEST_P(WifiLanTest, CanConnectWithMultiplex) { NearbyFlags::GetInstance().OverrideBoolFlagValue( config_package_nearby::nearby_connections_feature::kEnableMultiplex, true); + bool is_multiplex_enabled_wifi_lan = NearbyFlags::GetInstance().GetBoolFlag( + config_package_nearby::nearby_connections_feature:: + kEnableMultiplexWifiLan); + NearbyFlags::GetInstance().OverrideBoolFlagValue( + config_package_nearby::nearby_connections_feature:: + kEnableMultiplexWifiLan, + true); FeatureFlags feature_flags = GetParam(); env_.SetFeatureFlags(feature_flags); env_.Start(); @@ -179,6 +186,10 @@ TEST_P(WifiLanTest, CanConnectWithMultiplex) { NearbyFlags::GetInstance().OverrideBoolFlagValue( config_package_nearby::nearby_connections_feature::kEnableMultiplex, is_multiplex_enabled); + NearbyFlags::GetInstance().OverrideBoolFlagValue( + config_package_nearby::nearby_connections_feature:: + kEnableMultiplexWifiLan, + is_multiplex_enabled_wifi_lan); } TEST_P(WifiLanTest, CanCancelConnect) {