// Copyright (c) 2011-2016 The Cryptonote developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. #pragma once #include #include #include #include "Logging/ILogger.h" #include "Logging/LoggerRef.h" #include "Rpc/HttpServer.h" namespace CryptoNote { class HttpResponse; class HttpRequest; } namespace Common { class JsonValue; } namespace System { class TcpConnection; } namespace CryptoNote { class JsonRpcServer : HttpServer { public: JsonRpcServer(System::Dispatcher& sys, System::Event& stopEvent, Logging::ILogger& loggerGroup); JsonRpcServer(const JsonRpcServer&) = delete; void start(const std::string& bindAddress, uint16_t bindPort); protected: static void makeErrorResponse(const std::error_code& ec, Common::JsonValue& resp); static void makeMethodNotFoundResponse(Common::JsonValue& resp); static void makeGenericErrorReponse(Common::JsonValue& resp, const char* what, int errorCode = -32001); static void fillJsonResponse(const Common::JsonValue& v, Common::JsonValue& resp); static void prepareJsonResponse(const Common::JsonValue& req, Common::JsonValue& resp); static void makeJsonParsingErrorResponse(Common::JsonValue& resp); virtual void processJsonRpcRequest(const Common::JsonValue& req, Common::JsonValue& resp) = 0; private: // HttpServer virtual void processRequest(const CryptoNote::HttpRequest& request, CryptoNote::HttpResponse& response) override; System::Dispatcher& system; System::Event& stopEvent; Logging::LoggerRef logger; }; } //namespace CryptoNote