diff --git a/src/core/coap/coap.cpp b/src/core/coap/coap.cpp index 6c4bce76d..726c2f483 100644 --- a/src/core/coap/coap.cpp +++ b/src/core/coap/coap.cpp @@ -189,7 +189,7 @@ ThreadError Coap::SendMessage(Message &aMessage, const Ip6::MessageInfo &aMessag // Create a copy of entire message and enqueue it. copyLength = aMessage.GetLength(); } - else if (header.IsNonConfirmable() && header.IsRequest() && (aHandler != NULL)) + else if (header.IsNonConfirmable() && (aHandler != NULL)) { // As we do not retransmit non confirmable messages, create a copy of header only, for token information. copyLength = header.GetLength(); @@ -466,7 +466,9 @@ Message *Coap::FindRelatedRequest(const Header &aResponseHeader, const Ip6::Mess aCoapMetadata.mDestinationAddress.IsAnycastRoutingLocator()) && (aCoapMetadata.mDestinationPort == aMessageInfo.GetPeerPort())) { - assert(aRequestHeader.FromMessage(*message, sizeof(CoapMetadata)) == kThreadError_None); + // FromMessage can return kThreadError_Parse if only partial message was stored (header only), + // but payload marker is present. Assume, that stored messages are always valid. + aRequestHeader.FromMessage(*message, sizeof(CoapMetadata)); switch (aResponseHeader.GetType()) {