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:
Xiao Ma
2017-01-17 19:27:20 -08:00
committed by Jonathan Hui
parent 9113ffa3e9
commit 419d251e2f
5 changed files with 18 additions and 5 deletions
+2 -1
View File
@@ -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);
+5 -1
View File
@@ -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");
+7 -1
View File
@@ -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");
}
+3 -1
View File
@@ -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");
+1 -1
View File
@@ -2413,7 +2413,7 @@ class OpenThread(IThci):
if xBorderRouterLocator != None:
cmd += ' locator '
cmd += str(xBorderRouterLocator)
cmd += str(hex(xBorderRouterLocator))
if xChannelTlv != None:
cmd += ' binary '