xrpld
Loading...
Searching...
No Matches
PathFind.cpp
1#include <xrpld/app/ledger/LedgerMaster.h>
2#include <xrpld/app/main/Application.h>
3#include <xrpld/rpc/Context.h>
4#include <xrpld/rpc/detail/PathRequestManager.h>
5
6#include <xrpl/json/json_value.h>
7#include <xrpl/protocol/ErrorCodes.h>
8#include <xrpl/protocol/RPCErr.h>
9#include <xrpl/protocol/jss.h>
10#include <xrpl/resource/Fees.h>
11#include <xrpl/server/InfoSub.h>
12
13namespace xrpl {
14
15json::Value
17{
18 if (context.app.config().pathSearchMax == 0)
20
21 auto lpLedger = context.ledgerMaster.getClosedLedger();
22
23 if (!context.params.isMember(jss::subcommand) || !context.params[jss::subcommand].isString())
24 {
26 }
27
28 if (!context.infoSub)
29 return rpcError(RpcNoEvents);
30
31 context.infoSub->setApiVersion(context.apiVersion);
32
33 auto sSubCommand = context.params[jss::subcommand].asString();
34
35 if (sSubCommand == "create")
36 {
38 context.infoSub->clearRequest();
40 context.infoSub, lpLedger, context.params);
41 }
42
43 if (sSubCommand == "close")
44 {
45 InfoSubRequest::pointer const request = context.infoSub->getRequest();
46
47 if (!request)
49
50 context.infoSub->clearRequest();
51 return request->doClose();
52 }
53
54 if (sSubCommand == "status")
55 {
56 InfoSubRequest::pointer const request = context.infoSub->getRequest();
57
58 if (!request)
60
61 return request->doStatus(context.params);
62 }
63
65}
66
67} // namespace xrpl
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
int pathSearchMax
Definition Config.h:184
std::shared_ptr< InfoSubRequest > pointer
Definition InfoSub.h:19
virtual json::Value doClose()=0
virtual json::Value doStatus(json::Value const &)=0
void clearRequest()
Definition InfoSub.cpp:183
void setApiVersion(unsigned int apiVersion)
Definition InfoSub.cpp:201
std::shared_ptr< InfoSubRequest > const & getRequest()
Definition InfoSub.cpp:195
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)
virtual PathRequestManager & getPathRequestManager()=0
Charge const kFeeHeavyBurdenRpc
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition algorithm.h:5
@ RpcNotSupported
Definition ErrorCodes.h:114
@ RpcNoPfRequest
Definition ErrorCodes.h:68
@ RpcNoEvents
Definition ErrorCodes.h:36
@ RpcInvalidParams
Definition ErrorCodes.h:66
json::Value rpcError(ErrorCodeI iError)
Definition RPCErr.cpp:13
json::Value doPathFind(RPC::JsonContext &)
Definition PathFind.cpp:16
Application & app
Definition Context.h:21
InfoSub::pointer infoSub
Definition Context.h:28
Resource::Charge & loadType
Definition Context.h:22
unsigned int apiVersion
Definition Context.h:29
LedgerMaster & ledgerMaster
Definition Context.h:24
json::Value params
Definition Context.h:43