diff --git a/src/core/meshcop/border_agent.cpp b/src/core/meshcop/border_agent.cpp index 022ceb5f2..01190fd16 100644 --- a/src/core/meshcop/border_agent.cpp +++ b/src/core/meshcop/border_agent.cpp @@ -687,30 +687,47 @@ void Manager::CoapDtlsSession::HandleLeaderResponseToFwdTmf(const ForwardContext forwardMessage.Reset(NewPriorityMessage()); VerifyOrExit(forwardMessage != nullptr, error = kErrorNoBufs); - if ((aForwardContext.mUri == kUriLeaderPetition) && (aResponse->GetCode() == Coap::kCodeChanged)) + if (aResponse->GetCode() == Coap::kCodeChanged) { uint8_t state; SuccessOrExit(error = Tlv::Find(*aResponse, state)); - if (state == StateTlv::kAccept) + switch (state) { - uint16_t sessionId; + case StateTlv::kAccept: + if (aForwardContext.mUri == kUriLeaderPetition) + { + uint16_t sessionId; - SuccessOrExit(error = Tlv::Find(*aResponse, sessionId)); + SuccessOrExit(error = Tlv::Find(*aResponse, sessionId)); - Get().GetCommissionerAloc(sessionId, mCommissionerAloc.GetAddress()); - Get().AddUnicastAddress(mCommissionerAloc); - IgnoreError(Get().AddReceiver(mUdpReceiver)); - mIsActiveCommissioner = true; - Get().HandleCommissionerPetitionAccepted(*this); + Get().GetCommissionerAloc(sessionId, mCommissionerAloc.GetAddress()); + Get().AddUnicastAddress(mCommissionerAloc); + IgnoreError(Get().AddReceiver(mUdpReceiver)); + mIsActiveCommissioner = true; + Get().HandleCommissionerPetitionAccepted(*this); - LogInfo("Commissioner accepted - SessionId:%u ALOC:%s", sessionId, - mCommissionerAloc.GetAddress().ToString().AsCString()); - } - else - { + LogInfo("Commissioner accepted - SessionId:%u ALOC:%s", sessionId, + mCommissionerAloc.GetAddress().ToString().AsCString()); + } + + break; + + case StateTlv::kReject: LogInfo("Commissioner rejected"); + + if (mIsActiveCommissioner) + { + IgnoreError(Get().RemoveReceiver(mUdpReceiver)); + Get().RemoveUnicastAddress(mCommissionerAloc); + mIsActiveCommissioner = false; + } + + break; + + default: + break; } }