mirror of
https://github.com/espressif/openthread.git
synced 2026-08-18 00:19:52 +00:00
No payload no marker (#1645)
* no payload no marker * raise coap error with marker but no payload
This commit is contained in:
+13
-3
@@ -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));
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user