From bd161d5750bac6a4ada3215ba3c2e3361cf6da8d Mon Sep 17 00:00:00 2001 From: Shu Chen Date: Wed, 22 Feb 2017 15:15:22 +0800 Subject: [PATCH] Let MTD device could response to MGMT_ACTIVE_GET.req (#1360) --- src/core/meshcop/dataset_manager.cpp | 34 ++++++++++++++++++++++-- src/core/meshcop/dataset_manager.hpp | 14 ++++++++++ src/core/meshcop/dataset_manager_ftd.cpp | 30 --------------------- src/core/meshcop/dataset_manager_ftd.hpp | 10 ------- 4 files changed, 46 insertions(+), 42 deletions(-) diff --git a/src/core/meshcop/dataset_manager.cpp b/src/core/meshcop/dataset_manager.cpp index 8c1b328aa..8db78e6f1 100644 --- a/src/core/meshcop/dataset_manager.cpp +++ b/src/core/meshcop/dataset_manager.cpp @@ -872,8 +872,10 @@ exit: } ActiveDatasetBase::ActiveDatasetBase(ThreadNetif &aThreadNetif): - DatasetManager(aThreadNetif, Tlv::kActiveTimestamp, OPENTHREAD_URI_ACTIVE_SET, OPENTHREAD_URI_ACTIVE_GET) + DatasetManager(aThreadNetif, Tlv::kActiveTimestamp, OPENTHREAD_URI_ACTIVE_SET, OPENTHREAD_URI_ACTIVE_GET), + mResourceGet(OPENTHREAD_URI_ACTIVE_GET, &ActiveDatasetBase::HandleGet, this) { + mNetif.GetCoapServer().AddResource(mResourceGet); } ThreadError ActiveDatasetBase::Restore(void) @@ -940,12 +942,27 @@ exit: return error; } +void ActiveDatasetBase::HandleGet(void *aContext, otCoapHeader *aHeader, otMessage aMessage, + const otMessageInfo *aMessageInfo) +{ + static_cast(aContext)->HandleGet( + *static_cast(aHeader), *static_cast(aMessage), + *static_cast(aMessageInfo)); +} + +void ActiveDatasetBase::HandleGet(Coap::Header &aHeader, Message &aMessage, const Ip6::MessageInfo &aMessageInfo) +{ + DatasetManager::Get(aHeader, aMessage, aMessageInfo); +} + PendingDatasetBase::PendingDatasetBase(ThreadNetif &aThreadNetif): DatasetManager(aThreadNetif, Tlv::kPendingTimestamp, OPENTHREAD_URI_PENDING_SET, OPENTHREAD_URI_PENDING_GET), mTimer(aThreadNetif.GetIp6().mTimerScheduler, &PendingDatasetBase::HandleTimer, this), mLocalTime(0), - mNetworkTime(0) + mNetworkTime(0), + mResourceGet(OPENTHREAD_URI_PENDING_GET, &PendingDatasetBase::HandleGet, this) { + mNetif.GetCoapServer().AddResource(mResourceGet); } ThreadError PendingDatasetBase::Restore(void) @@ -1137,5 +1154,18 @@ void PendingDatasetBase::HandleNetworkUpdate(uint8_t &aFlags) DatasetManager::HandleNetworkUpdate(aFlags); } +void PendingDatasetBase::HandleGet(void *aContext, otCoapHeader *aHeader, otMessage aMessage, + const otMessageInfo *aMessageInfo) +{ + static_cast(aContext)->HandleGet( + *static_cast(aHeader), *static_cast(aMessage), + *static_cast(aMessageInfo)); +} + +void PendingDatasetBase::HandleGet(Coap::Header &aHeader, Message &aMessage, const Ip6::MessageInfo &aMessageInfo) +{ + DatasetManager::Get(aHeader, aMessage, aMessageInfo); +} + } // namespace MeshCoP } // namespace Thread diff --git a/src/core/meshcop/dataset_manager.hpp b/src/core/meshcop/dataset_manager.hpp index 777540f7b..7e2445e83 100644 --- a/src/core/meshcop/dataset_manager.hpp +++ b/src/core/meshcop/dataset_manager.hpp @@ -122,6 +122,13 @@ public: ThreadError Set(const Dataset &aDataset); ThreadError Set(const Timestamp &aTimestamp, const Message &aMessage, uint16_t aOffset, uint8_t aLength); + +private: + static void HandleGet(void *aContext, otCoapHeader *aHeader, otMessage aMessage, + const otMessageInfo *aMessageInfo); + void HandleGet(Coap::Header &aHeader, Message &aMessage, const Ip6::MessageInfo &aMessageInfo); + + Coap::Resource mResourceGet; }; class PendingDatasetBase: public DatasetManager @@ -155,6 +162,13 @@ protected: Timer mTimer; uint32_t mLocalTime; uint32_t mNetworkTime; + +private: + static void HandleGet(void *aContext, otCoapHeader *aHeader, otMessage aMessage, + const otMessageInfo *aMessageInfo); + void HandleGet(Coap::Header &aHeader, Message &aMessage, const Ip6::MessageInfo &aMessageInfo); + + Coap::Resource mResourceGet; }; } // namespace MeshCoP diff --git a/src/core/meshcop/dataset_manager_ftd.cpp b/src/core/meshcop/dataset_manager_ftd.cpp index 2f19cf87c..bcae45e56 100644 --- a/src/core/meshcop/dataset_manager_ftd.cpp +++ b/src/core/meshcop/dataset_manager_ftd.cpp @@ -59,10 +59,8 @@ namespace MeshCoP { ActiveDataset::ActiveDataset(ThreadNetif &aThreadNetif): ActiveDatasetBase(aThreadNetif), - mResourceGet(OPENTHREAD_URI_ACTIVE_GET, &ActiveDataset::HandleGet, this), mResourceSet(OPENTHREAD_URI_ACTIVE_SET, &ActiveDataset::HandleSet, this) { - mNetif.GetCoapServer().AddResource(mResourceGet); } bool ActiveDataset::IsTlvInitialized(Tlv::Type aType) @@ -191,19 +189,6 @@ void ActiveDataset::StopLeader(void) mNetif.GetCoapServer().RemoveResource(mResourceSet); } -void ActiveDataset::HandleGet(void *aContext, otCoapHeader *aHeader, otMessage aMessage, - const otMessageInfo *aMessageInfo) -{ - static_cast(aContext)->HandleGet( - *static_cast(aHeader), *static_cast(aMessage), - *static_cast(aMessageInfo)); -} - -void ActiveDataset::HandleGet(Coap::Header &aHeader, Message &aMessage, const Ip6::MessageInfo &aMessageInfo) -{ - DatasetManager::Get(aHeader, aMessage, aMessageInfo); -} - void ActiveDataset::HandleSet(void *aContext, otCoapHeader *aHeader, otMessage aMessage, const otMessageInfo *aMessageInfo) { @@ -223,10 +208,8 @@ exit: PendingDataset::PendingDataset(ThreadNetif &aThreadNetif): PendingDatasetBase(aThreadNetif), - mResourceGet(OPENTHREAD_URI_PENDING_GET, &PendingDataset::HandleGet, this), mResourceSet(OPENTHREAD_URI_PENDING_SET, &PendingDataset::HandleSet, this) { - mNetif.GetCoapServer().AddResource(mResourceGet); } void PendingDataset::StartLeader(void) @@ -244,19 +227,6 @@ void PendingDataset::StopLeader(void) mNetif.GetCoapServer().RemoveResource(mResourceSet); } -void PendingDataset::HandleGet(void *aContext, otCoapHeader *aHeader, otMessage aMessage, - const otMessageInfo *aMessageInfo) -{ - static_cast(aContext)->HandleGet( - *static_cast(aHeader), *static_cast(aMessage), - *static_cast(aMessageInfo)); -} - -void PendingDataset::HandleGet(Coap::Header &aHeader, Message &aMessage, const Ip6::MessageInfo &aMessageInfo) -{ - DatasetManager::Get(aHeader, aMessage, aMessageInfo); -} - void PendingDataset::HandleSet(void *aContext, otCoapHeader *aHeader, otMessage aMessage, const otMessageInfo *aMessageInfo) { diff --git a/src/core/meshcop/dataset_manager_ftd.hpp b/src/core/meshcop/dataset_manager_ftd.hpp index 8e7efe071..b7fe3833f 100644 --- a/src/core/meshcop/dataset_manager_ftd.hpp +++ b/src/core/meshcop/dataset_manager_ftd.hpp @@ -57,17 +57,12 @@ public: void StopLeader(void); private: - static void HandleGet(void *aContext, otCoapHeader *aHeader, otMessage aMessage, - const otMessageInfo *aMessageInfo); - void HandleGet(Coap::Header &aHeader, Message &aMessage, const Ip6::MessageInfo &aMessageInfo); - static void HandleSet(void *aContext, otCoapHeader *aHeader, otMessage aMessage, const otMessageInfo *aMessageInfo); void HandleSet(Coap::Header &aHeader, Message &aMessage, const Ip6::MessageInfo &aMessageInfo); bool IsTlvInitialized(Tlv::Type aType); - Coap::Resource mResourceGet; Coap::Resource mResourceSet; }; @@ -81,15 +76,10 @@ public: void StopLeader(void); private: - static void HandleGet(void *aContext, otCoapHeader *aHeader, otMessage aMessage, - const otMessageInfo *aMessageInfo); - void HandleGet(Coap::Header &aHeader, Message &aMessage, const Ip6::MessageInfo &aMessageInfo); - static void HandleSet(void *aContext, otCoapHeader *aHeader, otMessage aMessage, const otMessageInfo *aMessageInfo); void HandleSet(Coap::Header &aHeader, Message &aMessage, const Ip6::MessageInfo &aMessageInfo); - Coap::Resource mResourceGet; Coap::Resource mResourceSet; };