From 1dfa50876fd5346df912567427b49551b97d3534 Mon Sep 17 00:00:00 2001 From: Shu Chen Date: Thu, 24 Nov 2016 23:40:44 +0800 Subject: [PATCH] Increment the Commissioner Session ID when the Leader resigns an active Commissioner (#1010) --- src/core/meshcop/leader.cpp | 19 +++++++++++++++---- src/core/meshcop/leader_ftd.hpp | 2 ++ 2 files changed, 17 insertions(+), 4 deletions(-) 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;