diff --git a/src/core/meshcop/leader.cpp b/src/core/meshcop/leader.cpp index fd2f4631f..55e7d35c1 100644 --- a/src/core/meshcop/leader.cpp +++ b/src/core/meshcop/leader.cpp @@ -178,8 +178,10 @@ void Leader::HandleKeepAlive(void * aContext, void Leader::HandleKeepAlive(Coap::Header &aHeader, Message &aMessage, const Ip6::MessageInfo &aMessageInfo) { + NetworkData::Leader & netdata = GetNetif().GetNetworkDataLeader(); StateTlv state; CommissionerSessionIdTlv sessionId; + BorderAgentLocatorTlv * borderAgentLocator; StateTlv::State responseState; otLogInfoMeshCoP(GetInstance(), "received keep alive"); @@ -190,7 +192,10 @@ void Leader::HandleKeepAlive(Coap::Header &aHeader, Message &aMessage, const Ip6 SuccessOrExit(Tlv::GetTlv(aMessage, Tlv::kCommissionerSessionId, sizeof(sessionId), sessionId)); VerifyOrExit(sessionId.IsValid()); - if (sessionId.GetCommissionerSessionId() != mSessionId) + borderAgentLocator = + static_cast(netdata.GetCommissioningDataSubTlv(Tlv::kBorderAgentLocator)); + + if ((borderAgentLocator == NULL) || (sessionId.GetCommissionerSessionId() != mSessionId)) { responseState = StateTlv::kReject; } @@ -201,19 +206,11 @@ void Leader::HandleKeepAlive(Coap::Header &aHeader, Message &aMessage, const Ip6 } else { - NetworkData::Leader & netdata = GetNetif().GetNetworkDataLeader(); - BorderAgentLocatorTlv *borderAgentLocator; - uint16_t rloc; - - borderAgentLocator = - static_cast(netdata.GetCommissioningDataSubTlv(Tlv::kBorderAgentLocator)); - assert(borderAgentLocator != NULL); - - rloc = HostSwap16(aMessageInfo.GetPeerAddr().mFields.m16[7]); + uint16_t rloc = HostSwap16(aMessageInfo.GetPeerAddr().mFields.m16[7]); if (borderAgentLocator->GetBorderAgentLocator() != rloc) { - borderAgentLocator->SetBorderAgentLocator(HostSwap16(aMessageInfo.GetPeerAddr().mFields.m16[7])); + borderAgentLocator->SetBorderAgentLocator(rloc); netdata.IncrementVersion(); }