From 1569644b145c4c0dde918d015a23ccdba111a9a0 Mon Sep 17 00:00:00 2001 From: Zang MingJie Date: Wed, 3 Nov 2021 05:22:21 +0800 Subject: [PATCH] InetLayer/SystemLayer use C++11 singleton patter instead of global variable (#11184) * InetLayer/SystemLayer use C++11 singleton patter instead of global variable * Add mock for SystemLayer * Remove NDEBUG guard --- examples/all-clusters-app/esp32/main/main.cpp | 2 +- .../chip-tool/commands/discover/Commands.h | 2 +- examples/minimal-mdns/advertiser.cpp | 2 +- examples/minimal-mdns/client.cpp | 2 +- examples/minimal-mdns/server.cpp | 2 +- examples/shell/shell_common/cmd_ping.cpp | 4 +- examples/shell/shell_common/cmd_send.cpp | 4 +- src/app/server/Dnssd.cpp | 4 +- src/app/server/Server.cpp | 4 +- .../tests/integration/chip_im_initiator.cpp | 2 +- .../tests/integration/chip_im_responder.cpp | 2 +- .../AbstractDnssdDiscoveryController.cpp | 2 +- .../CHIPDeviceControllerFactory.cpp | 2 +- .../java/CHIPDeviceController-JNI.cpp | 2 +- .../python/chip/discovery/NodeResolution.cpp | 2 +- src/include/platform/CHIPDeviceLayer.h | 25 +++--------- .../internal/GenericPlatformManagerImpl.cpp | 15 ++----- src/lib/dnssd/platform/tests/TestPlatform.cpp | 6 +-- src/lib/shell/commands/Dns.cpp | 2 +- src/messaging/tests/echo/echo_requester.cpp | 4 +- src/messaging/tests/echo/echo_responder.cpp | 4 +- src/platform/Globals.cpp | 39 ++++++++++++++++--- 22 files changed, 71 insertions(+), 62 deletions(-) diff --git a/examples/all-clusters-app/esp32/main/main.cpp b/examples/all-clusters-app/esp32/main/main.cpp index 573245f2dd7bbb..df04e343603201 100644 --- a/examples/all-clusters-app/esp32/main/main.cpp +++ b/examples/all-clusters-app/esp32/main/main.cpp @@ -365,7 +365,7 @@ class MdnsDebugListModel : public ActionListModel private: void DoReinit() { - CHIP_ERROR err = Dnssd::ServiceAdvertiser::Instance().Init(&DeviceLayer::InetLayer); + CHIP_ERROR err = Dnssd::ServiceAdvertiser::Instance().Init(&DeviceLayer::InetLayer()); if (err != CHIP_NO_ERROR) { ESP_LOGE(TAG, "Error initializing: %s", err.AsString()); diff --git a/examples/chip-tool/commands/discover/Commands.h b/examples/chip-tool/commands/discover/Commands.h index 271479a5bf4d92..697750fb052408 100644 --- a/examples/chip-tool/commands/discover/Commands.h +++ b/examples/chip-tool/commands/discover/Commands.h @@ -32,7 +32,7 @@ class Resolve : public DiscoverCommand, public chip::Dnssd::ResolverDelegate /////////// DiscoverCommand Interface ///////// CHIP_ERROR RunCommand(NodeId remoteId, uint64_t fabricId) override { - ReturnErrorOnFailure(chip::Dnssd::Resolver::Instance().Init(&chip::DeviceLayer::InetLayer)); + ReturnErrorOnFailure(chip::Dnssd::Resolver::Instance().Init(&chip::DeviceLayer::InetLayer())); chip::Dnssd::Resolver::Instance().SetResolverDelegate(this); ChipLogProgress(chipTool, "Dnssd: Searching for NodeId: %" PRIx64 " FabricId: %" PRIx64 " ...", remoteId, fabricId); return chip::Dnssd::Resolver::Instance().ResolveNodeId(chip::PeerId().SetNodeId(remoteId).SetCompressedFabricId(fabricId), diff --git a/examples/minimal-mdns/advertiser.cpp b/examples/minimal-mdns/advertiser.cpp index 7da92e833c59a3..ff267044ac39f8 100644 --- a/examples/minimal-mdns/advertiser.cpp +++ b/examples/minimal-mdns/advertiser.cpp @@ -255,7 +255,7 @@ int main(int argc, char ** args) return 1; } - if (chip::Dnssd::ServiceAdvertiser::Instance().Init(&DeviceLayer::InetLayer) != CHIP_NO_ERROR) + if (chip::Dnssd::ServiceAdvertiser::Instance().Init(&DeviceLayer::InetLayer()) != CHIP_NO_ERROR) { fprintf(stderr, "FAILED to start MDNS advertisement\n"); return 1; diff --git a/examples/minimal-mdns/client.cpp b/examples/minimal-mdns/client.cpp index b9a43808b22dd3..2788d813dc9c17 100644 --- a/examples/minimal-mdns/client.cpp +++ b/examples/minimal-mdns/client.cpp @@ -317,7 +317,7 @@ int main(int argc, char ** args) MdnsExample::AllInterfaces allInterfaces(gOptions.enableIpV4); - err = mdnsServer.Listen(&chip::DeviceLayer::InetLayer, &allInterfaces, gOptions.listenPort); + err = mdnsServer.Listen(&chip::DeviceLayer::InetLayer(), &allInterfaces, gOptions.listenPort); if (err != CHIP_NO_ERROR) { printf("Server failed to listen on all interfaces: %s\n", chip::ErrorStr(err)); diff --git a/examples/minimal-mdns/server.cpp b/examples/minimal-mdns/server.cpp index 380b4cdc234d89..8ea5cda16ec028 100644 --- a/examples/minimal-mdns/server.cpp +++ b/examples/minimal-mdns/server.cpp @@ -252,7 +252,7 @@ int main(int argc, char ** args) { MdnsExample::AllInterfaces allInterfaces(gOptions.enableIpV4); - if (mdnsServer.Listen(&DeviceLayer::InetLayer, &allInterfaces, gOptions.listenPort) != CHIP_NO_ERROR) + if (mdnsServer.Listen(&DeviceLayer::InetLayer(), &allInterfaces, gOptions.listenPort) != CHIP_NO_ERROR) { printf("Server failed to listen on all interfaces\n"); return 1; diff --git a/examples/shell/shell_common/cmd_ping.cpp b/examples/shell/shell_common/cmd_ping.cpp index 232c3ac7e3f1c0..4bda418cc559ed 100644 --- a/examples/shell/shell_common/cmd_ping.cpp +++ b/examples/shell/shell_common/cmd_ping.cpp @@ -292,13 +292,13 @@ void StartPinging(streamer_t * stream, char * destination) } #if INET_CONFIG_ENABLE_TCP_ENDPOINT - err = gTCPManager.Init(Transport::TcpListenParameters(&DeviceLayer::InetLayer) + err = gTCPManager.Init(Transport::TcpListenParameters(&DeviceLayer::InetLayer()) .SetAddressType(gDestAddr.Type()) .SetListenPort(gPingArguments.GetEchoPort() + 1)); VerifyOrExit(err == CHIP_NO_ERROR, streamer_printf(stream, "Failed to init TCP manager error: %s\n", ErrorStr(err))); #endif - err = gUDPManager.Init(Transport::UdpListenParameters(&DeviceLayer::InetLayer) + err = gUDPManager.Init(Transport::UdpListenParameters(&DeviceLayer::InetLayer()) .SetAddressType(gDestAddr.Type()) .SetListenPort(gPingArguments.GetEchoPort() + 1)); VerifyOrExit(err == CHIP_NO_ERROR, streamer_printf(stream, "Failed to init UDP manager error: %s\n", ErrorStr(err))); diff --git a/examples/shell/shell_common/cmd_send.cpp b/examples/shell/shell_common/cmd_send.cpp index fee138b2b3a43c..4f7f62ec614623 100644 --- a/examples/shell/shell_common/cmd_send.cpp +++ b/examples/shell/shell_common/cmd_send.cpp @@ -210,13 +210,13 @@ void ProcessCommand(streamer_t * stream, char * destination) } #if INET_CONFIG_ENABLE_TCP_ENDPOINT - err = gTCPManager.Init(Transport::TcpListenParameters(&DeviceLayer::InetLayer) + err = gTCPManager.Init(Transport::TcpListenParameters(&DeviceLayer::InetLayer()) .SetAddressType(gDestAddr.Type()) .SetListenPort(gSendArguments.GetPort() + 1)); VerifyOrExit(err == CHIP_NO_ERROR, streamer_printf(stream, "Failed to init TCP manager error: %s\n", ErrorStr(err))); #endif - err = gUDPManager.Init(Transport::UdpListenParameters(&DeviceLayer::InetLayer) + err = gUDPManager.Init(Transport::UdpListenParameters(&DeviceLayer::InetLayer()) .SetAddressType(gDestAddr.Type()) .SetListenPort(gSendArguments.GetPort() + 1)); VerifyOrExit(err == CHIP_NO_ERROR, streamer_printf(stream, "Failed to init UDP manager error: %s\n", ErrorStr(err))); diff --git a/src/app/server/Dnssd.cpp b/src/app/server/Dnssd.cpp index d41d2df282113d..6b03caddabe3b3 100644 --- a/src/app/server/Dnssd.cpp +++ b/src/app/server/Dnssd.cpp @@ -140,7 +140,7 @@ bool DnssdServer::OnExpiration(uint64_t expirationMs) ChipLogDetail(Discovery, "OnExpiration - valid time out"); - CHIP_ERROR err = Dnssd::ServiceAdvertiser::Instance().Init(&chip::DeviceLayer::InetLayer); + CHIP_ERROR err = Dnssd::ServiceAdvertiser::Instance().Init(&chip::DeviceLayer::InetLayer()); if (err != CHIP_NO_ERROR) { ChipLogError(Discovery, "Failed to initialize advertiser: %s", chip::ErrorStr(err)); @@ -410,7 +410,7 @@ void DnssdServer::StartServer(chip::Dnssd::CommissioningMode mode) DeviceLayer::PlatformMgr().AddEventHandler(OnPlatformEventWrapper, 0); - CHIP_ERROR err = Dnssd::ServiceAdvertiser::Instance().Init(&chip::DeviceLayer::InetLayer); + CHIP_ERROR err = Dnssd::ServiceAdvertiser::Instance().Init(&chip::DeviceLayer::InetLayer()); if (err != CHIP_NO_ERROR) { ChipLogError(Discovery, "Failed to initialize advertiser: %s", chip::ErrorStr(err)); diff --git a/src/app/server/Server.cpp b/src/app/server/Server.cpp index 7896091831d0bc..8c773388f7c2e9 100644 --- a/src/app/server/Server.cpp +++ b/src/app/server/Server.cpp @@ -96,11 +96,11 @@ CHIP_ERROR Server::Init(AppDelegate * delegate, uint16_t secureServicePort, uint // Init transport before operations with secure session mgr. err = mTransports.Init( - UdpListenParameters(&DeviceLayer::InetLayer).SetAddressType(IPAddressType::kIPv6).SetListenPort(mSecuredServicePort) + UdpListenParameters(&DeviceLayer::InetLayer()).SetAddressType(IPAddressType::kIPv6).SetListenPort(mSecuredServicePort) #if INET_CONFIG_ENABLE_IPV4 , - UdpListenParameters(&DeviceLayer::InetLayer).SetAddressType(IPAddressType::kIPv4).SetListenPort(mSecuredServicePort) + UdpListenParameters(&DeviceLayer::InetLayer()).SetAddressType(IPAddressType::kIPv4).SetListenPort(mSecuredServicePort) #endif #if CONFIG_NETWORK_LAYER_BLE , diff --git a/src/app/tests/integration/chip_im_initiator.cpp b/src/app/tests/integration/chip_im_initiator.cpp index 2aba011b7c2dbf..2bf9bc9ecb8bf8 100644 --- a/src/app/tests/integration/chip_im_initiator.cpp +++ b/src/app/tests/integration/chip_im_initiator.cpp @@ -682,7 +682,7 @@ int main(int argc, char * argv[]) InitializeChip(); - err = gTransportManager.Init(chip::Transport::UdpListenParameters(&chip::DeviceLayer::InetLayer) + err = gTransportManager.Init(chip::Transport::UdpListenParameters(&chip::DeviceLayer::InetLayer()) .SetAddressType(chip::Inet::IPAddressType::kIPv6) .SetListenPort(IM_CLIENT_PORT)); SuccessOrExit(err); diff --git a/src/app/tests/integration/chip_im_responder.cpp b/src/app/tests/integration/chip_im_responder.cpp index d369ed373479f9..c805e15b9a41a4 100644 --- a/src/app/tests/integration/chip_im_responder.cpp +++ b/src/app/tests/integration/chip_im_responder.cpp @@ -212,7 +212,7 @@ int main(int argc, char * argv[]) InitializeChip(); err = gTransportManager.Init( - chip::Transport::UdpListenParameters(&chip::DeviceLayer::InetLayer).SetAddressType(chip::Inet::IPAddressType::kIPv6)); + chip::Transport::UdpListenParameters(&chip::DeviceLayer::InetLayer()).SetAddressType(chip::Inet::IPAddressType::kIPv6)); SuccessOrExit(err); err = gSessionManager.Init(&chip::DeviceLayer::SystemLayer(), &gTransportManager, &gMessageCounterManager); diff --git a/src/controller/AbstractDnssdDiscoveryController.cpp b/src/controller/AbstractDnssdDiscoveryController.cpp index 3dae05dcfd4b65..8d34292df1bb02 100644 --- a/src/controller/AbstractDnssdDiscoveryController.cpp +++ b/src/controller/AbstractDnssdDiscoveryController.cpp @@ -67,7 +67,7 @@ void AbstractDnssdDiscoveryController::OnNodeDiscoveryComplete(const chip::Dnssd CHIP_ERROR AbstractDnssdDiscoveryController::SetUpNodeDiscovery() { #if CONFIG_DEVICE_LAYER - ReturnErrorOnFailure(mResolver->Init(&DeviceLayer::InetLayer)); + ReturnErrorOnFailure(mResolver->Init(&DeviceLayer::InetLayer())); #endif mResolver->SetResolverDelegate(this); diff --git a/src/controller/CHIPDeviceControllerFactory.cpp b/src/controller/CHIPDeviceControllerFactory.cpp index a15c5940b186c9..7dd6f78c818ea5 100644 --- a/src/controller/CHIPDeviceControllerFactory.cpp +++ b/src/controller/CHIPDeviceControllerFactory.cpp @@ -91,7 +91,7 @@ CHIP_ERROR DeviceControllerFactory::InitSystemState(FactoryInitParams params) ReturnErrorOnFailure(DeviceLayer::PlatformMgr().InitChipStack()); stateParams.systemLayer = &DeviceLayer::SystemLayer(); - stateParams.inetLayer = &DeviceLayer::InetLayer; + stateParams.inetLayer = &DeviceLayer::InetLayer(); #else stateParams.systemLayer = params.systemLayer; stateParams.inetLayer = params.inetLayer; diff --git a/src/controller/java/CHIPDeviceController-JNI.cpp b/src/controller/java/CHIPDeviceController-JNI.cpp index 4d087beff445f0..2909979d339e9e 100644 --- a/src/controller/java/CHIPDeviceController-JNI.cpp +++ b/src/controller/java/CHIPDeviceController-JNI.cpp @@ -151,7 +151,7 @@ JNI_METHOD(jlong, newDeviceController)(JNIEnv * env, jobject self) SuccessOrExit(err); wrapper = AndroidDeviceControllerWrapper::AllocateNew(sJVM, self, kLocalDeviceId, &DeviceLayer::SystemLayer(), - &DeviceLayer::InetLayer, &err); + &DeviceLayer::InetLayer(), &err); SuccessOrExit(err); // Create and start the IO thread. Must be called after Controller()->Init diff --git a/src/controller/python/chip/discovery/NodeResolution.cpp b/src/controller/python/chip/discovery/NodeResolution.cpp index 84f621f82f2472..b36ad6d3033d28 100644 --- a/src/controller/python/chip/discovery/NodeResolution.cpp +++ b/src/controller/python/chip/discovery/NodeResolution.cpp @@ -93,7 +93,7 @@ extern "C" ChipError::StorageType pychip_discovery_resolve(uint64_t fabricId, ui CHIP_ERROR result = CHIP_NO_ERROR; chip::python::ChipMainThreadScheduleAndWait([&] { - result = Resolver::Instance().Init(&chip::DeviceLayer::InetLayer); + result = Resolver::Instance().Init(&chip::DeviceLayer::InetLayer()); ReturnOnFailure(result); Resolver::Instance().SetResolverDelegate(&gPythonResolverDelegate); diff --git a/src/include/platform/CHIPDeviceLayer.h b/src/include/platform/CHIPDeviceLayer.h index 73453f0bf77640..a03bbbcac48edc 100644 --- a/src/include/platform/CHIPDeviceLayer.h +++ b/src/include/platform/CHIPDeviceLayer.h @@ -23,6 +23,7 @@ #if !CHIP_DEVICE_LAYER_NONE #include +#include #include #include #include @@ -42,30 +43,16 @@ namespace chip { namespace DeviceLayer { -namespace Internal { -extern chip::System::Layer * gSystemLayer; -} // namespace Internal +void SetSystemLayerForTesting(System::LayerImpl * layer); -struct ChipDeviceEvent; -extern Inet::InetLayer InetLayer; - -inline chip::System::Layer & SystemLayer() -{ - return *Internal::gSystemLayer; -} +// These functions are defined in src/platform/Globals.cpp +chip::Inet::InetLayer & InetLayer(); +chip::System::Layer & SystemLayer(); #if CHIP_SYSTEM_CONFIG_USE_SOCKETS -inline chip::System::LayerSockets & SystemLayerSockets() -{ - return *static_cast(Internal::gSystemLayer); -} +chip::System::LayerSockets & SystemLayerSockets(); #endif // CHIP_SYSTEM_CONFIG_USE_SOCKETS -inline void SetSystemLayerForTesting(System::Layer * layer) -{ - Internal::gSystemLayer = layer; -} - } // namespace DeviceLayer } // namespace chip diff --git a/src/include/platform/internal/GenericPlatformManagerImpl.cpp b/src/include/platform/internal/GenericPlatformManagerImpl.cpp index e3eaa0ad623b3c..a54e36baa6be1b 100644 --- a/src/include/platform/internal/GenericPlatformManagerImpl.cpp +++ b/src/include/platform/internal/GenericPlatformManagerImpl.cpp @@ -42,9 +42,6 @@ namespace DeviceLayer { namespace Internal { -extern chip::System::Layer * gSystemLayer; -extern chip::System::LayerImpl gSystemLayerImpl; - extern CHIP_ERROR InitEntropy(); template @@ -75,11 +72,7 @@ CHIP_ERROR GenericPlatformManagerImpl::_InitChipStack() SuccessOrExit(err); // Initialize the CHIP system layer. - if (gSystemLayer == nullptr) - { - gSystemLayer = &gSystemLayerImpl; - } - err = gSystemLayer->Init(); + err = SystemLayer().Init(); if (err != CHIP_NO_ERROR) { ChipLogError(DeviceLayer, "SystemLayer initialization failed: %s", ErrorStr(err)); @@ -87,7 +80,7 @@ CHIP_ERROR GenericPlatformManagerImpl::_InitChipStack() SuccessOrExit(err); // Initialize the CHIP Inet layer. - err = InetLayer.Init(*gSystemLayer, nullptr); + err = InetLayer().Init(SystemLayer(), nullptr); if (err != CHIP_NO_ERROR) { ChipLogError(DeviceLayer, "InetLayer initialization failed: %s", ErrorStr(err)); @@ -137,7 +130,7 @@ CHIP_ERROR GenericPlatformManagerImpl::_Shutdown() { CHIP_ERROR err; ChipLogError(DeviceLayer, "Inet Layer shutdown"); - err = InetLayer.Shutdown(); + err = InetLayer().Shutdown(); #if CHIP_DEVICE_CONFIG_ENABLE_CHIPOBLE ChipLogError(DeviceLayer, "BLE layer shutdown"); @@ -145,7 +138,7 @@ CHIP_ERROR GenericPlatformManagerImpl::_Shutdown() #endif ChipLogError(DeviceLayer, "System Layer shutdown"); - err = gSystemLayer->Shutdown(); + err = SystemLayer().Shutdown(); return err; } diff --git a/src/lib/dnssd/platform/tests/TestPlatform.cpp b/src/lib/dnssd/platform/tests/TestPlatform.cpp index 325c470349106f..bb65565d37a150 100644 --- a/src/lib/dnssd/platform/tests/TestPlatform.cpp +++ b/src/lib/dnssd/platform/tests/TestPlatform.cpp @@ -157,7 +157,7 @@ void TestStub(nlTestSuite * inSuite, void * inContext) // without an expected event. ChipLogError(Discovery, "Test platform returns error correctly"); DiscoveryImplPlatform & mdnsPlatform = DiscoveryImplPlatform::GetInstance(); - NL_TEST_ASSERT(inSuite, mdnsPlatform.Init(&DeviceLayer::InetLayer) == CHIP_NO_ERROR); + NL_TEST_ASSERT(inSuite, mdnsPlatform.Init(&DeviceLayer::InetLayer()) == CHIP_NO_ERROR); NL_TEST_ASSERT(inSuite, mdnsPlatform.RemoveServices() == CHIP_NO_ERROR); OperationalAdvertisingParameters params; NL_TEST_ASSERT(inSuite, mdnsPlatform.Advertise(params) == CHIP_ERROR_UNEXPECTED_EVENT); @@ -168,7 +168,7 @@ void TestOperational(nlTestSuite * inSuite, void * inContext) ChipLogError(Discovery, "Test operational"); test::Reset(); DiscoveryImplPlatform & mdnsPlatform = DiscoveryImplPlatform::GetInstance(); - NL_TEST_ASSERT(inSuite, mdnsPlatform.Init(&DeviceLayer::InetLayer) == CHIP_NO_ERROR); + NL_TEST_ASSERT(inSuite, mdnsPlatform.Init(&DeviceLayer::InetLayer()) == CHIP_NO_ERROR); NL_TEST_ASSERT(inSuite, mdnsPlatform.RemoveServices() == CHIP_NO_ERROR); operationalCall1.callType = test::CallType::kStart; @@ -189,7 +189,7 @@ void TestCommissionableNode(nlTestSuite * inSuite, void * inContext) ChipLogError(Discovery, "Test commissionable"); test::Reset(); DiscoveryImplPlatform & mdnsPlatform = DiscoveryImplPlatform::GetInstance(); - NL_TEST_ASSERT(inSuite, mdnsPlatform.Init(&DeviceLayer::InetLayer) == CHIP_NO_ERROR); + NL_TEST_ASSERT(inSuite, mdnsPlatform.Init(&DeviceLayer::InetLayer()) == CHIP_NO_ERROR); NL_TEST_ASSERT(inSuite, mdnsPlatform.RemoveServices() == CHIP_NO_ERROR); commissionableSmall.callType = test::CallType::kStart; diff --git a/src/lib/shell/commands/Dns.cpp b/src/lib/shell/commands/Dns.cpp index 0cc91037c95409..baa9012255a37f 100644 --- a/src/lib/shell/commands/Dns.cpp +++ b/src/lib/shell/commands/Dns.cpp @@ -218,7 +218,7 @@ CHIP_ERROR DnsHandler(int argc, char ** argv) return CHIP_NO_ERROR; } - Dnssd::Resolver::Instance().Init(&DeviceLayer::InetLayer); + Dnssd::Resolver::Instance().Init(&DeviceLayer::InetLayer()); Dnssd::Resolver::Instance().SetResolverDelegate(&sDnsShellResolverDelegate); return sShellDnsSubcommands.ExecCommand(argc, argv); diff --git a/src/messaging/tests/echo/echo_requester.cpp b/src/messaging/tests/echo/echo_requester.cpp index 7e4b2bed43fa43..b6e960bea54d79 100644 --- a/src/messaging/tests/echo/echo_requester.cpp +++ b/src/messaging/tests/echo/echo_requester.cpp @@ -228,7 +228,7 @@ int main(int argc, char * argv[]) if (gUseTCP) { - err = gTCPManager.Init(chip::Transport::TcpListenParameters(&chip::DeviceLayer::InetLayer) + err = gTCPManager.Init(chip::Transport::TcpListenParameters(&chip::DeviceLayer::InetLayer()) .SetAddressType(chip::Inet::IPAddressType::kIPv6) .SetListenPort(ECHO_CLIENT_PORT)); SuccessOrExit(err); @@ -238,7 +238,7 @@ int main(int argc, char * argv[]) } else { - err = gUDPManager.Init(chip::Transport::UdpListenParameters(&chip::DeviceLayer::InetLayer) + err = gUDPManager.Init(chip::Transport::UdpListenParameters(&chip::DeviceLayer::InetLayer()) .SetAddressType(chip::Inet::IPAddressType::kIPv6) .SetListenPort(ECHO_CLIENT_PORT)); SuccessOrExit(err); diff --git a/src/messaging/tests/echo/echo_responder.cpp b/src/messaging/tests/echo/echo_responder.cpp index 1e00a5b2acaf6e..ec3634c2b2b861 100644 --- a/src/messaging/tests/echo/echo_responder.cpp +++ b/src/messaging/tests/echo/echo_responder.cpp @@ -83,7 +83,7 @@ int main(int argc, char * argv[]) if (useTCP) { - err = gTCPManager.Init(chip::Transport::TcpListenParameters(&chip::DeviceLayer::InetLayer) + err = gTCPManager.Init(chip::Transport::TcpListenParameters(&chip::DeviceLayer::InetLayer()) #if INET_CONFIG_ENABLE_IPV4 .SetAddressType(chip::Inet::IPAddressType::kIPv4) #else @@ -98,7 +98,7 @@ int main(int argc, char * argv[]) else { err = gUDPManager.Init( - chip::Transport::UdpListenParameters(&chip::DeviceLayer::InetLayer).SetAddressType(chip::Inet::IPAddressType::kIPv6)); + chip::Transport::UdpListenParameters(&chip::DeviceLayer::InetLayer()).SetAddressType(chip::Inet::IPAddressType::kIPv6)); SuccessOrExit(err); err = gSessionManager.Init(&chip::DeviceLayer::SystemLayer(), &gUDPManager, &gMessageCounterManager); diff --git a/src/platform/Globals.cpp b/src/platform/Globals.cpp index 3f727becf5195d..0b6e806b3e253e 100644 --- a/src/platform/Globals.cpp +++ b/src/platform/Globals.cpp @@ -25,14 +25,43 @@ namespace chip { namespace DeviceLayer { -chip::Inet::InetLayer InetLayer; +chip::Inet::InetLayer & InetLayer() +{ + static chip::Inet::InetLayer gInetLayer; + return gInetLayer; +} -namespace Internal { +chip::System::LayerImpl * gMockedSystemLayer = nullptr; -chip::System::Layer * gSystemLayer = nullptr; -chip::System::LayerImpl gSystemLayerImpl; -const char * const TAG = "CHIP[DL]"; +void SetSystemLayerForTesting(System::LayerImpl * layer) +{ + gMockedSystemLayer = layer; +} + +chip::System::LayerImpl & SystemLayerImpl() +{ + if (gMockedSystemLayer != nullptr) + return *gMockedSystemLayer; + + static chip::System::LayerImpl gSystemLayerImpl; + return gSystemLayerImpl; +} + +chip::System::Layer & SystemLayer() +{ + return SystemLayerImpl(); +} +#if CHIP_SYSTEM_CONFIG_USE_SOCKETS +chip::System::LayerSockets & SystemLayerSockets() +{ + return SystemLayerImpl(); +} +#endif // CHIP_SYSTEM_CONFIG_USE_SOCKETS + +namespace Internal { +const char * const TAG = "CHIP[DL]"; } // namespace Internal + } // namespace DeviceLayer } // namespace chip