[meshcop] fix handling commissioner keep alive (#2907)

This commit is contained in:
Yakun Xu
2018-07-20 10:47:35 -05:00
committed by Jonathan Hui
parent 7586509525
commit d50e3713c3
2 changed files with 29 additions and 11 deletions
+27 -10
View File
@@ -209,9 +209,9 @@ void BorderAgent::HandleRequest<&BorderAgent::mCommissionerKeepAlive>(void *
otMessage * aMessage,
const otMessageInfo *aMessageInfo)
{
static_cast<BorderAgent *>(aContext)->ForwardToLeader(
*static_cast<Coap::Header *>(aHeader), *static_cast<Message *>(aMessage),
*static_cast<const Ip6::MessageInfo *>(aMessageInfo), OT_URI_PATH_LEADER_KEEP_ALIVE, true);
static_cast<BorderAgent *>(aContext)->HandleKeepAlive(*static_cast<Coap::Header *>(aHeader),
*static_cast<Message *>(aMessage),
*static_cast<const Ip6::MessageInfo *>(aMessageInfo));
}
template <>
@@ -272,7 +272,7 @@ void BorderAgent::HandleRelayReceive(const Coap::Header &aHeader, const Message
}
SuccessOrExit(ForwardToCommissioner(header, aMessage));
otLogInfoMeshCoP(GetInstance(), "Sent to leader on %s", OT_URI_PATH_RELAY_RX);
otLogInfoMeshCoP(GetInstance(), "Sent to commissioner on %s", OT_URI_PATH_RELAY_RX);
exit:
return;
@@ -308,6 +308,20 @@ exit:
return error;
}
void BorderAgent::HandleKeepAlive(const Coap::Header & aHeader,
const Message & aMessage,
const Ip6::MessageInfo &aMessageInfo)
{
otError error;
error = ForwardToLeader(aHeader, aMessage, aMessageInfo, OT_URI_PATH_LEADER_KEEP_ALIVE, true);
if (error == OT_ERROR_NONE)
{
mTimer.Start(kKeepAliveTimeout);
}
}
void BorderAgent::HandleRelayTransmit(const Coap::Header &aHeader, const Message &aMessage)
{
ThreadNetif & netif = GetNetif();
@@ -357,11 +371,11 @@ exit:
}
}
void BorderAgent::ForwardToLeader(const Coap::Header & aHeader,
const Message & aMessage,
const Ip6::MessageInfo &aMessageInfo,
const char * aPath,
bool aSeparate)
otError BorderAgent::ForwardToLeader(const Coap::Header & aHeader,
const Message & aMessage,
const Ip6::MessageInfo &aMessageInfo,
const char * aPath,
bool aSeparate)
{
ThreadNetif & netif = GetNetif();
otError error = OT_ERROR_NONE;
@@ -397,7 +411,7 @@ void BorderAgent::ForwardToLeader(const Coap::Header & aHeader,
SuccessOrExit(error = message->SetLength(offset + aMessage.GetLength() - aMessage.GetOffset()));
aMessage.CopyTo(aMessage.GetOffset(), offset, aMessage.GetLength() - aMessage.GetOffset(), *message);
SuccessOrExit(netif.GetMle().GetLeaderAloc(messageInfo.GetPeerAddr()));
SuccessOrExit(error = netif.GetMle().GetLeaderAloc(messageInfo.GetPeerAddr()));
messageInfo.SetPeerPort(kCoapUdpPort);
messageInfo.SetSockAddr(netif.GetMle().GetMeshLocal16());
messageInfo.SetSockPort(kCoapUdpPort);
@@ -413,6 +427,7 @@ exit:
if (error != OT_ERROR_NONE)
{
otLogWarnMeshCoP(GetInstance(), "Failed to forward to leader: %s", otThreadErrorToString(error));
if (forwardContext != NULL)
{
GetInstance().GetHeap().Free(forwardContext);
@@ -437,6 +452,8 @@ exit:
SendErrorMessage(header);
}
return error;
}
void BorderAgent::HandleConnected(bool aConnected)
+2 -1
View File
@@ -102,12 +102,13 @@ private:
otError aResult);
void SendErrorMessage(const Coap::Header &aHeader);
void ForwardToLeader(const Coap::Header & aHeader,
otError ForwardToLeader(const Coap::Header & aHeader,
const Message & aMessage,
const Ip6::MessageInfo &aMessageInfo,
const char * aPath,
bool aSeparate);
otError ForwardToCommissioner(const Coap::Header &aHeader, const Message &aMessage);
void HandleKeepAlive(const Coap::Header &aHeader, const Message &aMessage, const Ip6::MessageInfo &aMessageInfo);
void HandleRelayTransmit(const Coap::Header &aHeader, const Message &aMessage);
void HandleRelayReceive(const Coap::Header &aHeader, const Message &aMessage);