mirror of
https://github.com/espressif/openthread.git
synced 2026-09-02 07:10:08 +00:00
Fix few bugs: (#1164)
- Add additional check for ALOC as the destination address of CoAP request messages. - Leader uses RLOC instead of ALOC as source address to response messages.
This commit is contained in:
@@ -309,7 +309,8 @@ Message *Client::FindRelatedRequest(const Header &aResponseHeader, const Ip6::Me
|
||||
aRequestMetadata.ReadFrom(*message);
|
||||
|
||||
if (((aRequestMetadata.mDestinationAddress == aMessageInfo.GetPeerAddr()) ||
|
||||
aRequestMetadata.mDestinationAddress.IsMulticast()) &&
|
||||
aRequestMetadata.mDestinationAddress.IsMulticast() ||
|
||||
aRequestMetadata.mDestinationAddress.IsAnycastRoutingLocator()) &&
|
||||
(aRequestMetadata.mDestinationPort == aMessageInfo.GetPeerPort()))
|
||||
{
|
||||
assert(aRequestHeader.FromMessage(*message, true) == kThreadError_None);
|
||||
|
||||
@@ -112,6 +112,7 @@ ThreadError Leader::SendPetitionResponse(const Coap::Header &aRequestHeader, con
|
||||
StateTlv state;
|
||||
CommissionerSessionIdTlv sessionId;
|
||||
Message *message;
|
||||
Ip6::MessageInfo responseInfo(aMessageInfo);
|
||||
|
||||
VerifyOrExit((message = mCoapServer.NewMeshCoPMessage(0)) != NULL, error = kThreadError_NoBufs);
|
||||
|
||||
@@ -137,7 +138,8 @@ ThreadError Leader::SendPetitionResponse(const Coap::Header &aRequestHeader, con
|
||||
SuccessOrExit(error = message->Append(&sessionId, sizeof(sessionId)));
|
||||
}
|
||||
|
||||
SuccessOrExit(error = mCoapServer.SendMessage(*message, aMessageInfo));
|
||||
memset(&responseInfo.mSockAddr, 0, sizeof(responseInfo.mSockAddr));
|
||||
SuccessOrExit(error = mCoapServer.SendMessage(*message, responseInfo));
|
||||
|
||||
otLogInfoMeshCoP("sent petition response");
|
||||
|
||||
@@ -202,6 +204,7 @@ ThreadError Leader::SendKeepAliveResponse(const Coap::Header &aRequestHeader, co
|
||||
Coap::Header responseHeader;
|
||||
StateTlv state;
|
||||
Message *message;
|
||||
Ip6::MessageInfo responseInfo(aMessageInfo);
|
||||
|
||||
VerifyOrExit((message = mCoapServer.NewMeshCoPMessage(0)) != NULL, error = kThreadError_NoBufs);
|
||||
|
||||
@@ -214,6 +217,7 @@ ThreadError Leader::SendKeepAliveResponse(const Coap::Header &aRequestHeader, co
|
||||
state.SetState(aState);
|
||||
SuccessOrExit(error = message->Append(&state, sizeof(state)));
|
||||
|
||||
memset(&responseInfo.mSockAddr, 0, sizeof(responseInfo.mSockAddr));
|
||||
SuccessOrExit(error = mCoapServer.SendMessage(*message, aMessageInfo));
|
||||
|
||||
otLogInfoMeshCoP("sent keep alive response");
|
||||
|
||||
@@ -223,6 +223,7 @@ void AddressResolver::HandleAddressNotification(Coap::Header &aHeader, Message &
|
||||
ThreadRloc16Tlv rloc16Tlv;
|
||||
ThreadLastTransactionTimeTlv lastTransactionTimeTlv;
|
||||
uint32_t lastTransactionTime;
|
||||
Ip6::MessageInfo responseInfo(aMessageInfo);
|
||||
|
||||
VerifyOrExit(aHeader.GetType() == kCoapTypeConfirmable &&
|
||||
aHeader.GetCode() == kCoapRequestPost, ;);
|
||||
@@ -282,6 +283,8 @@ void AddressResolver::HandleAddressNotification(Coap::Header &aHeader, Message &
|
||||
mCache[i].mFailures = 0;
|
||||
mCache[i].mState = Cache::kStateCached;
|
||||
|
||||
memset(&responseInfo.mSockAddr, 0, sizeof(responseInfo.mSockAddr));
|
||||
|
||||
if (mCoapServer.SendEmptyAck(aHeader, aMessageInfo) == kThreadError_None)
|
||||
{
|
||||
otLogInfoArp("Sent address notification acknowledgment");
|
||||
@@ -360,6 +363,7 @@ void AddressResolver::HandleAddressError(Coap::Header &aHeader, Message &aMessag
|
||||
uint8_t numChildren;
|
||||
Mac::ExtAddress macAddr;
|
||||
Ip6::Address destination;
|
||||
Ip6::MessageInfo responseInfo(aMessageInfo);
|
||||
|
||||
VerifyOrExit(aHeader.GetType() == kCoapTypeConfirmable &&
|
||||
aHeader.GetCode() == kCoapRequestPost, error = kThreadError_Drop);
|
||||
@@ -368,7 +372,9 @@ void AddressResolver::HandleAddressError(Coap::Header &aHeader, Message &aMessag
|
||||
|
||||
if (!aMessageInfo.GetSockAddr().IsMulticast())
|
||||
{
|
||||
if (mCoapServer.SendEmptyAck(aHeader, aMessageInfo) == kThreadError_None)
|
||||
memset(&responseInfo.mSockAddr, 0, sizeof(responseInfo.mSockAddr));
|
||||
|
||||
if (mCoapServer.SendEmptyAck(aHeader, responseInfo) == kThreadError_None)
|
||||
{
|
||||
otLogInfoArp("Sent address error notification acknowledgment");
|
||||
}
|
||||
|
||||
@@ -362,6 +362,7 @@ void Leader::SendCommissioningSetResponse(const Coap::Header &aRequestHeader, co
|
||||
Coap::Header responseHeader;
|
||||
Message *message;
|
||||
MeshCoP::StateTlv state;
|
||||
Ip6::MessageInfo responseInfo(aMessageInfo);
|
||||
|
||||
VerifyOrExit((message = mCoapServer.NewMeshCoPMessage(0)) != NULL, error = kThreadError_NoBufs);
|
||||
|
||||
@@ -374,7 +375,8 @@ void Leader::SendCommissioningSetResponse(const Coap::Header &aRequestHeader, co
|
||||
state.SetState(aState);
|
||||
SuccessOrExit(error = message->Append(&state, sizeof(state)));
|
||||
|
||||
SuccessOrExit(error = mCoapServer.SendMessage(*message, aMessageInfo));
|
||||
memset(&responseInfo.mSockAddr, 0, sizeof(responseInfo.mSockAddr));
|
||||
SuccessOrExit(error = mCoapServer.SendMessage(*message, responseInfo));
|
||||
|
||||
otLogInfoMeshCoP("sent commissioning dataset set response");
|
||||
|
||||
|
||||
@@ -2413,7 +2413,7 @@ class OpenThread(IThci):
|
||||
|
||||
if xBorderRouterLocator != None:
|
||||
cmd += ' locator '
|
||||
cmd += str(xBorderRouterLocator)
|
||||
cmd += str(hex(xBorderRouterLocator))
|
||||
|
||||
if xChannelTlv != None:
|
||||
cmd += ' binary '
|
||||
|
||||
Reference in New Issue
Block a user