void JsonRpcServer::processRequest(const CryptoNote::HttpRequest& req, CryptoNote::HttpResponse& resp) { try { logger(Logging::TRACE) << "HTTP request came: \n" << req; if (req.getUrl() == "/json_rpc") { std::istringstream jsonInputStream(req.getBody()); Common::JsonValue jsonRpcRequest; Common::JsonValue jsonRpcResponse(Common::JsonValue::OBJECT); try { jsonInputStream >> jsonRpcRequest; } catch (std::runtime_error&) { logger(Logging::DEBUGGING) << "Couldn't parse request: \"" << req.getBody() << "\""; makeJsonParsingErrorResponse(jsonRpcResponse); resp.setStatus(CryptoNote::HttpResponse::STATUS_200); resp.setBody(jsonRpcResponse.toString()); return; } processJsonRpcRequest(jsonRpcRequest, jsonRpcResponse); std::ostringstream jsonOutputStream; jsonOutputStream << jsonRpcResponse; resp.setStatus(CryptoNote::HttpResponse::STATUS_200); resp.setBody(jsonOutputStream.str()); } else { logger(Logging::WARNING) << "Requested url \"" << req.getUrl() << "\" is not found"; resp.setStatus(CryptoNote::HttpResponse::STATUS_404); return; } } catch (std::exception& e) {
void wallet_rpc_server::processRequest(const CryptoNote::HttpRequest& request, CryptoNote::HttpResponse& response) { using namespace CryptoNote::JsonRpc; JsonRpcRequest jsonRequest; JsonRpcResponse jsonResponse; try { jsonRequest.parseRequest(request.getBody()); jsonResponse.setId(jsonRequest.getId()); static std::unordered_map<std::string, JsonMemberMethod> s_methods = { { "getbalance", makeMemberMethod(&wallet_rpc_server::on_getbalance) }, { "transfer", makeMemberMethod(&wallet_rpc_server::on_transfer) }, { "store", makeMemberMethod(&wallet_rpc_server::on_store) }, { "get_messages", makeMemberMethod(&wallet_rpc_server::on_get_messages) }, { "get_payments", makeMemberMethod(&wallet_rpc_server::on_get_payments) }, { "get_transfers", makeMemberMethod(&wallet_rpc_server::on_get_transfers) }, { "get_height", makeMemberMethod(&wallet_rpc_server::on_get_height) }, { "reset", makeMemberMethod(&wallet_rpc_server::on_reset) } }; auto it = s_methods.find(jsonRequest.getMethod()); if (it == s_methods.end()) { throw JsonRpcError(errMethodNotFound); } it->second(this, jsonRequest, jsonResponse); } catch (const JsonRpcError& err) { jsonResponse.setError(err); } catch (const std::exception& e) { jsonResponse.setError(JsonRpcError(WALLET_RPC_ERROR_CODE_UNKNOWN_ERROR, e.what())); } response.setBody(jsonResponse.getBody()); }