50constexpr const char error_field[] =
"error";
51constexpr const char id_field[] =
"id";
52constexpr const char method_field[] =
"method";
53constexpr const char params_field[] =
"params";
54constexpr const char result_field[] =
"result";
59 rapidjson::Value val(rapidjson::kObjectType);
61 auto& al = doc.GetAllocator();
63 val.AddMember(
"status", rapidjson::StringRef(
status.c_str()), al);
64 val.AddMember(
"error_details", rapidjson::StringRef(
error_details.c_str()), al);
82 doc.AddMember(method_field, rapidjson::StringRef(request.c_str()), doc.GetAllocator());
83 doc.AddMember(params_field,
message->toJson(doc), doc.GetAllocator());
86 doc.AddMember(
"jsonrpc", rapidjson::Value(
"2.0"), doc.GetAllocator());
94 doc.AddMember(
"jsonrpc",
"2.0", doc.GetAllocator());
98 doc.AddMember(result_field,
message->toJson(doc), doc.GetAllocator());
113 doc.Parse(json_string.c_str());
114 if (doc.HasParseError() || !doc.IsObject())
116 throw cryptonote::json::PARSE_FAIL();
128 if (!doc.HasMember(result_field) && !doc.HasMember(error_field))
130 throw cryptonote::json::MISSING_KEY(
"error/result");
138 if (!doc.HasMember(id_field))
140 doc.AddMember(id_field, rapidjson::Value(
"unused"), doc.GetAllocator());
143 rapidjson::StringBuffer
buf;
145 rapidjson::Writer<rapidjson::StringBuffer> writer(
buf);
149 return std::string(
buf.GetString(),
buf.GetSize());
155 return doc[method_field].GetString();
160 if (doc.HasMember(params_field))
162 return doc[params_field];
164 else if (doc.HasMember(result_field))
166 return doc[result_field];
171 return doc[error_field];
179 return rapidjson::Value(val, doc.GetAllocator());
185 return doc[id_field];
190 auto itr = doc.FindMember(id_field);
191 if (itr != doc.MemberEnd())
197 doc.AddMember(id_field,
id, doc.GetAllocator());
205 if (doc.HasMember(error_field))
242 auto& doc = full_message->doc;
243 auto& al = full_message->doc.GetAllocator();
248 doc.AddMember(
"jsonrpc",
"2.0", al);
252 err.
error_str =
"RPC request timed out.";
263 fail.
error_details = std::string(
"\"") + request +
"\" is not a valid request.";
267 return fail_response.
getJson();
270std::string
BAD_REQUEST(
const std::string& request, rapidjson::Value&
id)
274 fail.
error_details = std::string(
"\"") + request +
"\" is not a valid request.";
278 return fail_response.
getJson();
281std::string
BAD_JSON(
const std::string& error_details)
289 return fail_response.
getJson();
rapidjson::Value & getID()
static FullMessage * timeoutMessage()
FullMessage(FullMessage &&rhs) noexcept
rapidjson::Value & getMessage()
static FullMessage responseMessage(Message *message)
rapidjson::Value getMessageCopy()
std::string getRequestType() const
static FullMessage requestMessage(const std::string &request, Message *message)
cryptonote::rpc::error getError()
void setID(rapidjson::Value &id)
static const char * STATUS_FAILED
static const char * STATUS_OK
static const char * STATUS_BAD_JSON
static const char * STATUS_RETRY
virtual void fromJson(rapidjson::Value &val)
std::string error_details
virtual rapidjson::Value toJson(rapidjson::Document &doc) const
static const char * STATUS_BAD_REQUEST
std::string message("Message requiring signing")
#define GET_FROM_JSON_OBJECT(source, dst, key)
#define OBJECT_HAS_MEMBER_OR_THROW(val, key)
#define INSERT_INTO_JSON_OBJECT(jsonVal, doc, key, source)
std::string BAD_REQUEST(const std::string &request)
std::string BAD_JSON(const std::string &error_details)
Holds cryptonote related classes and helpers.