diff --git a/src/inet/InetInterface.cpp b/src/inet/InetInterface.cpp index e6125a14508066..5d0eb3aa94243f 100644 --- a/src/inet/InetInterface.cpp +++ b/src/inet/InetInterface.cpp @@ -57,6 +57,10 @@ #include #endif // CHIP_SYSTEM_CONFIG_USE_ZEPHYR_NET_IF +#if CHIP_SYSTEM_CONFIG_USE_OPEN_THREAD_ENDPOINT +#include +#endif + #include #include @@ -105,15 +109,31 @@ bool InterfaceIterator::Next() // TODO : Cleanup #17346 return false; } + +InterfaceAddressIterator::InterfaceAddressIterator() +{ + mNetifAddrList = nullptr; + mCurAddr = nullptr; +} + bool InterfaceAddressIterator::HasCurrent() { - return mIntfIter.HasCurrent(); + return (mNetifAddrList != nullptr) ? (mCurAddr != nullptr) : Next(); } bool InterfaceAddressIterator::Next() { - // TODO : Cleanup #17346 - return false; + if (mNetifAddrList == nullptr) + { + mNetifAddrList = otIp6GetUnicastAddresses(Inet::globalOtInstance); + mCurAddr = mNetifAddrList; + } + else if (mCurAddr != nullptr) + { + mCurAddr = mCurAddr->mNext; + } + + return (mCurAddr != nullptr); } CHIP_ERROR InterfaceAddressIterator::GetAddress(IPAddress & outIPAddress) { @@ -122,7 +142,7 @@ CHIP_ERROR InterfaceAddressIterator::GetAddress(IPAddress & outIPAddress) return CHIP_ERROR_SENTINEL; } - outIPAddress = IPAddress((*(mAddrInfoList[mCurAddrIndex].mAddress))); + outIPAddress = IPAddress(mCurAddr->mAddress); return CHIP_NO_ERROR; } diff --git a/src/inet/InetInterface.h b/src/inet/InetInterface.h index e0a3ac1aaba725..d87c1080b89e6c 100644 --- a/src/inet/InetInterface.h +++ b/src/inet/InetInterface.h @@ -540,15 +540,13 @@ class DLL_EXPORT InterfaceAddressIterator int mCurAddrIndex = -1; #endif // CHIP_SYSTEM_CONFIG_USE_ZEPHYR_NET_IF #if CHIP_SYSTEM_CONFIG_USE_OPEN_THREAD_ENDPOINT - otIp6AddressInfo * mAddrInfoList; - int mCurAddrIndex; - InterfaceIterator mIntfIter; + const otNetifAddress * mNetifAddrList; + const otNetifAddress * mCurAddr; #endif // #if CHIP_SYSTEM_CONFIG_USE_OPEN_THREAD_ENDPOINT }; #if CHIP_SYSTEM_CONFIG_USE_OPEN_THREAD_ENDPOINT inline InterfaceIterator::InterfaceIterator(void) {} -inline InterfaceAddressIterator::InterfaceAddressIterator(void) {} inline InterfaceIterator::~InterfaceIterator() = default; inline InterfaceAddressIterator::~InterfaceAddressIterator() = default; inline bool InterfaceIterator::HasCurrent(void) diff --git a/src/inet/UDPEndPointImplOpenThread.cpp b/src/inet/UDPEndPointImplOpenThread.cpp index 2887f2f0997b21..5fe066cfb3dcf7 100644 --- a/src/inet/UDPEndPointImplOpenThread.cpp +++ b/src/inet/UDPEndPointImplOpenThread.cpp @@ -30,6 +30,8 @@ namespace chip { namespace Inet { +otInstance * globalOtInstance; + void UDPEndPointImplOT::handleUdpReceive(void * aContext, otMessage * aMessage, const otMessageInfo * aMessageInfo) { UDPEndPointImplOT * ep = static_cast(aContext); @@ -169,6 +171,12 @@ void UDPEndPointImplOT::HandleDataReceived(System::PacketBufferHandle && msg) } } +void UDPEndPointImplOT::SetNativeParams(void * params) +{ + mOTInstance = static_cast(params); + globalOtInstance = mOTInstance; +} + CHIP_ERROR UDPEndPointImplOT::SetMulticastLoopback(IPVersion aIPVersion, bool aLoopback) { (void) aIPVersion; diff --git a/src/inet/UDPEndPointImplOpenThread.h b/src/inet/UDPEndPointImplOpenThread.h index f1ad4eaf0451fc..b566c4187695d3 100644 --- a/src/inet/UDPEndPointImplOpenThread.h +++ b/src/inet/UDPEndPointImplOpenThread.h @@ -32,6 +32,8 @@ namespace chip { namespace Inet { +extern otInstance * globalOtInstance; + class UDPEndPointImplOT : public UDPEndPoint, public EndPointStateOpenThread { public: @@ -44,7 +46,7 @@ class UDPEndPointImplOT : public UDPEndPoint, public EndPointStateOpenThread uint16_t GetBoundPort() const override; void Free() override; void HandleDataReceived(System::PacketBufferHandle && msg); - inline void SetNativeParams(void * params) { mOTInstance = static_cast(params); } + void SetNativeParams(void * params); CHIP_ERROR SetMulticastLoopback(IPVersion aIPVersion, bool aLoopback) override; CHIP_ERROR BindInterfaceImpl(IPAddressType addressType, InterfaceId interfaceId) override;