20 #include <ripple/app/ledger/LedgerMaster.h>
21 #include <ripple/app/main/Application.h>
22 #include <ripple/app/misc/NetworkOPs.h>
23 #include <ripple/basics/Log.h>
24 #include <ripple/basics/PerfLog.h>
25 #include <ripple/basics/contract.h>
26 #include <ripple/core/Config.h>
27 #include <ripple/core/JobQueue.h>
28 #include <ripple/json/Object.h>
29 #include <ripple/json/to_string.h>
30 #include <ripple/net/InfoSub.h>
31 #include <ripple/net/RPCErr.h>
32 #include <ripple/protocol/jss.h>
33 #include <ripple/resource/Fees.h>
34 #include <ripple/rpc/RPCHandler.h>
35 #include <ripple/rpc/Role.h>
36 #include <ripple/rpc/impl/Handler.h>
37 #include <ripple/rpc/impl/Tuning.h>
127 fillHandler(JsonContext& context, Handler
const*& result)
133 int jc = context.app.getJobQueue().getJobCountGE(
jtCLIENT);
136 JLOG(context.j.debug()) <<
"Too busy for command: " << jc;
141 if (!context.params.isMember(jss::command) &&
142 !context.params.isMember(jss::method))
144 if (context.params.isMember(jss::command) &&
145 context.params.isMember(jss::method))
147 if (context.params[jss::command].asString() !=
148 context.params[jss::method].asString())
152 std::string strCommand = context.params.isMember(jss::command)
153 ? context.params[jss::command].asString()
154 : context.params[jss::method].asString();
156 JLOG(context.j.trace()) <<
"COMMAND:" << strCommand;
157 JLOG(context.j.trace()) <<
"REQUEST:" << context.params;
158 auto handler =
getHandler(context.apiVersion, strCommand);
176 template <
class Object,
class Method>
179 JsonContext& context,
185 auto& perfLog = context.app.getPerfLog();
189 perfLog.rpcStart(name, curId);
191 context.app.getJobQueue().makeLoadEvent(
jtGENERIC,
"cmd:" + name);
193 auto ret = method(context, result);
194 perfLog.rpcFinish(name, curId);
199 perfLog.rpcError(name, curId);
200 JLOG(context.j.info()) <<
"Caught throw: " << e.
what();
215 Handler const* handler =
nullptr;
216 if (
auto error = fillHandler(context, handler))
228 <<
"start command: " << handler->
name_
232 auto ret = callMethod(context, method, handler->
name_, result);
235 <<
"finish command: " << handler->
name_
243 return callMethod(context, method, handler->
name_, result);
258 return handler->role_;