No payload no marker (#1645)

* no payload no marker

* raise coap error with marker but no payload
This commit is contained in:
Buke Po
2017-04-24 09:12:16 -07:00
committed by Jonathan Hui
parent 030efbaf45
commit 739006be37
2 changed files with 17 additions and 3 deletions
+13 -3
View File
@@ -266,6 +266,7 @@ ThreadError Coap::ProcessClient(int argc, char *argv[])
otMessage *message = NULL;
otMessageInfo messageInfo;
otCoapHeader header;
uint16_t payloadLength = 0;
// Default parameters
char coapUri[kMaxUriLength] = "test";
@@ -330,15 +331,24 @@ ThreadError Coap::ProcessClient(int argc, char *argv[])
otCoapHeaderInit(&header, coapType, coapCode);
otCoapHeaderGenerateToken(&header, Thread::Coap::Header::kDefaultTokenLength);
SuccessOrExit(error = otCoapHeaderAppendUriPathOptions(&header, coapUri));
otCoapHeaderSetPayloadMarker(&header);
if (argc > 4)
{
payloadLength = static_cast<uint16_t>(strlen(argv[4]));
if (payloadLength > 0)
{
otCoapHeaderSetPayloadMarker(&header);
}
}
message = otCoapNewMessage(sInstance, &header);
VerifyOrExit(message != NULL, error = kThreadError_NoBufs);
// Embed content into message if given
if (argc > 4)
if (payloadLength > 0)
{
SuccessOrExit(error = otMessageAppend(message, argv[4], static_cast<uint16_t>(strlen(argv[4]))));
SuccessOrExit(error = otMessageAppend(message, argv[4], payloadLength));
}
memset(&messageInfo, 0, sizeof(messageInfo));
+4
View File
@@ -96,6 +96,10 @@ ThreadError Header::FromMessage(const Message &aMessage, uint16_t aMetadataSize)
if (mHeader.mBytes[mHeaderLength] == 0xff)
{
mHeaderLength += sizeof(uint8_t);
length -= sizeof(uint8_t);
// RFC7252: The presence of a marker followed by a zero-length payload MUST be processed
// as a message format error.
VerifyOrExit(length > 0, error = kThreadError_Parse);
ExitNow(error = kThreadError_None);
}