Fixed bug in ZMQ JSON-RPC method field

This commit is contained in:
Lee Clagett 2020-02-28 16:45:51 -05:00
parent 39e1890276
commit 68a6507c3f
3 changed files with 70 additions and 4 deletions

View file

@ -52,6 +52,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;
}
}
rapidjson::Value Message::toJson(rapidjson::Document& doc) const
@ -120,7 +130,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
@ -151,8 +161,7 @@ std::string FullMessage::getJson()
std::string FullMessage::getRequestType() const
{
OBJECT_HAS_MEMBER_OR_THROW(doc, method_field)
return doc[method_field].GetString();
return get_method_field(doc).GetString();
}
rapidjson::Value& FullMessage::getMessage()