rippled
Loading...
Searching...
No Matches
PathFind.cpp
1#include <xrpld/app/ledger/LedgerMaster.h>
2#include <xrpld/app/main/Application.h>
3#include <xrpld/app/paths/PathRequests.h>
4#include <xrpld/rpc/Context.h>
5
6#include <xrpl/protocol/ErrorCodes.h>
7#include <xrpl/protocol/RPCErr.h>
8#include <xrpl/protocol/jss.h>
9#include <xrpl/resource/Fees.h>
10
11namespace xrpl {
12
15{
16 if (context.app.config().PATH_SEARCH_MAX == 0)
18
19 auto lpLedger = context.ledgerMaster.getClosedLedger();
20
21 if (!context.params.isMember(jss::subcommand) || !context.params[jss::subcommand].isString())
22 {
24 }
25
26 if (!context.infoSub)
27 return rpcError(rpcNO_EVENTS);
28
29 context.infoSub->setApiVersion(context.apiVersion);
30
31 auto sSubCommand = context.params[jss::subcommand].asString();
32
33 if (sSubCommand == "create")
34 {
36 context.infoSub->clearRequest();
37 return context.app.getPathRequests().makePathRequest(context.infoSub, lpLedger, context.params);
38 }
39
40 if (sSubCommand == "close")
41 {
42 InfoSubRequest::pointer request = context.infoSub->getRequest();
43
44 if (!request)
46
47 context.infoSub->clearRequest();
48 return request->doClose();
49 }
50
51 if (sSubCommand == "status")
52 {
53 InfoSubRequest::pointer request = context.infoSub->getRequest();
54
55 if (!request)
57
58 return request->doStatus(context.params);
59 }
60
62}
63
64} // namespace xrpl
Represents a JSON value.
Definition json_value.h:131
bool isString() const
std::string asString() const
Returns the unquoted string value.
bool isMember(char const *key) const
Return true if the object has a member named key.
virtual Config & config()=0
virtual PathRequests & getPathRequests()=0
int PATH_SEARCH_MAX
Definition Config.h:180
void clearRequest()
Definition InfoSub.cpp:101
void setApiVersion(unsigned int apiVersion)
Definition InfoSub.cpp:119
std::shared_ptr< InfoSubRequest > const & getRequest()
Definition InfoSub.cpp:113
std::shared_ptr< Ledger const > getClosedLedger()
Json::Value makePathRequest(std::shared_ptr< InfoSub > const &subscriber, std::shared_ptr< ReadView const > const &ledger, Json::Value const &request)
Charge const feeHeavyBurdenRPC
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition algorithm.h:6
Json::Value doPathFind(RPC::JsonContext &)
Definition PathFind.cpp:14
Json::Value rpcError(error_code_i iError)
Definition RPCErr.cpp:12
@ rpcNO_PF_REQUEST
Definition ErrorCodes.h:67
@ rpcNO_EVENTS
Definition ErrorCodes.h:35
@ rpcNOT_SUPPORTED
Definition ErrorCodes.h:113
@ rpcINVALID_PARAMS
Definition ErrorCodes.h:65
Application & app
Definition Context.h:22
InfoSub::pointer infoSub
Definition Context.h:29
Resource::Charge & loadType
Definition Context.h:23
unsigned int apiVersion
Definition Context.h:30
LedgerMaster & ledgerMaster
Definition Context.h:25
Json::Value params
Definition Context.h:44