mirror of
https://github.com/espressif/openthread.git
synced 2026-08-26 20:19:53 +00:00
[meshcop] fix handling commissioner keep alive (#2907)
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user