mirror of
https://github.com/espressif/openthread.git
synced 2026-09-23 01:17:41 +00:00
[ip6] add IPv6 fragmentation and reassembly support (#3948)
This commit is contained in:
committed by
Jonathan Hui
parent
3198a3be69
commit
864e3458f5
+53
-5
@@ -136,14 +136,27 @@ otError UdpExample::ProcessSend(int argc, char *argv[])
|
||||
{
|
||||
otError error;
|
||||
otMessageInfo messageInfo;
|
||||
otMessage * message = NULL;
|
||||
int curArg = 0;
|
||||
otMessage * message = NULL;
|
||||
int curArg = 0;
|
||||
unsigned long autoGenMessageLength = 0;
|
||||
|
||||
memset(&messageInfo, 0, sizeof(messageInfo));
|
||||
|
||||
VerifyOrExit(argc == 1 || argc == 3, error = OT_ERROR_INVALID_ARGS);
|
||||
VerifyOrExit(argc == 1 || argc == 3 || argc == 4, error = OT_ERROR_INVALID_ARGS);
|
||||
|
||||
if (argc == 3)
|
||||
if (argc == 4)
|
||||
{
|
||||
if (strcmp(argv[curArg++], "-s") == 0)
|
||||
{
|
||||
Interpreter::ParseUnsignedLong(argv[curArg++], autoGenMessageLength);
|
||||
}
|
||||
else
|
||||
{
|
||||
ExitNow(error = OT_ERROR_INVALID_ARGS);
|
||||
}
|
||||
}
|
||||
|
||||
if (argc >= 3)
|
||||
{
|
||||
long value;
|
||||
|
||||
@@ -159,7 +172,14 @@ otError UdpExample::ProcessSend(int argc, char *argv[])
|
||||
message = otUdpNewMessage(mInterpreter.mInstance, NULL);
|
||||
VerifyOrExit(message != NULL, error = OT_ERROR_NO_BUFS);
|
||||
|
||||
error = otMessageAppend(message, argv[curArg], static_cast<uint16_t>(strlen(argv[curArg])));
|
||||
if (autoGenMessageLength != 0)
|
||||
{
|
||||
error = WriteCharToBuffer(message, static_cast<uint16_t>(autoGenMessageLength));
|
||||
}
|
||||
else
|
||||
{
|
||||
error = otMessageAppend(message, argv[curArg], static_cast<uint16_t>(strlen(argv[curArg])));
|
||||
}
|
||||
SuccessOrExit(error);
|
||||
|
||||
error = otUdpSend(&mSocket, message, &messageInfo);
|
||||
@@ -174,6 +194,34 @@ exit:
|
||||
return error;
|
||||
}
|
||||
|
||||
otError UdpExample::WriteCharToBuffer(otMessage *aMessage, uint16_t aMessageSize)
|
||||
{
|
||||
otError error = OT_ERROR_NONE;
|
||||
uint8_t character = 0x30; // 0
|
||||
|
||||
for (uint16_t index = 0; index < aMessageSize; index++)
|
||||
{
|
||||
SuccessOrExit(error = otMessageAppend(aMessage, &character, 1));
|
||||
character++;
|
||||
|
||||
switch (character)
|
||||
{
|
||||
case 0x3A: // 9
|
||||
character = 0x41; // A
|
||||
break;
|
||||
case 0x5B: // Z
|
||||
character = 0x61; // a
|
||||
break;
|
||||
case 0x7B: // z
|
||||
character = 0x30; // 0
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
exit:
|
||||
return error;
|
||||
}
|
||||
|
||||
otError UdpExample::Process(int argc, char *argv[])
|
||||
{
|
||||
otError error = OT_ERROR_PARSE;
|
||||
|
||||
Reference in New Issue
Block a user