aboutsummaryrefslogtreecommitdiff
path: root/src/rpc
diff options
context:
space:
mode:
authorluigi1111 <luigi1111w@gmail.com>2020-04-04 13:01:15 -0500
committerluigi1111 <luigi1111w@gmail.com>2020-04-04 13:01:15 -0500
commit5757d992081fd650e241ae40a342d69d8fe9da61 (patch)
tree8b174dfefd1dabdc9e12c94927ea5580ef60cd46 /src/rpc
parentMerge pull request #6357 (diff)
parentFixed bug in ZMQ JSON-RPC method field (diff)
downloadmonero-5757d992081fd650e241ae40a342d69d8fe9da61.tar.xz
Merge pull request #6361
68a6507 Fixed bug in ZMQ JSON-RPC method field (vtnerd)
Diffstat (limited to 'src/rpc')
-rw-r--r--src/rpc/message.cpp15
1 files changed, 12 insertions, 3 deletions
diff --git a/src/rpc/message.cpp b/src/rpc/message.cpp
index a3df7fb56..5b6a1c05b 100644
--- a/src/rpc/message.cpp
+++ b/src/rpc/message.cpp
@@ -50,6 +50,16 @@ constexpr const char id_field[] = "id";
constexpr const char method_field[] = "method";
constexpr const char params_field[] = "params";
constexpr const char result_field[] = "result";
+
+const rapidjson::Value& get_method_field(const rapidjson::Value& src)
+{
+ const auto member = src.FindMember(method_field);
+ if (member == src.MemberEnd())
+ throw cryptonote::json::MISSING_KEY{method_field};
+ if (!member->value.IsString())
+ throw cryptonote::json::WRONG_TYPE{"Expected string"};
+ return member->value;
+}
}
void Message::toJson(rapidjson::Writer<rapidjson::StringBuffer>& dest) const
@@ -81,7 +91,7 @@ FullMessage::FullMessage(const std::string& json_string, bool request)
if (request)
{
- OBJECT_HAS_MEMBER_OR_THROW(doc, method_field)
+ get_method_field(doc); // throws on errors
OBJECT_HAS_MEMBER_OR_THROW(doc, params_field)
}
else
@@ -95,8 +105,7 @@ FullMessage::FullMessage(const std::string& json_string, bool request)
std::string FullMessage::getRequestType() const
{
- OBJECT_HAS_MEMBER_OR_THROW(doc, method_field)
- return doc[method_field].GetString();
+ return get_method_field(doc).GetString();
}
const rapidjson::Value& FullMessage::getMessage() const