mirror of
https://github.com/espressif/openthread.git
synced 2026-08-21 01:49:52 +00:00
[cli] return error if the command's argument is not supported (#2620)
This commit is contained in:
+87
-53
@@ -489,7 +489,7 @@ void Interpreter::ProcessChild(int argc, char *argv[])
|
||||
long value;
|
||||
bool isTable;
|
||||
|
||||
VerifyOrExit(argc > 0, error = OT_ERROR_PARSE);
|
||||
VerifyOrExit(argc > 0, error = OT_ERROR_INVALID_ARGS);
|
||||
|
||||
isTable = (strcmp(argv[0], "table") == 0);
|
||||
|
||||
@@ -892,7 +892,7 @@ void Interpreter::ProcessEui64(int argc, char *argv[])
|
||||
otError error = OT_ERROR_NONE;
|
||||
otExtAddress extAddress;
|
||||
|
||||
VerifyOrExit(argc == 0, error = OT_ERROR_PARSE);
|
||||
VerifyOrExit(argc == 0, error = OT_ERROR_INVALID_ARGS);
|
||||
|
||||
otLinkGetFactoryAssignedIeeeEui64(mInstance, &extAddress);
|
||||
OutputBytes(extAddress.m8, OT_EXT_ADDRESS_SIZE);
|
||||
@@ -941,15 +941,9 @@ void Interpreter::ProcessLogFilename(int argc, char *argv[])
|
||||
{
|
||||
otError error = OT_ERROR_NONE;
|
||||
|
||||
if (argc == 1)
|
||||
{
|
||||
error = otPlatDebugUart_logfile(argv[0]);
|
||||
SuccessOrExit(error);
|
||||
}
|
||||
else
|
||||
{
|
||||
error = OT_ERROR_PARSE;
|
||||
}
|
||||
VerifyOrExit(argc == 1, error = OT_ERROR_INVALID_ARGS);
|
||||
|
||||
SuccessOrExit(error = otPlatDebugUart_logfile(argv[0]));
|
||||
|
||||
exit:
|
||||
AppendResult(error);
|
||||
@@ -1009,6 +1003,10 @@ void Interpreter::ProcessIfconfig(int argc, char *argv[])
|
||||
{
|
||||
SuccessOrExit(error = otIp6SetEnabled(mInstance, false));
|
||||
}
|
||||
else
|
||||
{
|
||||
ExitNow(error = OT_ERROR_INVALID_ARGS);
|
||||
}
|
||||
|
||||
exit:
|
||||
AppendResult(error);
|
||||
@@ -1019,7 +1017,7 @@ otError Interpreter::ProcessIpAddrAdd(int argc, char *argv[])
|
||||
otError error;
|
||||
otNetifAddress aAddress;
|
||||
|
||||
VerifyOrExit(argc > 0, error = OT_ERROR_PARSE);
|
||||
VerifyOrExit(argc > 0, error = OT_ERROR_INVALID_ARGS);
|
||||
|
||||
SuccessOrExit(error = otIp6AddressFromString(argv[0], &aAddress.mAddress));
|
||||
aAddress.mPrefixLength = 64;
|
||||
@@ -1036,7 +1034,7 @@ otError Interpreter::ProcessIpAddrDel(int argc, char *argv[])
|
||||
otError error;
|
||||
struct otIp6Address address;
|
||||
|
||||
VerifyOrExit(argc > 0, error = OT_ERROR_PARSE);
|
||||
VerifyOrExit(argc > 0, error = OT_ERROR_INVALID_ARGS);
|
||||
|
||||
SuccessOrExit(error = otIp6AddressFromString(argv[0], &address));
|
||||
error = otIp6RemoveUnicastAddress(mInstance, &address);
|
||||
@@ -1072,6 +1070,10 @@ void Interpreter::ProcessIpAddr(int argc, char *argv[])
|
||||
{
|
||||
SuccessOrExit(error = ProcessIpAddrDel(argc - 1, argv + 1));
|
||||
}
|
||||
else
|
||||
{
|
||||
ExitNow(error = OT_ERROR_INVALID_ARGS);
|
||||
}
|
||||
}
|
||||
|
||||
exit:
|
||||
@@ -1084,7 +1086,7 @@ otError Interpreter::ProcessIpMulticastAddrAdd(int argc, char *argv[])
|
||||
otError error;
|
||||
struct otIp6Address address;
|
||||
|
||||
VerifyOrExit(argc > 0, error = OT_ERROR_PARSE);
|
||||
VerifyOrExit(argc > 0, error = OT_ERROR_INVALID_ARGS);
|
||||
|
||||
SuccessOrExit(error = otIp6AddressFromString(argv[0], &address));
|
||||
error = otIp6SubscribeMulticastAddress(mInstance, &address);
|
||||
@@ -1098,7 +1100,7 @@ otError Interpreter::ProcessIpMulticastAddrDel(int argc, char *argv[])
|
||||
otError error;
|
||||
struct otIp6Address address;
|
||||
|
||||
VerifyOrExit(argc > 0, error = OT_ERROR_PARSE);
|
||||
VerifyOrExit(argc > 0, error = OT_ERROR_INVALID_ARGS);
|
||||
|
||||
SuccessOrExit(error = otIp6AddressFromString(argv[0], &address));
|
||||
error = otIp6UnsubscribeMulticastAddress(mInstance, &address);
|
||||
@@ -1134,7 +1136,7 @@ otError Interpreter::ProcessMulticastPromiscuous(int argc, char *argv[])
|
||||
}
|
||||
else
|
||||
{
|
||||
ExitNow(error = OT_ERROR_PARSE);
|
||||
ExitNow(error = OT_ERROR_INVALID_ARGS);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1171,6 +1173,10 @@ void Interpreter::ProcessIpMulticastAddr(int argc, char *argv[])
|
||||
{
|
||||
SuccessOrExit(error = ProcessMulticastPromiscuous(argc - 1, argv + 1));
|
||||
}
|
||||
else
|
||||
{
|
||||
ExitNow(error = OT_ERROR_INVALID_ARGS);
|
||||
}
|
||||
}
|
||||
|
||||
exit:
|
||||
@@ -1183,7 +1189,7 @@ void Interpreter::ProcessKeySequence(int argc, char *argv[])
|
||||
otError error = OT_ERROR_NONE;
|
||||
long value;
|
||||
|
||||
VerifyOrExit(argc == 1 || argc == 2, error = OT_ERROR_PARSE);
|
||||
VerifyOrExit(argc == 1 || argc == 2, error = OT_ERROR_INVALID_ARGS);
|
||||
|
||||
if (strcmp(argv[0], "counter") == 0)
|
||||
{
|
||||
@@ -1209,6 +1215,10 @@ void Interpreter::ProcessKeySequence(int argc, char *argv[])
|
||||
otThreadSetKeySwitchGuardTime(mInstance, static_cast<uint32_t>(value));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
ExitNow(error = OT_ERROR_INVALID_ARGS);
|
||||
}
|
||||
|
||||
exit:
|
||||
AppendResult(error);
|
||||
@@ -1404,7 +1414,7 @@ void Interpreter::ProcessNeighbor(int argc, char *argv[])
|
||||
bool isTable;
|
||||
otNeighborInfoIterator iterator = OT_NEIGHBOR_INFO_ITERATOR_INIT;
|
||||
|
||||
VerifyOrExit(argc > 0, error = OT_ERROR_PARSE);
|
||||
VerifyOrExit(argc > 0, error = OT_ERROR_INVALID_ARGS);
|
||||
|
||||
isTable = (strcmp(argv[0], "table") == 0);
|
||||
|
||||
@@ -1448,7 +1458,7 @@ void Interpreter::ProcessNeighbor(int argc, char *argv[])
|
||||
}
|
||||
else
|
||||
{
|
||||
error = OT_ERROR_PARSE;
|
||||
ExitNow(error = OT_ERROR_INVALID_ARGS);
|
||||
}
|
||||
|
||||
exit:
|
||||
@@ -1478,14 +1488,14 @@ void Interpreter::ProcessService(int argc, char *argv[])
|
||||
{
|
||||
otError error = OT_ERROR_NONE;
|
||||
|
||||
VerifyOrExit(argc > 0, error = OT_ERROR_PARSE);
|
||||
VerifyOrExit(argc > 0, error = OT_ERROR_INVALID_ARGS);
|
||||
|
||||
if (strcmp(argv[0], "add") == 0)
|
||||
{
|
||||
otServiceConfig cfg;
|
||||
long enterpriseNumber = 0;
|
||||
|
||||
VerifyOrExit(argc > 3, error = OT_ERROR_PARSE);
|
||||
VerifyOrExit(argc > 3, error = OT_ERROR_INVALID_ARGS);
|
||||
|
||||
SuccessOrExit(error = ParseLong(argv[1], enterpriseNumber));
|
||||
|
||||
@@ -1502,7 +1512,7 @@ void Interpreter::ProcessService(int argc, char *argv[])
|
||||
{
|
||||
long enterpriseNumber = 0;
|
||||
|
||||
VerifyOrExit(argc > 2, error = OT_ERROR_PARSE);
|
||||
VerifyOrExit(argc > 2, error = OT_ERROR_INVALID_ARGS);
|
||||
|
||||
SuccessOrExit(error = ParseLong(argv[1], enterpriseNumber));
|
||||
|
||||
@@ -1510,6 +1520,10 @@ void Interpreter::ProcessService(int argc, char *argv[])
|
||||
reinterpret_cast<uint8_t *>(argv[2]),
|
||||
static_cast<uint8_t>(strlen(argv[2]))));
|
||||
}
|
||||
else
|
||||
{
|
||||
ExitNow(error = OT_ERROR_INVALID_ARGS);
|
||||
}
|
||||
|
||||
exit:
|
||||
AppendResult(error);
|
||||
@@ -1683,7 +1697,7 @@ void Interpreter::ProcessPing(int argc, char *argv[])
|
||||
uint8_t index = 1;
|
||||
long value;
|
||||
|
||||
VerifyOrExit(argc > 0, error = OT_ERROR_PARSE);
|
||||
VerifyOrExit(argc > 0, error = OT_ERROR_INVALID_ARGS);
|
||||
|
||||
if (strcmp(argv[0], "stop") == 0)
|
||||
{
|
||||
@@ -1729,7 +1743,7 @@ void Interpreter::ProcessPing(int argc, char *argv[])
|
||||
break;
|
||||
|
||||
default:
|
||||
ExitNow(error = OT_ERROR_PARSE);
|
||||
ExitNow(error = OT_ERROR_INVALID_ARGS);
|
||||
}
|
||||
|
||||
index++;
|
||||
@@ -1824,6 +1838,10 @@ void Interpreter::ProcessPromiscuous(int argc, char *argv[])
|
||||
otLinkSetPcapCallback(mInstance, NULL, NULL);
|
||||
SuccessOrExit(error = otLinkSetPromiscuous(mInstance, false));
|
||||
}
|
||||
else
|
||||
{
|
||||
ExitNow(error = OT_ERROR_INVALID_ARGS);
|
||||
}
|
||||
}
|
||||
|
||||
exit:
|
||||
@@ -2111,7 +2129,7 @@ void Interpreter::ProcessPrefix(int argc, char *argv[])
|
||||
}
|
||||
else
|
||||
{
|
||||
ExitNow(error = OT_ERROR_PARSE);
|
||||
ExitNow(error = OT_ERROR_INVALID_ARGS);
|
||||
}
|
||||
|
||||
exit:
|
||||
@@ -2125,7 +2143,7 @@ void Interpreter::ProcessReleaseRouterId(int argc, char *argv[])
|
||||
otError error = OT_ERROR_NONE;
|
||||
long value;
|
||||
|
||||
VerifyOrExit(argc > 0, error = OT_ERROR_PARSE);
|
||||
VerifyOrExit(argc > 0, error = OT_ERROR_INVALID_ARGS);
|
||||
|
||||
SuccessOrExit(error = ParseLong(argv[0], value));
|
||||
SuccessOrExit(error = otThreadReleaseRouterId(mInstance, static_cast<uint8_t>(value)));
|
||||
@@ -2162,7 +2180,7 @@ otError Interpreter::ProcessRouteAdd(int argc, char *argv[])
|
||||
char *prefixLengthStr;
|
||||
char *endptr;
|
||||
|
||||
VerifyOrExit(argc > 0, error = OT_ERROR_PARSE);
|
||||
VerifyOrExit(argc > 0, error = OT_ERROR_INVALID_ARGS);
|
||||
|
||||
if ((prefixLengthStr = strchr(argv[argcur], '/')) == NULL)
|
||||
{
|
||||
@@ -2222,7 +2240,7 @@ otError Interpreter::ProcessRouteRemove(int argc, char *argv[])
|
||||
char *prefixLengthStr;
|
||||
char *endptr;
|
||||
|
||||
VerifyOrExit(argc > 0, error = OT_ERROR_PARSE);
|
||||
VerifyOrExit(argc > 0, error = OT_ERROR_INVALID_ARGS);
|
||||
|
||||
if ((prefixLengthStr = strchr(argv[argcur], '/')) == NULL)
|
||||
{
|
||||
@@ -2300,7 +2318,7 @@ void Interpreter::ProcessRoute(int argc, char *argv[])
|
||||
}
|
||||
else
|
||||
{
|
||||
ExitNow(error = OT_ERROR_PARSE);
|
||||
ExitNow(error = OT_ERROR_INVALID_ARGS);
|
||||
}
|
||||
|
||||
exit:
|
||||
@@ -2316,7 +2334,7 @@ void Interpreter::ProcessRouter(int argc, char *argv[])
|
||||
long value;
|
||||
bool isTable;
|
||||
|
||||
VerifyOrExit(argc > 0, error = OT_ERROR_PARSE);
|
||||
VerifyOrExit(argc > 0, error = OT_ERROR_INVALID_ARGS);
|
||||
|
||||
isTable = (strcmp(argv[0], "table") == 0);
|
||||
|
||||
@@ -2443,7 +2461,7 @@ void Interpreter::ProcessRouterRole(int argc, char *argv[])
|
||||
}
|
||||
else
|
||||
{
|
||||
ExitNow(error = OT_ERROR_PARSE);
|
||||
ExitNow(error = OT_ERROR_INVALID_ARGS);
|
||||
}
|
||||
|
||||
exit:
|
||||
@@ -2622,7 +2640,7 @@ void Interpreter::ProcessState(int argc, char *argv[])
|
||||
#endif // OPENTHREAD_FTD
|
||||
else
|
||||
{
|
||||
ExitNow(error = OT_ERROR_PARSE);
|
||||
ExitNow(error = OT_ERROR_INVALID_ARGS);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2632,9 +2650,9 @@ exit:
|
||||
|
||||
void Interpreter::ProcessThread(int argc, char *argv[])
|
||||
{
|
||||
otError error = OT_ERROR_PARSE;
|
||||
otError error = OT_ERROR_NONE;
|
||||
|
||||
VerifyOrExit(argc > 0, error = OT_ERROR_PARSE);
|
||||
VerifyOrExit(argc > 0, error = OT_ERROR_INVALID_ARGS);
|
||||
|
||||
if (strcmp(argv[0], "start") == 0)
|
||||
{
|
||||
@@ -2644,6 +2662,10 @@ void Interpreter::ProcessThread(int argc, char *argv[])
|
||||
{
|
||||
SuccessOrExit(error = otThreadSetEnabled(mInstance, false));
|
||||
}
|
||||
else
|
||||
{
|
||||
ExitNow(error = OT_ERROR_INVALID_ARGS);
|
||||
}
|
||||
|
||||
exit:
|
||||
OT_UNUSED_VARIABLE(argc);
|
||||
@@ -2698,7 +2720,7 @@ void Interpreter::ProcessCommissioner(int argc, char *argv[])
|
||||
{
|
||||
otError error = OT_ERROR_NONE;
|
||||
|
||||
VerifyOrExit(argc > 0, error = OT_ERROR_PARSE);
|
||||
VerifyOrExit(argc > 0, error = OT_ERROR_INVALID_ARGS);
|
||||
|
||||
if (strcmp(argv[0], "start") == 0)
|
||||
{
|
||||
@@ -2713,7 +2735,7 @@ void Interpreter::ProcessCommissioner(int argc, char *argv[])
|
||||
otExtAddress addr;
|
||||
const otExtAddress *addrPtr;
|
||||
|
||||
VerifyOrExit(argc > 2, error = OT_ERROR_PARSE);
|
||||
VerifyOrExit(argc > 2, error = OT_ERROR_INVALID_ARGS);
|
||||
|
||||
if (strcmp(argv[2], "*") == 0)
|
||||
{
|
||||
@@ -2727,7 +2749,7 @@ void Interpreter::ProcessCommissioner(int argc, char *argv[])
|
||||
|
||||
if (strcmp(argv[1], "add") == 0)
|
||||
{
|
||||
VerifyOrExit(argc > 3, error = OT_ERROR_PARSE);
|
||||
VerifyOrExit(argc > 3, error = OT_ERROR_INVALID_ARGS);
|
||||
// Timeout parameter is optional - if not specified, use default value.
|
||||
unsigned long timeout = kDefaultJoinerTimeout;
|
||||
|
||||
@@ -2754,7 +2776,7 @@ void Interpreter::ProcessCommissioner(int argc, char *argv[])
|
||||
long period;
|
||||
otIp6Address address;
|
||||
|
||||
VerifyOrExit(argc > 4, error = OT_ERROR_PARSE);
|
||||
VerifyOrExit(argc > 4, error = OT_ERROR_INVALID_ARGS);
|
||||
|
||||
// mask
|
||||
SuccessOrExit(error = ParseLong(argv[1], mask));
|
||||
@@ -2780,7 +2802,7 @@ void Interpreter::ProcessCommissioner(int argc, char *argv[])
|
||||
long scanDuration;
|
||||
otIp6Address address;
|
||||
|
||||
VerifyOrExit(argc > 5, error = OT_ERROR_PARSE);
|
||||
VerifyOrExit(argc > 5, error = OT_ERROR_INVALID_ARGS);
|
||||
|
||||
// mask
|
||||
SuccessOrExit(error = ParseLong(argv[1], mask));
|
||||
@@ -2808,7 +2830,7 @@ void Interpreter::ProcessCommissioner(int argc, char *argv[])
|
||||
long mask;
|
||||
otIp6Address address;
|
||||
|
||||
VerifyOrExit(argc > 3, error = OT_ERROR_PARSE);
|
||||
VerifyOrExit(argc > 3, error = OT_ERROR_INVALID_ARGS);
|
||||
|
||||
// panid
|
||||
SuccessOrExit(error = ParseLong(argv[1], panid));
|
||||
@@ -2851,7 +2873,7 @@ void Interpreter::ProcessCommissioner(int argc, char *argv[])
|
||||
}
|
||||
else if (strcmp(argv[index], "binary") == 0)
|
||||
{
|
||||
VerifyOrExit(++index < argc, error = OT_ERROR_PARSE);
|
||||
VerifyOrExit(++index < argc, error = OT_ERROR_INVALID_ARGS);
|
||||
value = static_cast<long>(strlen(argv[index]) + 1) / 2;
|
||||
VerifyOrExit(static_cast<size_t>(value) <= (sizeof(tlvs) - static_cast<size_t>(length)),
|
||||
error = OT_ERROR_NO_BUFS);
|
||||
@@ -2861,7 +2883,7 @@ void Interpreter::ProcessCommissioner(int argc, char *argv[])
|
||||
}
|
||||
else
|
||||
{
|
||||
ExitNow(error = OT_ERROR_PARSE);
|
||||
ExitNow(error = OT_ERROR_INVALID_ARGS);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2874,7 +2896,7 @@ void Interpreter::ProcessCommissioner(int argc, char *argv[])
|
||||
long value;
|
||||
int length = 0;
|
||||
|
||||
VerifyOrExit(argc > 0, error = OT_ERROR_PARSE);
|
||||
VerifyOrExit(argc > 0, error = OT_ERROR_INVALID_ARGS);
|
||||
|
||||
memset(&dataset, 0, sizeof(dataset));
|
||||
|
||||
@@ -2884,21 +2906,21 @@ void Interpreter::ProcessCommissioner(int argc, char *argv[])
|
||||
|
||||
if (strcmp(argv[index], "locator") == 0)
|
||||
{
|
||||
VerifyOrExit(++index < argc, error = OT_ERROR_PARSE);
|
||||
VerifyOrExit(++index < argc, error = OT_ERROR_INVALID_ARGS);
|
||||
dataset.mIsLocatorSet = true;
|
||||
SuccessOrExit(error = Interpreter::ParseLong(argv[index], value));
|
||||
dataset.mLocator = static_cast<uint16_t>(value);
|
||||
}
|
||||
else if (strcmp(argv[index], "sessionid") == 0)
|
||||
{
|
||||
VerifyOrExit(++index < argc, error = OT_ERROR_PARSE);
|
||||
VerifyOrExit(++index < argc, error = OT_ERROR_INVALID_ARGS);
|
||||
dataset.mIsSessionIdSet = true;
|
||||
SuccessOrExit(error = Interpreter::ParseLong(argv[index], value));
|
||||
dataset.mSessionId = static_cast<uint16_t>(value);
|
||||
}
|
||||
else if (strcmp(argv[index], "steeringdata") == 0)
|
||||
{
|
||||
VerifyOrExit(++index < argc, error = OT_ERROR_PARSE);
|
||||
VerifyOrExit(++index < argc, error = OT_ERROR_INVALID_ARGS);
|
||||
dataset.mIsSteeringDataSet = true;
|
||||
length = static_cast<int>((strlen(argv[index]) + 1) / 2);
|
||||
VerifyOrExit(static_cast<size_t>(length) <= OT_STEERING_DATA_MAX_LENGTH, error = OT_ERROR_NO_BUFS);
|
||||
@@ -2910,14 +2932,14 @@ void Interpreter::ProcessCommissioner(int argc, char *argv[])
|
||||
}
|
||||
else if (strcmp(argv[index], "joinerudpport") == 0)
|
||||
{
|
||||
VerifyOrExit(++index < argc, error = OT_ERROR_PARSE);
|
||||
VerifyOrExit(++index < argc, error = OT_ERROR_INVALID_ARGS);
|
||||
dataset.mIsJoinerUdpPortSet = true;
|
||||
SuccessOrExit(error = Interpreter::ParseLong(argv[index], value));
|
||||
dataset.mJoinerUdpPort = static_cast<uint16_t>(value);
|
||||
}
|
||||
else if (strcmp(argv[index], "binary") == 0)
|
||||
{
|
||||
VerifyOrExit(++index < argc, error = OT_ERROR_PARSE);
|
||||
VerifyOrExit(++index < argc, error = OT_ERROR_INVALID_ARGS);
|
||||
length = static_cast<int>((strlen(argv[index]) + 1) / 2);
|
||||
VerifyOrExit(static_cast<size_t>(length) <= sizeof(tlvs), error = OT_ERROR_NO_BUFS);
|
||||
VerifyOrExit(Interpreter::Hex2Bin(argv[index], tlvs, static_cast<uint16_t>(length)) >= 0,
|
||||
@@ -2925,7 +2947,7 @@ void Interpreter::ProcessCommissioner(int argc, char *argv[])
|
||||
}
|
||||
else
|
||||
{
|
||||
ExitNow(error = OT_ERROR_PARSE);
|
||||
ExitNow(error = OT_ERROR_INVALID_ARGS);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2935,6 +2957,10 @@ void Interpreter::ProcessCommissioner(int argc, char *argv[])
|
||||
{
|
||||
mServer->OutputFormat("%d\r\n", otCommissionerGetSessionId(mInstance));
|
||||
}
|
||||
else
|
||||
{
|
||||
ExitNow(error = OT_ERROR_INVALID_ARGS);
|
||||
}
|
||||
|
||||
exit:
|
||||
AppendResult(error);
|
||||
@@ -2978,12 +3004,12 @@ void Interpreter::ProcessJoiner(int argc, char *argv[])
|
||||
{
|
||||
otError error = OT_ERROR_NONE;
|
||||
|
||||
VerifyOrExit(argc > 0, error = OT_ERROR_PARSE);
|
||||
VerifyOrExit(argc > 0, error = OT_ERROR_INVALID_ARGS);
|
||||
|
||||
if (strcmp(argv[0], "start") == 0)
|
||||
{
|
||||
const char *provisioningUrl;
|
||||
VerifyOrExit(argc > 1, error = OT_ERROR_PARSE);
|
||||
VerifyOrExit(argc > 1, error = OT_ERROR_INVALID_ARGS);
|
||||
provisioningUrl = (argc > 2) ? argv[2] : NULL;
|
||||
otJoinerStart(mInstance, argv[1], provisioningUrl, PACKAGE_NAME, OPENTHREAD_CONFIG_PLATFORM_INFO,
|
||||
PACKAGE_VERSION, NULL, &Interpreter::s_HandleJoinerCallback, this);
|
||||
@@ -2992,6 +3018,10 @@ void Interpreter::ProcessJoiner(int argc, char *argv[])
|
||||
{
|
||||
otJoinerStop(mInstance);
|
||||
}
|
||||
else
|
||||
{
|
||||
ExitNow(error = OT_ERROR_INVALID_ARGS);
|
||||
}
|
||||
|
||||
exit:
|
||||
AppendResult(error);
|
||||
@@ -3002,7 +3032,7 @@ void Interpreter::ProcessJoinerId(int argc, char *argv[])
|
||||
otError error = OT_ERROR_NONE;
|
||||
otExtAddress joinerId;
|
||||
|
||||
VerifyOrExit(argc == 0, error = OT_ERROR_PARSE);
|
||||
VerifyOrExit(argc == 0, error = OT_ERROR_INVALID_ARGS);
|
||||
|
||||
otJoinerGetId(mInstance, &joinerId);
|
||||
OutputBytes(joinerId.m8, sizeof(joinerId));
|
||||
@@ -3496,7 +3526,7 @@ void Interpreter::ProcessNetworkDiagnostic(int argc, char *argv[])
|
||||
uint8_t argvIndex = 0;
|
||||
|
||||
// Include operation, address and type tlv list.
|
||||
VerifyOrExit(argc > 2, error = OT_ERROR_PARSE);
|
||||
VerifyOrExit(argc > 2, error = OT_ERROR_INVALID_ARGS);
|
||||
|
||||
SuccessOrExit(error = otIp6AddressFromString(argv[1], &address));
|
||||
|
||||
@@ -3519,6 +3549,10 @@ void Interpreter::ProcessNetworkDiagnostic(int argc, char *argv[])
|
||||
{
|
||||
otThreadSendDiagnosticReset(mInstance, &address, tlvTypes, count);
|
||||
}
|
||||
else
|
||||
{
|
||||
ExitNow(error = OT_ERROR_INVALID_ARGS);
|
||||
}
|
||||
|
||||
exit:
|
||||
AppendResult(error);
|
||||
|
||||
@@ -243,7 +243,7 @@ otError Coap::ProcessRequest(int argc, char *argv[])
|
||||
}
|
||||
else
|
||||
{
|
||||
ExitNow(error = OT_ERROR_PARSE);
|
||||
ExitNow(error = OT_ERROR_INVALID_ARGS);
|
||||
}
|
||||
|
||||
// Destination IPv6 address
|
||||
|
||||
+32
-32
@@ -259,7 +259,7 @@ otError Dataset::ProcessActiveTimestamp(otInstance *aInstance, int argc, char *a
|
||||
otError error = OT_ERROR_NONE;
|
||||
long value;
|
||||
|
||||
VerifyOrExit(argc > 0, error = OT_ERROR_PARSE);
|
||||
VerifyOrExit(argc > 0, error = OT_ERROR_INVALID_ARGS);
|
||||
SuccessOrExit(error = Interpreter::ParseLong(argv[0], value));
|
||||
sDataset.mActiveTimestamp = static_cast<uint64_t>(value);
|
||||
sDataset.mIsActiveTimestampSet = true;
|
||||
@@ -275,7 +275,7 @@ otError Dataset::ProcessChannel(otInstance *aInstance, int argc, char *argv[])
|
||||
otError error = OT_ERROR_NONE;
|
||||
long value;
|
||||
|
||||
VerifyOrExit(argc > 0, error = OT_ERROR_PARSE);
|
||||
VerifyOrExit(argc > 0, error = OT_ERROR_INVALID_ARGS);
|
||||
SuccessOrExit(error = Interpreter::ParseLong(argv[0], value));
|
||||
sDataset.mChannel = static_cast<uint16_t>(value);
|
||||
sDataset.mIsChannelSet = true;
|
||||
@@ -291,7 +291,7 @@ otError Dataset::ProcessChannelMask(otInstance *aInstance, int argc, char *argv[
|
||||
otError error = OT_ERROR_NONE;
|
||||
long value;
|
||||
|
||||
VerifyOrExit(argc > 0, error = OT_ERROR_PARSE);
|
||||
VerifyOrExit(argc > 0, error = OT_ERROR_INVALID_ARGS);
|
||||
SuccessOrExit(error = Interpreter::ParseLong(argv[0], value));
|
||||
sDataset.mChannelMaskPage0 = static_cast<uint32_t>(value);
|
||||
sDataset.mIsChannelMaskPage0Set = true;
|
||||
@@ -326,7 +326,7 @@ otError Dataset::ProcessCommit(otInstance *aInstance, int argc, char *argv[])
|
||||
}
|
||||
else
|
||||
{
|
||||
ExitNow(error = OT_ERROR_PARSE);
|
||||
ExitNow(error = OT_ERROR_INVALID_ARGS);
|
||||
}
|
||||
|
||||
OT_UNUSED_VARIABLE(aInstance);
|
||||
@@ -340,7 +340,7 @@ otError Dataset::ProcessDelay(otInstance *aInstance, int argc, char *argv[])
|
||||
otError error = OT_ERROR_NONE;
|
||||
long value;
|
||||
|
||||
VerifyOrExit(argc > 0, error = OT_ERROR_PARSE);
|
||||
VerifyOrExit(argc > 0, error = OT_ERROR_INVALID_ARGS);
|
||||
SuccessOrExit(error = Interpreter::ParseLong(argv[0], value));
|
||||
sDataset.mDelay = static_cast<uint32_t>(value);
|
||||
sDataset.mIsDelaySet = true;
|
||||
@@ -356,7 +356,7 @@ otError Dataset::ProcessExtPanId(otInstance *aInstance, int argc, char *argv[])
|
||||
otError error = OT_ERROR_NONE;
|
||||
uint8_t extPanId[OT_EXT_PAN_ID_SIZE];
|
||||
|
||||
VerifyOrExit(argc > 0, error = OT_ERROR_PARSE);
|
||||
VerifyOrExit(argc > 0, error = OT_ERROR_INVALID_ARGS);
|
||||
VerifyOrExit(Interpreter::Hex2Bin(argv[0], extPanId, sizeof(extPanId)) >= 0, error = OT_ERROR_PARSE);
|
||||
|
||||
memcpy(sDataset.mExtendedPanId.m8, extPanId, sizeof(sDataset.mExtendedPanId));
|
||||
@@ -373,7 +373,7 @@ otError Dataset::ProcessMasterKey(otInstance *aInstance, int argc, char *argv[])
|
||||
otError error = OT_ERROR_NONE;
|
||||
uint8_t key[OT_MASTER_KEY_SIZE];
|
||||
|
||||
VerifyOrExit(argc > 0, error = OT_ERROR_PARSE);
|
||||
VerifyOrExit(argc > 0, error = OT_ERROR_INVALID_ARGS);
|
||||
VerifyOrExit((Interpreter::Hex2Bin(argv[0], key, sizeof(key))) == OT_MASTER_KEY_SIZE, error = OT_ERROR_PARSE);
|
||||
|
||||
memcpy(sDataset.mMasterKey.m8, key, sizeof(sDataset.mMasterKey));
|
||||
@@ -390,7 +390,7 @@ otError Dataset::ProcessMeshLocalPrefix(otInstance *aInstance, int argc, char *a
|
||||
otError error = OT_ERROR_NONE;
|
||||
otIp6Address prefix;
|
||||
|
||||
VerifyOrExit(argc > 0, error = OT_ERROR_PARSE);
|
||||
VerifyOrExit(argc > 0, error = OT_ERROR_INVALID_ARGS);
|
||||
SuccessOrExit(error = otIp6AddressFromString(argv[0], &prefix));
|
||||
|
||||
memcpy(sDataset.mMeshLocalPrefix.m8, prefix.mFields.m8, sizeof(sDataset.mMeshLocalPrefix.m8));
|
||||
@@ -407,7 +407,7 @@ otError Dataset::ProcessNetworkName(otInstance *aInstance, int argc, char *argv[
|
||||
otError error = OT_ERROR_NONE;
|
||||
size_t length;
|
||||
|
||||
VerifyOrExit(argc > 0, error = OT_ERROR_PARSE);
|
||||
VerifyOrExit(argc > 0, error = OT_ERROR_INVALID_ARGS);
|
||||
VerifyOrExit((length = strlen(argv[0])) <= OT_NETWORK_NAME_MAX_SIZE, error = OT_ERROR_PARSE);
|
||||
|
||||
memset(&sDataset.mNetworkName, 0, sizeof(sDataset.mNetworkName));
|
||||
@@ -425,7 +425,7 @@ otError Dataset::ProcessPanId(otInstance *aInstance, int argc, char *argv[])
|
||||
otError error = OT_ERROR_NONE;
|
||||
long value;
|
||||
|
||||
VerifyOrExit(argc > 0, error = OT_ERROR_PARSE);
|
||||
VerifyOrExit(argc > 0, error = OT_ERROR_INVALID_ARGS);
|
||||
SuccessOrExit(error = Interpreter::ParseLong(argv[0], value));
|
||||
sDataset.mPanId = static_cast<otPanId>(value);
|
||||
sDataset.mIsPanIdSet = true;
|
||||
@@ -441,7 +441,7 @@ otError Dataset::ProcessPendingTimestamp(otInstance *aInstance, int argc, char *
|
||||
otError error = OT_ERROR_NONE;
|
||||
long value;
|
||||
|
||||
VerifyOrExit(argc > 0, error = OT_ERROR_PARSE);
|
||||
VerifyOrExit(argc > 0, error = OT_ERROR_INVALID_ARGS);
|
||||
SuccessOrExit(error = Interpreter::ParseLong(argv[0], value));
|
||||
sDataset.mPendingTimestamp = static_cast<uint64_t>(value);
|
||||
sDataset.mIsPendingTimestampSet = true;
|
||||
@@ -461,7 +461,7 @@ otError Dataset::ProcessMgmtSetCommand(otInstance *aInstance, int argc, char *ar
|
||||
int length = 0;
|
||||
otIp6Address prefix;
|
||||
|
||||
VerifyOrExit(argc > 0, error = OT_ERROR_PARSE);
|
||||
VerifyOrExit(argc > 0, error = OT_ERROR_INVALID_ARGS);
|
||||
|
||||
memset(&dataset, 0, sizeof(dataset));
|
||||
|
||||
@@ -469,21 +469,21 @@ otError Dataset::ProcessMgmtSetCommand(otInstance *aInstance, int argc, char *ar
|
||||
{
|
||||
if (strcmp(argv[index], "activetimestamp") == 0)
|
||||
{
|
||||
VerifyOrExit(index < argc, error = OT_ERROR_PARSE);
|
||||
VerifyOrExit(index < argc, error = OT_ERROR_INVALID_ARGS);
|
||||
dataset.mIsActiveTimestampSet = true;
|
||||
SuccessOrExit(error = Interpreter::ParseLong(argv[++index], value));
|
||||
dataset.mActiveTimestamp = static_cast<uint64_t>(value);
|
||||
}
|
||||
else if (strcmp(argv[index], "pendingtimestamp") == 0)
|
||||
{
|
||||
VerifyOrExit(index < argc, error = OT_ERROR_PARSE);
|
||||
VerifyOrExit(index < argc, error = OT_ERROR_INVALID_ARGS);
|
||||
dataset.mIsPendingTimestampSet = true;
|
||||
SuccessOrExit(error = Interpreter::ParseLong(argv[++index], value));
|
||||
dataset.mPendingTimestamp = static_cast<uint64_t>(value);
|
||||
}
|
||||
else if (strcmp(argv[index], "masterkey") == 0)
|
||||
{
|
||||
VerifyOrExit(index < argc, error = OT_ERROR_PARSE);
|
||||
VerifyOrExit(index < argc, error = OT_ERROR_INVALID_ARGS);
|
||||
dataset.mIsMasterKeySet = true;
|
||||
VerifyOrExit((length = Interpreter::Hex2Bin(argv[++index], dataset.mMasterKey.m8,
|
||||
sizeof(dataset.mMasterKey.m8))) == OT_MASTER_KEY_SIZE,
|
||||
@@ -492,7 +492,7 @@ otError Dataset::ProcessMgmtSetCommand(otInstance *aInstance, int argc, char *ar
|
||||
}
|
||||
else if (strcmp(argv[index], "networkname") == 0)
|
||||
{
|
||||
VerifyOrExit(index < argc, error = OT_ERROR_PARSE);
|
||||
VerifyOrExit(index < argc, error = OT_ERROR_INVALID_ARGS);
|
||||
dataset.mIsNetworkNameSet = true;
|
||||
VerifyOrExit((length = static_cast<int>(strlen(argv[++index]))) <= OT_NETWORK_NAME_MAX_SIZE,
|
||||
error = OT_ERROR_PARSE);
|
||||
@@ -502,7 +502,7 @@ otError Dataset::ProcessMgmtSetCommand(otInstance *aInstance, int argc, char *ar
|
||||
}
|
||||
else if (strcmp(argv[index], "extpanid") == 0)
|
||||
{
|
||||
VerifyOrExit(index < argc, error = OT_ERROR_PARSE);
|
||||
VerifyOrExit(index < argc, error = OT_ERROR_INVALID_ARGS);
|
||||
dataset.mIsExtendedPanIdSet = true;
|
||||
VerifyOrExit(
|
||||
Interpreter::Hex2Bin(argv[++index], dataset.mExtendedPanId.m8, sizeof(dataset.mExtendedPanId.m8)) >= 0,
|
||||
@@ -510,42 +510,42 @@ otError Dataset::ProcessMgmtSetCommand(otInstance *aInstance, int argc, char *ar
|
||||
}
|
||||
else if (strcmp(argv[index], "localprefix") == 0)
|
||||
{
|
||||
VerifyOrExit(index < argc, error = OT_ERROR_PARSE);
|
||||
VerifyOrExit(index < argc, error = OT_ERROR_INVALID_ARGS);
|
||||
dataset.mIsMeshLocalPrefixSet = true;
|
||||
SuccessOrExit(error = otIp6AddressFromString(argv[++index], &prefix));
|
||||
memcpy(dataset.mMeshLocalPrefix.m8, prefix.mFields.m8, sizeof(dataset.mMeshLocalPrefix.m8));
|
||||
}
|
||||
else if (strcmp(argv[index], "delaytimer") == 0)
|
||||
{
|
||||
VerifyOrExit(index < argc, error = OT_ERROR_PARSE);
|
||||
VerifyOrExit(index < argc, error = OT_ERROR_INVALID_ARGS);
|
||||
dataset.mIsDelaySet = true;
|
||||
SuccessOrExit(error = Interpreter::ParseLong(argv[++index], value));
|
||||
dataset.mDelay = static_cast<uint32_t>(value);
|
||||
}
|
||||
else if (strcmp(argv[index], "panid") == 0)
|
||||
{
|
||||
VerifyOrExit(index < argc, error = OT_ERROR_PARSE);
|
||||
VerifyOrExit(index < argc, error = OT_ERROR_INVALID_ARGS);
|
||||
dataset.mIsPanIdSet = true;
|
||||
SuccessOrExit(error = Interpreter::ParseLong(argv[++index], value));
|
||||
dataset.mPanId = static_cast<otPanId>(value);
|
||||
}
|
||||
else if (strcmp(argv[index], "channel") == 0)
|
||||
{
|
||||
VerifyOrExit(index < argc, error = OT_ERROR_PARSE);
|
||||
VerifyOrExit(index < argc, error = OT_ERROR_INVALID_ARGS);
|
||||
dataset.mIsChannelSet = true;
|
||||
SuccessOrExit(error = Interpreter::ParseLong(argv[++index], value));
|
||||
dataset.mChannel = static_cast<uint16_t>(value);
|
||||
}
|
||||
else if (strcmp(argv[index], "channelmask") == 0)
|
||||
{
|
||||
VerifyOrExit(index < argc, error = OT_ERROR_PARSE);
|
||||
VerifyOrExit(index < argc, error = OT_ERROR_INVALID_ARGS);
|
||||
dataset.mIsChannelMaskPage0Set = true;
|
||||
SuccessOrExit(error = Interpreter::ParseLong(argv[++index], value));
|
||||
dataset.mChannelMaskPage0 = static_cast<uint32_t>(value);
|
||||
}
|
||||
else if (strcmp(argv[index], "binary") == 0)
|
||||
{
|
||||
VerifyOrExit((index + 1) < argc, error = OT_ERROR_PARSE);
|
||||
VerifyOrExit((index + 1) < argc, error = OT_ERROR_INVALID_ARGS);
|
||||
length = static_cast<int>((strlen(argv[++index]) + 1) / 2);
|
||||
VerifyOrExit(static_cast<size_t>(length) <= sizeof(tlvs), error = OT_ERROR_NO_BUFS);
|
||||
VerifyOrExit(Interpreter::Hex2Bin(argv[index], tlvs, static_cast<uint16_t>(length)) >= 0,
|
||||
@@ -553,7 +553,7 @@ otError Dataset::ProcessMgmtSetCommand(otInstance *aInstance, int argc, char *ar
|
||||
}
|
||||
else
|
||||
{
|
||||
ExitNow(error = OT_ERROR_PARSE);
|
||||
ExitNow(error = OT_ERROR_INVALID_ARGS);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -567,7 +567,7 @@ otError Dataset::ProcessMgmtSetCommand(otInstance *aInstance, int argc, char *ar
|
||||
}
|
||||
else
|
||||
{
|
||||
ExitNow(error = OT_ERROR_PARSE);
|
||||
ExitNow(error = OT_ERROR_INVALID_ARGS);
|
||||
}
|
||||
|
||||
OT_UNUSED_VARIABLE(aInstance);
|
||||
@@ -586,7 +586,7 @@ otError Dataset::ProcessMgmtGetCommand(otInstance *aInstance, int argc, char *ar
|
||||
bool destAddrSpecified = false;
|
||||
otIp6Address address;
|
||||
|
||||
VerifyOrExit(argc > 0, error = OT_ERROR_PARSE);
|
||||
VerifyOrExit(argc > 0, error = OT_ERROR_INVALID_ARGS);
|
||||
|
||||
memset(&dataset, 0, sizeof(dataset));
|
||||
|
||||
@@ -632,7 +632,7 @@ otError Dataset::ProcessMgmtGetCommand(otInstance *aInstance, int argc, char *ar
|
||||
}
|
||||
else if (strcmp(argv[index], "binary") == 0)
|
||||
{
|
||||
VerifyOrExit((index + 1) < argc, error = OT_ERROR_PARSE);
|
||||
VerifyOrExit((index + 1) < argc, error = OT_ERROR_INVALID_ARGS);
|
||||
value = static_cast<long>(strlen(argv[++index]) + 1) / 2;
|
||||
VerifyOrExit(static_cast<size_t>(value) <= (sizeof(tlvs) - static_cast<size_t>(length)),
|
||||
error = OT_ERROR_NO_BUFS);
|
||||
@@ -642,13 +642,13 @@ otError Dataset::ProcessMgmtGetCommand(otInstance *aInstance, int argc, char *ar
|
||||
}
|
||||
else if (strcmp(argv[index], "address") == 0)
|
||||
{
|
||||
VerifyOrExit(index < argc, error = OT_ERROR_PARSE);
|
||||
VerifyOrExit(index < argc, error = OT_ERROR_INVALID_ARGS);
|
||||
SuccessOrExit(error = otIp6AddressFromString(argv[++index], &address));
|
||||
destAddrSpecified = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
ExitNow(error = OT_ERROR_PARSE);
|
||||
ExitNow(error = OT_ERROR_INVALID_ARGS);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -664,7 +664,7 @@ otError Dataset::ProcessMgmtGetCommand(otInstance *aInstance, int argc, char *ar
|
||||
}
|
||||
else
|
||||
{
|
||||
ExitNow(error = OT_ERROR_PARSE);
|
||||
ExitNow(error = OT_ERROR_INVALID_ARGS);
|
||||
}
|
||||
|
||||
OT_UNUSED_VARIABLE(aInstance);
|
||||
@@ -678,7 +678,7 @@ otError Dataset::ProcessPSKc(otInstance *aInstance, int argc, char *argv[])
|
||||
otError error = OT_ERROR_NONE;
|
||||
uint16_t length;
|
||||
|
||||
VerifyOrExit(argc > 0, error = OT_ERROR_PARSE);
|
||||
VerifyOrExit(argc > 0, error = OT_ERROR_INVALID_ARGS);
|
||||
length = static_cast<uint16_t>((strlen(argv[0]) + 1) / 2);
|
||||
VerifyOrExit(length <= OT_PSKC_MAX_SIZE, error = OT_ERROR_NO_BUFS);
|
||||
VerifyOrExit(Interpreter::Hex2Bin(argv[0], sDataset.mPSKc.m8 + OT_PSKC_MAX_SIZE - length, length) == length,
|
||||
@@ -696,7 +696,7 @@ otError Dataset::ProcessSecurityPolicy(otInstance *aInstance, int argc, char *ar
|
||||
otError error = OT_ERROR_NONE;
|
||||
long value;
|
||||
|
||||
VerifyOrExit(argc > 0, error = OT_ERROR_PARSE);
|
||||
VerifyOrExit(argc > 0, error = OT_ERROR_INVALID_ARGS);
|
||||
|
||||
SuccessOrExit(error = Interpreter::ParseLong(argv[0], value));
|
||||
sDataset.mSecurityPolicy.mRotationTime = static_cast<uint16_t>(value);
|
||||
|
||||
@@ -73,7 +73,7 @@ otError UdpExample::ProcessBind(int argc, char *argv[])
|
||||
otSockAddr sockaddr;
|
||||
long value;
|
||||
|
||||
VerifyOrExit(argc == 2, error = OT_ERROR_PARSE);
|
||||
VerifyOrExit(argc == 2, error = OT_ERROR_INVALID_ARGS);
|
||||
|
||||
memset(&sockaddr, 0, sizeof(sockaddr));
|
||||
|
||||
@@ -98,7 +98,7 @@ otError UdpExample::ProcessConnect(int argc, char *argv[])
|
||||
otSockAddr sockaddr;
|
||||
long value;
|
||||
|
||||
VerifyOrExit(argc == 2, error = OT_ERROR_PARSE);
|
||||
VerifyOrExit(argc == 2, error = OT_ERROR_INVALID_ARGS);
|
||||
|
||||
memset(&sockaddr, 0, sizeof(sockaddr));
|
||||
|
||||
@@ -142,7 +142,7 @@ otError UdpExample::ProcessSend(int argc, char *argv[])
|
||||
|
||||
memset(&messageInfo, 0, sizeof(messageInfo));
|
||||
|
||||
VerifyOrExit(argc == 1 || argc == 3, error = OT_ERROR_PARSE);
|
||||
VerifyOrExit(argc == 1 || argc == 3, error = OT_ERROR_INVALID_ARGS);
|
||||
|
||||
if (argc == 3)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user