mirror of
https://github.com/espressif/openthread.git
synced 2026-07-31 16:17:47 +00:00
[cli] fix udp example (#2084)
This commit is contained in:
@@ -33,7 +33,7 @@ On node 2, open the example UDP socket and send a simple message.
|
||||
On node 1, you should see a print out similar to below:
|
||||
|
||||
```bash
|
||||
5 bytes from fdde:ad00:beef:0:dac3:6792:e2e:90d8: hello
|
||||
5 bytes from fdde:ad00:beef:0:dac3:6792:e2e:90d8 49153 hello
|
||||
```
|
||||
|
||||
## Command List
|
||||
|
||||
+16
-18
@@ -74,14 +74,14 @@ otError Udp::ProcessBind(int argc, char *argv[])
|
||||
otSockAddr sockaddr;
|
||||
long value;
|
||||
|
||||
memset(&sockaddr, 0, sizeof(sockaddr));
|
||||
|
||||
VerifyOrExit(argc == 2, error = OT_ERROR_PARSE);
|
||||
|
||||
error = otIp6AddressFromString(argv[1], &sockaddr.mAddress);
|
||||
memset(&sockaddr, 0, sizeof(sockaddr));
|
||||
|
||||
error = otIp6AddressFromString(argv[0], &sockaddr.mAddress);
|
||||
SuccessOrExit(error);
|
||||
|
||||
error = Interpreter::ParseLong(argv[2], value);
|
||||
error = Interpreter::ParseLong(argv[1], value);
|
||||
SuccessOrExit(error);
|
||||
|
||||
sockaddr.mPort = static_cast<uint16_t>(value);
|
||||
@@ -98,14 +98,14 @@ otError Udp::ProcessConnect(int argc, char *argv[])
|
||||
otSockAddr sockaddr;
|
||||
long value;
|
||||
|
||||
memset(&sockaddr, 0, sizeof(sockaddr));
|
||||
|
||||
VerifyOrExit(argc == 2, error = OT_ERROR_PARSE);
|
||||
|
||||
error = otIp6AddressFromString(argv[1], &sockaddr.mAddress);
|
||||
memset(&sockaddr, 0, sizeof(sockaddr));
|
||||
|
||||
error = otIp6AddressFromString(argv[0], &sockaddr.mAddress);
|
||||
SuccessOrExit(error);
|
||||
|
||||
error = Interpreter::ParseLong(argv[2], value);
|
||||
error = Interpreter::ParseLong(argv[1], value);
|
||||
SuccessOrExit(error);
|
||||
|
||||
sockaddr.mPort = static_cast<uint16_t>(value);
|
||||
@@ -137,7 +137,7 @@ otError Udp::ProcessSend(int argc, char *argv[])
|
||||
otError error;
|
||||
otMessageInfo messageInfo;
|
||||
otMessage *message = NULL;
|
||||
int curArg = 1;
|
||||
int curArg = 0;
|
||||
|
||||
memset(&messageInfo, 0, sizeof(messageInfo));
|
||||
|
||||
@@ -159,7 +159,7 @@ otError Udp::ProcessSend(int argc, char *argv[])
|
||||
message = otUdpNewMessage(mInterpreter.mInstance, true);
|
||||
VerifyOrExit(message != NULL, error = OT_ERROR_NO_BUFS);
|
||||
|
||||
error = otMessageAppend(message, argv[curArg], static_cast<uint16_t>(strlen(argv[3])));
|
||||
error = otMessageAppend(message, argv[curArg], static_cast<uint16_t>(strlen(argv[curArg])));
|
||||
SuccessOrExit(error);
|
||||
|
||||
error = otUdpSend(&mSocket, message, &messageInfo);
|
||||
@@ -176,20 +176,17 @@ exit:
|
||||
|
||||
otError Udp::Process(int argc, char *argv[])
|
||||
{
|
||||
otError error = OT_ERROR_NONE;
|
||||
otError error = OT_ERROR_PARSE;
|
||||
|
||||
for (size_t i = 0; i < sizeof(sCommands) / sizeof(sCommands[0]); i++)
|
||||
{
|
||||
if (strcmp(argv[0], sCommands[i].mName) == 0)
|
||||
{
|
||||
(this->*sCommands[i].mCommand)(argc, argv);
|
||||
ExitNow();
|
||||
error = (this->*sCommands[i].mCommand)(argc - 1, argv + 1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
error = OT_ERROR_PARSE;
|
||||
|
||||
exit:
|
||||
return error;
|
||||
}
|
||||
|
||||
@@ -204,7 +201,7 @@ void Udp::HandleUdpReceive(otMessage *aMessage, const otMessageInfo *aMessageInf
|
||||
int length;
|
||||
|
||||
mInterpreter.mServer->OutputFormat("%d bytes from ", otMessageGetLength(aMessage) - otMessageGetOffset(aMessage));
|
||||
mInterpreter.mServer->OutputFormat("%x:%x:%x:%x:%x:%x:%x:%x: ",
|
||||
mInterpreter.mServer->OutputFormat("%x:%x:%x:%x:%x:%x:%x:%x %d ",
|
||||
HostSwap16(aMessageInfo->mPeerAddr.mFields.m16[0]),
|
||||
HostSwap16(aMessageInfo->mPeerAddr.mFields.m16[1]),
|
||||
HostSwap16(aMessageInfo->mPeerAddr.mFields.m16[2]),
|
||||
@@ -212,7 +209,8 @@ void Udp::HandleUdpReceive(otMessage *aMessage, const otMessageInfo *aMessageInf
|
||||
HostSwap16(aMessageInfo->mPeerAddr.mFields.m16[4]),
|
||||
HostSwap16(aMessageInfo->mPeerAddr.mFields.m16[5]),
|
||||
HostSwap16(aMessageInfo->mPeerAddr.mFields.m16[6]),
|
||||
HostSwap16(aMessageInfo->mPeerAddr.mFields.m16[7]));
|
||||
HostSwap16(aMessageInfo->mPeerAddr.mFields.m16[7]),
|
||||
aMessageInfo->mPeerPort);
|
||||
|
||||
length = otMessageRead(aMessage, otMessageGetOffset(aMessage), buf, sizeof(buf) - 1);
|
||||
buf[length] = '\0';
|
||||
|
||||
@@ -114,6 +114,19 @@ otError UdpSocket::SendTo(Message &aMessage, const MessageInfo &aMessageInfo)
|
||||
GetSockName().mPort = static_cast<Udp *>(mTransport)->GetEphemeralPort();
|
||||
}
|
||||
|
||||
if (messageInfoLocal.GetPeerAddr().IsUnspecified())
|
||||
{
|
||||
VerifyOrExit(!GetPeerName().GetAddress().IsUnspecified(), error = OT_ERROR_INVALID_ARGS);
|
||||
|
||||
messageInfoLocal.SetPeerAddr(GetPeerName().GetAddress());
|
||||
}
|
||||
|
||||
if (messageInfoLocal.mPeerPort == 0)
|
||||
{
|
||||
VerifyOrExit(GetPeerName().mPort != 0, error = OT_ERROR_INVALID_ARGS);
|
||||
messageInfoLocal.mPeerPort = GetPeerName().mPort;
|
||||
}
|
||||
|
||||
udpHeader.SetSourcePort(GetSockName().mPort);
|
||||
udpHeader.SetDestinationPort(messageInfoLocal.mPeerPort);
|
||||
udpHeader.SetLength(sizeof(udpHeader) + aMessage.GetLength());
|
||||
|
||||
@@ -126,8 +126,9 @@ public:
|
||||
* @param[in] aMessage The message to send.
|
||||
* @param[in] aMessageInfo The message info associated with @p aMessage.
|
||||
*
|
||||
* @retval OT_ERROR_NONE Successfully sent the UDP message.
|
||||
* @retval OT_ERROR_NO_BUFS Insufficient available buffer to add the UDP and IPv6 headers.
|
||||
* @retval OT_ERROR_NONE Successfully sent the UDP message.
|
||||
* @retval OT_ERROR_INVALID_ARGS If no peer is specified in @p aMessageInfo or by connect().
|
||||
* @retval OT_ERROR_NO_BUFS Insufficient available buffer to add the UDP and IPv6 headers.
|
||||
*
|
||||
*/
|
||||
otError SendTo(Message &aMessage, const MessageInfo &aMessageInfo);
|
||||
|
||||
Reference in New Issue
Block a user