From 771904b7079d7e729c6599d145ee204137aa5c27 Mon Sep 17 00:00:00 2001 From: Guogang Li Date: Thu, 17 Jul 2025 10:57:51 -0700 Subject: [PATCH] Make Wi-Fi LAN and AWDL could coexist PiperOrigin-RevId: 784242267 --- connections/implementation/awdl_bwu_handler.cc | 4 +++- connections/implementation/mediums/awdl.cc | 14 ++++++++++---- .../apple/Mediums/WiFiCommon/GNCNWFramework.h | 3 --- .../apple/Mediums/WiFiCommon/GNCNWFramework.m | 15 --------------- internal/platform/implementation/apple/awdl.h | 2 +- internal/platform/implementation/apple/awdl.mm | 2 +- internal/platform/implementation/apple/wifi_lan.h | 2 +- .../platform/implementation/apple/wifi_lan.mm | 3 +-- 8 files changed, 17 insertions(+), 28 deletions(-) diff --git a/connections/implementation/awdl_bwu_handler.cc b/connections/implementation/awdl_bwu_handler.cc index bb832ec5..2441fb21 100644 --- a/connections/implementation/awdl_bwu_handler.cc +++ b/connections/implementation/awdl_bwu_handler.cc @@ -50,6 +50,7 @@ constexpr absl::Duration kAwdlDiscoveryTimeout = absl::Seconds(5); constexpr int kServiceNameLength = 8; constexpr int kPasswordLength = 16; constexpr absl::string_view kPskIdentity = "AwdlUpgradeMedium"; +constexpr absl::string_view kAwdlServiceIdSuffixForServiceType = "_AWDL"; } // namespace AwdlBwuHandler::AwdlBwuHandler( @@ -205,7 +206,8 @@ ByteArray AwdlBwuHandler::HandleInitializeUpgradedMediumForEndpoint( // Need to advertise the service. nsd_service_info_ = NsdServiceInfo(); nsd_service_info_.SetServiceName(GenerateServiceName()); - nsd_service_info_.SetServiceType(GenerateServiceType(upgrade_service_id)); + nsd_service_info_.SetServiceType(GenerateServiceType( + absl::StrCat(upgrade_service_id, kAwdlServiceIdSuffixForServiceType))); if (!awdl_medium_.StartAdvertising(upgrade_service_id, nsd_service_info_)) { LOG(ERROR) << "Failed to initiate the AWDL upgrade for " diff --git a/connections/implementation/mediums/awdl.cc b/connections/implementation/mediums/awdl.cc index 3f72b9c5..d4559228 100644 --- a/connections/implementation/mediums/awdl.cc +++ b/connections/implementation/mediums/awdl.cc @@ -22,6 +22,7 @@ #include "absl/strings/str_cat.h" #include "absl/strings/str_format.h" +#include "absl/strings/string_view.h" #include "connections/implementation/mediums/multiplex/multiplex_socket.h" #include "connections/implementation/mediums/utils.h" #include "connections/medium_selector.h" @@ -41,10 +42,12 @@ namespace nearby { namespace connections { - namespace { + using MultiplexSocket = mediums::multiplex::MultiplexSocket; using location::nearby::proto::connections::OperationResultCode; +constexpr absl::string_view kAwdlServiceIdSuffixForServiceType = "_AWDL"; + } // namespace Awdl::~Awdl() { @@ -104,7 +107,8 @@ ErrorOr Awdl::StartAdvertising(const std::string& service_id, CLIENT_DUPLICATE_ACCEPTING_LAN_CONNECTION_REQUEST)}; } - nsd_service_info.SetServiceType(GenerateServiceType(service_id)); + nsd_service_info.SetServiceType(GenerateServiceType( + absl::StrCat(service_id, kAwdlServiceIdSuffixForServiceType))); const auto& it = server_sockets_.find(service_id); if (it != server_sockets_.end()) { nsd_service_info.SetIPAddress(it->second.GetIPAddress()); @@ -175,7 +179,8 @@ ErrorOr Awdl::StartDiscovery(const std::string& service_id, return {Error(OperationResultCode::CLIENT_WIFI_LAN_DUPLICATE_DISCOVERING)}; } - std::string service_type = GenerateServiceType(service_id); + std::string service_type = GenerateServiceType( + absl::StrCat(service_id, kAwdlServiceIdSuffixForServiceType)); bool ret = medium_.StartDiscovery(service_id, service_type, std::move(callback)); if (!ret) { @@ -199,7 +204,8 @@ bool Awdl::StopDiscovery(const std::string& service_id) { return false; } - std::string service_type = GenerateServiceType(service_id); + std::string service_type = GenerateServiceType( + absl::StrCat(service_id, kAwdlServiceIdSuffixForServiceType)); LOG(INFO) << "Turned off Awdl discovering with service_id=" << service_id << ", service_type=" << service_type; bool ret = medium_.StopDiscovery(service_type); diff --git a/internal/platform/implementation/apple/Mediums/WiFiCommon/GNCNWFramework.h b/internal/platform/implementation/apple/Mediums/WiFiCommon/GNCNWFramework.h index c8a80f39..ffa47398 100644 --- a/internal/platform/implementation/apple/Mediums/WiFiCommon/GNCNWFramework.h +++ b/internal/platform/implementation/apple/Mediums/WiFiCommon/GNCNWFramework.h @@ -33,9 +33,6 @@ typedef void (^ServiceUpdateHandler)(NSString *_Nonnull serviceName, /** Whether to include peer-to-peer services. */ @property(atomic, readonly) BOOL includePeerToPeer; -/** The shared instance of the @c GNCNWFramework object. */ -+ (nonnull instancetype)sharedInstance; - /** * Listens for incoming connections on a given port. * diff --git a/internal/platform/implementation/apple/Mediums/WiFiCommon/GNCNWFramework.m b/internal/platform/implementation/apple/Mediums/WiFiCommon/GNCNWFramework.m index 4501d237..5d61477b 100644 --- a/internal/platform/implementation/apple/Mediums/WiFiCommon/GNCNWFramework.m +++ b/internal/platform/implementation/apple/Mediums/WiFiCommon/GNCNWFramework.m @@ -99,21 +99,6 @@ NSDictionary *GNCTXTRecordForBrowseResult(nw_browse_resu return self; } -static GNCNWFramework *gInstance = nil; - -+ (GNCNWFramework *)sharedInstance { - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - @synchronized([GNCNWFramework class]) { - if (!gInstance) { - gInstance = [[self alloc] init]; - } - } - }); - - return gInstance; -} - - (BOOL)isListeningForAnyService { return _serverSockets.count > 0; } diff --git a/internal/platform/implementation/apple/awdl.h b/internal/platform/implementation/apple/awdl.h index 0cc8004e..20b89814 100644 --- a/internal/platform/implementation/apple/awdl.h +++ b/internal/platform/implementation/apple/awdl.h @@ -99,7 +99,7 @@ class AwdlServerSocket : public api::AwdlServerSocket { */ class AwdlMedium : public api::AwdlMedium { public: - explicit AwdlMedium(bool include_peer_to_peer = false); + AwdlMedium(); ~AwdlMedium() override = default; AwdlMedium(const AwdlMedium&) = delete; diff --git a/internal/platform/implementation/apple/awdl.mm b/internal/platform/implementation/apple/awdl.mm index f4c90863..9d778cf0 100644 --- a/internal/platform/implementation/apple/awdl.mm +++ b/internal/platform/implementation/apple/awdl.mm @@ -122,7 +122,7 @@ Exception AwdlServerSocket::Close() { #pragma mark - AwdlMedium -AwdlMedium::AwdlMedium(bool include_peer_to_peer) : medium_([GNCNWFramework sharedInstance]) {} +AwdlMedium::AwdlMedium() { medium_ = [[GNCNWFramework alloc] init]; } bool AwdlMedium::StartAdvertising(const NsdServiceInfo& nsd_service_info) { return network_utils::StartAdvertising(medium_, nsd_service_info); diff --git a/internal/platform/implementation/apple/wifi_lan.h b/internal/platform/implementation/apple/wifi_lan.h index b8cd9f28..b37db3e5 100644 --- a/internal/platform/implementation/apple/wifi_lan.h +++ b/internal/platform/implementation/apple/wifi_lan.h @@ -102,7 +102,7 @@ class WifiLanServerSocket : public api::WifiLanServerSocket { */ class WifiLanMedium : public api::WifiLanMedium { public: - explicit WifiLanMedium(bool include_peer_to_peer = false); + WifiLanMedium(); ~WifiLanMedium() override = default; WifiLanMedium(const WifiLanMedium&) = delete; diff --git a/internal/platform/implementation/apple/wifi_lan.mm b/internal/platform/implementation/apple/wifi_lan.mm index e48245f4..fb9c7c8e 100644 --- a/internal/platform/implementation/apple/wifi_lan.mm +++ b/internal/platform/implementation/apple/wifi_lan.mm @@ -122,8 +122,7 @@ Exception WifiLanServerSocket::Close() { #pragma mark - WifiLanMedium -WifiLanMedium::WifiLanMedium(bool include_peer_to_peer) - : medium_([GNCNWFramework sharedInstance]) {} +WifiLanMedium::WifiLanMedium() { medium_ = [[GNCNWFramework alloc] init]; } bool WifiLanMedium::StartAdvertising(const NsdServiceInfo& nsd_service_info) { return network_utils::StartAdvertising(medium_, nsd_service_info);