diff --git a/src/core/coap/coap.cpp b/src/core/coap/coap.cpp index b89bded96..6eb6f8218 100644 --- a/src/core/coap/coap.cpp +++ b/src/core/coap/coap.cpp @@ -144,17 +144,17 @@ otError CoapBase::SendMessage(Message & aMessage, Message * storedCopy = NULL; uint16_t copyLength = 0; - if ((aMessage.GetType() == OT_COAP_TYPE_ACKNOWLEDGMENT || aMessage.GetType() == OT_COAP_TYPE_RESET) && - aMessage.GetCode() != OT_COAP_CODE_EMPTY) + switch (aMessage.GetType()) { + case OT_COAP_TYPE_ACKNOWLEDGMENT: mResponsesQueue.EnqueueResponse(aMessage, aMessageInfo); - } - - // Set Message Id if it was not already set. - if (aMessage.GetMessageId() == 0 && - (aMessage.GetType() == OT_COAP_TYPE_CONFIRMABLE || aMessage.GetType() == OT_COAP_TYPE_NON_CONFIRMABLE)) - { + break; + case OT_COAP_TYPE_RESET: + assert(aMessage.GetCode() == OT_COAP_CODE_EMPTY); + break; + default: aMessage.SetMessageId(mMessageId++); + break; } aMessage.Finish(); @@ -231,7 +231,6 @@ otError CoapBase::SendHeaderResponse(Message::Code aCode, const Message &aReques case OT_COAP_TYPE_NON_CONFIRMABLE: message->Init(OT_COAP_TYPE_NON_CONFIRMABLE, aCode); - message->SetMessageId(mMessageId++); break; default: diff --git a/src/core/meshcop/border_agent.cpp b/src/core/meshcop/border_agent.cpp index 341230c4f..8f5834c30 100644 --- a/src/core/meshcop/border_agent.cpp +++ b/src/core/meshcop/border_agent.cpp @@ -118,7 +118,10 @@ public: aMessage.Init(OT_COAP_TYPE_ACKNOWLEDGMENT, aCode); } - aMessage.SetMessageId(mSeparate ? 0 : mMessageId); + if (!mSeparate) + { + aMessage.SetMessageId(mMessageId); + } return aMessage.SetToken(mToken, mTokenLength); } @@ -199,7 +202,11 @@ static void SendErrorMessage(Coap::CoapSecure & aCoapSecure, message->Init(OT_COAP_TYPE_ACKNOWLEDGMENT, CoapCodeFromError(aError)); } - message->SetMessageId(aSeparate ? 0 : aRequest.GetMessageId()); + if (!aSeparate) + { + message->SetMessageId(aRequest.GetMessageId()); + } + SuccessOrExit(error = message->SetToken(aRequest.GetToken(), aRequest.GetTokenLength())); SuccessOrExit(error = aCoapSecure.SendMessage(*message, aCoapSecure.GetPeerAddress()));