diff --git a/src/core/meshcop/leader.cpp b/src/core/meshcop/leader.cpp index 38b3bf790..517ea3d20 100644 --- a/src/core/meshcop/leader.cpp +++ b/src/core/meshcop/leader.cpp @@ -181,8 +181,7 @@ void Leader::HandleKeepAlive(Coap::Header &aHeader, Message &aMessage, const Ip6 { responseState = StateTlv::kReject; mTimer.Stop(); - mNetworkData.SetCommissioningData(NULL, 0); - otLogInfoMeshCoP("commissioner inactive"); + ResignCommissioner(); } else { @@ -267,12 +266,24 @@ void Leader::HandleTimer(void) { VerifyOrExit(mNetif.GetMle().GetDeviceState() == Mle::kDeviceStateLeader, ;); - otLogInfoMeshCoP("commissioner inactive"); - mNetworkData.SetCommissioningData(NULL, 0); + ResignCommissioner(); exit: return; } +void Leader::ResignCommissioner(void) +{ + CommissionerSessionIdTlv mCommissionerSessionId; + + mCommissionerSessionId.Init(); + mCommissionerSessionId.SetCommissionerSessionId(++mSessionId); + + mNetworkData.SetCommissioningData(reinterpret_cast(&mCommissionerSessionId), + sizeof(Tlv) + mCommissionerSessionId.GetLength()); + + otLogInfoMeshCoP("commissioner inactive"); +} + } // namespace MeshCoP } // namespace Thread diff --git a/src/core/meshcop/leader_ftd.hpp b/src/core/meshcop/leader_ftd.hpp index c234045dc..00d35d04c 100644 --- a/src/core/meshcop/leader_ftd.hpp +++ b/src/core/meshcop/leader_ftd.hpp @@ -104,6 +104,8 @@ private: static void HandleUdpReceive(void *aContext, otMessage aMessage, const otMessageInfo *aMessageInfo); + void ResignCommissioner(void); + Coap::Resource mPetition; Coap::Resource mKeepAlive; Coap::Server &mCoapServer;