From 01fb7ced8551053ac7ff726ee2173ebe00bbefe5 Mon Sep 17 00:00:00 2001 From: Vivien Nicolas Date: Thu, 3 Dec 2020 13:34:31 +0100 Subject: [PATCH] Resurrect 'SetUdpListenPort' on 'ChipDeviceController' --- src/controller/CHIPDevice.cpp | 7 ++++--- src/controller/CHIPDevice.h | 13 ++++++++---- src/controller/CHIPDeviceController.cpp | 27 ++++++++++++++++++------- src/controller/CHIPDeviceController.h | 3 +++ 4 files changed, 36 insertions(+), 14 deletions(-) diff --git a/src/controller/CHIPDevice.cpp b/src/controller/CHIPDevice.cpp index a03bd32e2af137..f1e32bcd04fa8f 100644 --- a/src/controller/CHIPDevice.cpp +++ b/src/controller/CHIPDevice.cpp @@ -217,10 +217,11 @@ CHIP_ERROR Device::LoadSecureSessionParameters(ResetTransport resetNeeded) if (resetNeeded == ResetTransport::kYes) { - err = mTransportMgr->ResetTransport(Transport::UdpListenParameters(mInetLayer).SetAddressType(kIPAddressType_IPv6) + err = mTransportMgr->ResetTransport( + Transport::UdpListenParameters(mInetLayer).SetAddressType(kIPAddressType_IPv6).SetListenPort(mListenPort) #if INET_CONFIG_ENABLE_IPV4 - , - Transport::UdpListenParameters(mInetLayer).SetAddressType(kIPAddressType_IPv4) + , + Transport::UdpListenParameters(mInetLayer).SetAddressType(kIPAddressType_IPv4).SetListenPort(mListenPort) #endif ); SuccessOrExit(err); diff --git a/src/controller/CHIPDevice.h b/src/controller/CHIPDevice.h index 4d78b453dd79cb..a83ea9ee51f797 100644 --- a/src/controller/CHIPDevice.h +++ b/src/controller/CHIPDevice.h @@ -103,12 +103,14 @@ class DLL_EXPORT Device * @param[in] transportMgr Transport manager object pointer * @param[in] sessionMgr Secure session manager object pointer * @param[in] inetLayer InetLayer object pointer + * @param[in] listenPort Port on which controller is listening (typically CHIP_PORT) */ - void Init(DeviceTransportMgr * transportMgr, SecureSessionMgr * sessionMgr, Inet::InetLayer * inetLayer) + void Init(DeviceTransportMgr * transportMgr, SecureSessionMgr * sessionMgr, Inet::InetLayer * inetLayer, uint16_t listenPort) { mTransportMgr = transportMgr; mSessionManager = sessionMgr; mInetLayer = inetLayer; + mListenPort = listenPort; } /** @@ -125,14 +127,15 @@ class DLL_EXPORT Device * @param[in] transportMgr Transport manager object pointer * @param[in] sessionMgr Secure session manager object pointer * @param[in] inetLayer InetLayer object pointer + * @param[in] listenPort Port on which controller is listening (typically CHIP_PORT) * @param[in] deviceId Node ID of the device * @param[in] devicePort Port on which device is listening (typically CHIP_PORT) * @param[in] interfaceId Local Interface ID that should be used to talk to the device */ - void Init(DeviceTransportMgr * transportMgr, SecureSessionMgr * sessionMgr, Inet::InetLayer * inetLayer, NodeId deviceId, - uint16_t devicePort, Inet::InterfaceId interfaceId) + void Init(DeviceTransportMgr * transportMgr, SecureSessionMgr * sessionMgr, Inet::InetLayer * inetLayer, uint16_t listenPort, + NodeId deviceId, uint16_t devicePort, Inet::InterfaceId interfaceId) { - Init(transportMgr, sessionMgr, inetLayer); + Init(transportMgr, sessionMgr, inetLayer, mListenPort); mDeviceId = deviceId; mDevicePort = devicePort; mInterface = interfaceId; @@ -256,6 +259,8 @@ class DLL_EXPORT Device * @param[in] resetNeeded Does the underlying network socket require a reset */ CHIP_ERROR LoadSecureSessionParameters(ResetTransport resetNeeded); + + uint16_t mListenPort; }; /** diff --git a/src/controller/CHIPDeviceController.cpp b/src/controller/CHIPDeviceController.cpp index 5c429e80768913..94504e521d147b 100644 --- a/src/controller/CHIPDeviceController.cpp +++ b/src/controller/CHIPDeviceController.cpp @@ -88,6 +88,7 @@ DeviceController::DeviceController() mLocalDeviceId = 0; mStorageDelegate = nullptr; mPairedDevicesInitialized = false; + mListenPort = CHIP_PORT; } CHIP_ERROR DeviceController::Init(NodeId localDeviceId, PersistentStorageDelegate * storageDelegate, System::Layer * systemLayer, @@ -126,10 +127,11 @@ CHIP_ERROR DeviceController::Init(NodeId localDeviceId, PersistentStorageDelegat mTransportMgr = chip::Platform::New(); mSessionManager = chip::Platform::New(); - err = mTransportMgr->Init(Transport::UdpListenParameters(mInetLayer).SetAddressType(Inet::kIPAddressType_IPv6) + err = mTransportMgr->Init( + Transport::UdpListenParameters(mInetLayer).SetAddressType(Inet::kIPAddressType_IPv6).SetListenPort(mListenPort) #if INET_CONFIG_ENABLE_IPV4 - , - Transport::UdpListenParameters(mInetLayer).SetAddressType(Inet::kIPAddressType_IPv4) + , + Transport::UdpListenParameters(mInetLayer).SetAddressType(Inet::kIPAddressType_IPv4).SetListenPort(mListenPort) #endif ); SuccessOrExit(err); @@ -190,6 +192,17 @@ CHIP_ERROR DeviceController::Shutdown() return err; } +CHIP_ERROR DeviceController::SetUdpListenPort(uint16_t listenPort) +{ + if (mState == State::Initialized) + { + return CHIP_ERROR_INCORRECT_STATE; + } + + mListenPort = listenPort; + return CHIP_NO_ERROR; +} + CHIP_ERROR DeviceController::GetDevice(NodeId deviceId, const SerializedDevice & deviceInfo, Device ** out_device) { CHIP_ERROR err = CHIP_NO_ERROR; @@ -214,7 +227,7 @@ CHIP_ERROR DeviceController::GetDevice(NodeId deviceId, const SerializedDevice & err = device->Deserialize(deviceInfo); VerifyOrExit(err == CHIP_NO_ERROR, ReleaseDevice(device)); - device->Init(mTransportMgr, mSessionManager, mInetLayer); + device->Init(mTransportMgr, mSessionManager, mInetLayer, mListenPort); } *out_device = device; @@ -276,7 +289,7 @@ CHIP_ERROR DeviceController::GetDevice(NodeId deviceId, Device ** out_device) err = device->Deserialize(deviceInfo); VerifyOrExit(err == CHIP_NO_ERROR, ReleaseDevice(device)); - device->Init(mTransportMgr, mSessionManager, mInetLayer); + device->Init(mTransportMgr, mSessionManager, mInetLayer, mListenPort); } } @@ -490,7 +503,7 @@ CHIP_ERROR DeviceCommissioner::PairDevice(NodeId remoteDeviceId, RendezvousParam err = mRendezvousSession->Init(params.SetLocalNodeId(mLocalDeviceId).SetRemoteNodeId(remoteDeviceId), mTransportMgr); SuccessOrExit(err); - device->Init(mTransportMgr, mSessionManager, mInetLayer, remoteDeviceId, remotePort, interfaceId); + device->Init(mTransportMgr, mSessionManager, mInetLayer, mListenPort, remoteDeviceId, remotePort, interfaceId); exit: if (err != CHIP_NO_ERROR) @@ -533,7 +546,7 @@ CHIP_ERROR DeviceCommissioner::PairTestDeviceWithoutSecurity(NodeId remoteDevice testSecurePairingSecret->ToSerializable(device->GetPairing()); - device->Init(mTransportMgr, mSessionManager, mInetLayer, remoteDeviceId, remotePort, interfaceId); + device->Init(mTransportMgr, mSessionManager, mInetLayer, mListenPort, remoteDeviceId, remotePort, interfaceId); device->SetAddress(deviceAddr); diff --git a/src/controller/CHIPDeviceController.h b/src/controller/CHIPDeviceController.h index 3c7050a97de52b..4715e70b1e0e38 100644 --- a/src/controller/CHIPDeviceController.h +++ b/src/controller/CHIPDeviceController.h @@ -146,6 +146,8 @@ class DLL_EXPORT DeviceController : public SecureSessionMgrDelegate, public Pers */ CHIP_ERROR GetDevice(NodeId deviceId, Device ** device); + CHIP_ERROR SetUdpListenPort(uint16_t listenPort); + virtual void ReleaseDevice(Device * device); // ----- IO ----- @@ -188,6 +190,7 @@ class DLL_EXPORT DeviceController : public SecureSessionMgrDelegate, public Pers PersistentStorageDelegate * mStorageDelegate; Inet::InetLayer * mInetLayer; + uint16_t mListenPort; uint16_t GetInactiveDeviceIndex(); uint16_t FindDeviceIndex(NodeId id); void ReleaseDevice(uint16_t index);