summaryrefslogtreecommitdiffstats
path: root/src/rpc-server
diff options
context:
space:
mode:
Diffstat (limited to 'src/rpc-server')
-rw-r--r--src/rpc-server/commands/trex_rpc_cmd_stream.cpp44
-rw-r--r--src/rpc-server/commands/trex_rpc_cmd_test.cpp5
-rw-r--r--src/rpc-server/trex_rpc_cmd.cpp20
-rw-r--r--src/rpc-server/trex_rpc_cmd_api.h3
4 files changed, 29 insertions, 43 deletions
diff --git a/src/rpc-server/commands/trex_rpc_cmd_stream.cpp b/src/rpc-server/commands/trex_rpc_cmd_stream.cpp
index 305ccc17..a1c3bb99 100644
--- a/src/rpc-server/commands/trex_rpc_cmd_stream.cpp
+++ b/src/rpc-server/commands/trex_rpc_cmd_stream.cpp
@@ -29,22 +29,6 @@ limitations under the License.
using namespace std;
-/**
- * simple parser of string to number
- * only difference is that it enforces whole number
- * and not partial
- *
- */
-static uint64_t str2num(const string &str) {
- size_t index;
-
- uint64_t num = std::stoull(str, &index, 0);
- if (index != str.size()) {
- throw invalid_argument("could not parse string to number");
- }
-
- return (num);
-}
/***************************
* add new stream
@@ -213,31 +197,9 @@ TrexRpcCmdAddStream::parse_vm_instr_flow_var(const Json::Value &inst, TrexStream
throw TrexRpcException("internal error");
}
- std::string init_value_str = parse_string(inst, "init_value", result);
- std::string min_value_str = parse_string(inst, "min_value", result);
- std::string max_value_str = parse_string(inst, "max_value", result);
-
- uint64_t init_value = 0;
- uint64_t min_value = 0;
- uint64_t max_value = 0;
-
- try {
- init_value = str2num(init_value_str);
- } catch (invalid_argument) {
- generate_parse_err(result, "failed to parse 'init_value' as a number");
- }
-
- try {
- min_value = str2num(min_value_str);
- } catch (invalid_argument) {
- generate_parse_err(result, "failed to parse 'min_value' as a number");
- }
-
- try {
- max_value = str2num(max_value_str);
- } catch (invalid_argument) {
- generate_parse_err(result, "failed to parse 'max_value' as a number");
- }
+ uint64_t init_value = parse_uint64(inst, "init_value", result);
+ uint64_t min_value = parse_uint64(inst, "min_value", result);
+ uint64_t max_value = parse_uint64(inst, "max_value", result);
stream->m_vm.add_instruction(new StreamVmInstructionFlowMan(flow_var_name,
flow_var_size,
diff --git a/src/rpc-server/commands/trex_rpc_cmd_test.cpp b/src/rpc-server/commands/trex_rpc_cmd_test.cpp
index 3cdddd31..ad4d3bb1 100644
--- a/src/rpc-server/commands/trex_rpc_cmd_test.cpp
+++ b/src/rpc-server/commands/trex_rpc_cmd_test.cpp
@@ -21,6 +21,7 @@ limitations under the License.
#include "trex_rpc_cmds.h"
#include <iostream>
#include <sstream>
+#include <json/json.h>
using namespace std;
@@ -31,7 +32,7 @@ using namespace std;
trex_rpc_cmd_rc_e
TrexRpcCmdTestAdd::_run(const Json::Value &params, Json::Value &result) {
- result["result"] = parse_int(params, "x", result) + parse_int(params, "y", result);
+ result["result"] = Json::Value::UInt64(parse_uint64(params, "x", result) + parse_uint64(params, "y", result));
return (TREX_RPC_CMD_OK);
}
@@ -44,7 +45,7 @@ TrexRpcCmdTestAdd::_run(const Json::Value &params, Json::Value &result) {
trex_rpc_cmd_rc_e
TrexRpcCmdTestSub::_run(const Json::Value &params, Json::Value &result) {
- result["result"] = parse_int(params, "x", result) - parse_int(params, "y", result);
+ result["result"] = Json::Value::UInt64(parse_uint64(params, "x", result) - parse_uint64(params, "y", result));
return (TREX_RPC_CMD_OK);
}
diff --git a/src/rpc-server/trex_rpc_cmd.cpp b/src/rpc-server/trex_rpc_cmd.cpp
index 8f0ffbad..b5dd121c 100644
--- a/src/rpc-server/trex_rpc_cmd.cpp
+++ b/src/rpc-server/trex_rpc_cmd.cpp
@@ -98,6 +98,8 @@ TrexRpcCommand::type_to_str(field_type_e type) {
return "uint16";
case FIELD_TYPE_UINT32:
return "uint32";
+ case FIELD_TYPE_UINT64:
+ return "uint64";
case FIELD_TYPE_BOOL:
return "bool";
case FIELD_TYPE_INT:
@@ -179,6 +181,18 @@ TrexRpcCommand::parse_uint32(const Json::Value &parent, int index, Json::Value &
return parent[index].asUInt();
}
+uint64_t
+TrexRpcCommand::parse_uint64(const Json::Value &parent, const std::string &name, Json::Value &result) {
+ check_field_type(parent, name, FIELD_TYPE_UINT64, result);
+ return parent[name].asUInt64();
+}
+
+uint64_t
+TrexRpcCommand::parse_uint64(const Json::Value &parent, int index, Json::Value &result) {
+ check_field_type(parent, index, FIELD_TYPE_UINT64, result);
+ return parent[index].asUInt64();
+}
+
int
TrexRpcCommand::parse_int(const Json::Value &parent, const std::string &name, Json::Value &result) {
check_field_type(parent, name, FIELD_TYPE_INT, result);
@@ -286,6 +300,12 @@ TrexRpcCommand::check_field_type_common(const Json::Value &field, const std::str
}
break;
+ case FIELD_TYPE_UINT64:
+ if (!field.isInt64()) {
+ rc = false;
+ }
+ break;
+
case FIELD_TYPE_BOOL:
if (!field.isBool()) {
rc = false;
diff --git a/src/rpc-server/trex_rpc_cmd_api.h b/src/rpc-server/trex_rpc_cmd_api.h
index f81981d4..7cbdf4ff 100644
--- a/src/rpc-server/trex_rpc_cmd_api.h
+++ b/src/rpc-server/trex_rpc_cmd_api.h
@@ -100,6 +100,7 @@ protected:
FIELD_TYPE_BYTE,
FIELD_TYPE_UINT16,
FIELD_TYPE_UINT32,
+ FIELD_TYPE_UINT64,
FIELD_TYPE_INT,
FIELD_TYPE_DOUBLE,
FIELD_TYPE_BOOL,
@@ -138,6 +139,7 @@ protected:
uint8_t parse_byte(const Json::Value &parent, const std::string &name, Json::Value &result);
uint16_t parse_uint16(const Json::Value &parent, const std::string &name, Json::Value &result);
uint32_t parse_uint32(const Json::Value &parent, const std::string &name, Json::Value &result);
+ uint64_t parse_uint64(const Json::Value &parent, const std::string &name, Json::Value &result);
int parse_int(const Json::Value &parent, const std::string &name, Json::Value &result);
double parse_double(const Json::Value &parent, const std::string &name, Json::Value &result);
bool parse_bool(const Json::Value &parent, const std::string &name, Json::Value &result);
@@ -148,6 +150,7 @@ protected:
uint8_t parse_byte(const Json::Value &parent, int index, Json::Value &result);
uint16_t parse_uint16(const Json::Value &parent, int index, Json::Value &result);
uint32_t parse_uint32(const Json::Value &parent, int index, Json::Value &result);
+ uint64_t parse_uint64(const Json::Value &parent, int index, Json::Value &result);
int parse_int(const Json::Value &parent, int index, Json::Value &result);
double parse_double(const Json::Value &parent, int index, Json::Value &result);
bool parse_bool(const Json::Value &parent, int index, Json::Value &result);