xrpld
Loading...
Searching...
No Matches
PathRequest.h
1#pragma once
2
3#include <xrpld/rpc/detail/AssetCache.h>
4#include <xrpld/rpc/detail/Pathfinder.h>
5
6#include <xrpl/basics/base_uint.h>
7#include <xrpl/json/json_value.h>
8#include <xrpl/ledger/Ledger.h>
9#include <xrpl/protocol/PathAsset.h>
10#include <xrpl/protocol/UintTypes.h>
11#include <xrpl/server/InfoSub.h>
12
13#include <map>
14#include <mutex>
15#include <optional>
16#include <set>
17
18namespace xrpl {
19
20// A pathfinding request submitted by a client
21// The request issuer must maintain a strong pointer
22
23class AssetCache;
25
26// Return values from parseJson <0 = invalid, >0 = valid
27#define PFR_PJ_INVALID (-1)
28#define PFR_PJ_NOCHANGE 0
29
30class PathRequest final : public InfoSubRequest,
31 public std::enable_shared_from_this<PathRequest>,
32 public CountedObject<PathRequest>
33{
34public:
37 using ref = pointer const&;
38 using wref = wptr const&;
39
40public:
41 // path_find semantics
42 // Subscriber is updated
44 Application& app,
45 std::shared_ptr<InfoSub> const& subscriber,
46 int id,
48 beast::Journal journal);
49
50 // ripple_path_find semantics
51 // Completion function is called after path update is complete
53 Application& app,
54 std::function<void(void)> completion,
55 Resource::Consumer& consumer,
56 int id,
58 beast::Journal journal);
59
60 ~PathRequest() override;
61
62 bool
63 isNew();
64 bool
65 needsUpdate(bool newOnly, LedgerIndex index);
66
67 // Called when the PathRequest update is complete.
68 void
70
73
75 doClose() override;
77 doStatus(json::Value const&) override;
78 void
79 doAborting() const;
80
81 // update jvStatus
85 bool fast,
86 std::function<bool(void)> const& continueCallback = {});
88 getSubscriber() const;
89 bool
91
92private:
93 bool
95
100 PathAsset const&,
101 STAmount const&,
102 int const,
103 std::function<bool(void)> const&);
104
108 bool
109 findPaths(
111 int const,
113 std::function<bool(void)> const&);
114
115 int
116 parseJson(json::Value const&);
117
120
122
124
125 std::weak_ptr<InfoSub> wpSubscriber_; // Who this request came from
127 Resource::Consumer& consumer_; // Charge according to source currencies
128
130 json::Value jvStatus_; // Last result
131
132 // Client request parameters
137
140
142
144
148
151
152 int const iIdentifier_;
153
154 std::chrono::steady_clock::time_point const created_;
155 std::chrono::steady_clock::time_point quickReply_;
156 std::chrono::steady_clock::time_point fullReply_;
157
158 static unsigned int const kMaxPaths = 4;
159};
160
161} // namespace xrpl
A generic endpoint for log messages.
Definition Journal.h:38
Represents a JSON value.
Definition json_value.h:130
std::shared_ptr< InfoSub > pointer
Definition InfoSub.h:47
json::Value jvId_
PathRequest(Application &app, std::shared_ptr< InfoSub > const &subscriber, int id, PathRequestManager &, beast::Journal journal)
LedgerIndex lastIndex_
std::recursive_mutex lock_
void doAborting() const
std::weak_ptr< PathRequest > wptr
Definition PathRequest.h:35
Resource::Consumer & consumer_
std::chrono::steady_clock::time_point quickReply_
int parseJson(json::Value const &)
static unsigned int const kMaxPaths
int const iIdentifier_
bool isValid(std::shared_ptr< AssetCache > const &crCache)
PathRequestManager & owner_
json::Value jvStatus_
std::chrono::steady_clock::time_point const created_
bool needsUpdate(bool newOnly, LedgerIndex index)
STAmount saDstAmount_
json::Value doClose() override
std::recursive_mutex indexLock_
std::weak_ptr< InfoSub > wpSubscriber_
InfoSub::pointer getSubscriber() const
json::Value doStatus(json::Value const &) override
json::Value doUpdate(std::shared_ptr< AssetCache > const &, bool fast, std::function< bool(void)> const &continueCallback={})
std::optional< STAmount > saSendMax_
beast::Journal journal_
Application & app_
~PathRequest() override
pointer const & ref
Definition PathRequest.h:37
wptr const & wref
Definition PathRequest.h:38
std::chrono::steady_clock::time_point fullReply_
std::set< Asset > sciSourceAssets_
std::optional< AccountID > raDstAccount_
std::optional< uint256 > domain_
std::function< void(void)> fCompletion_
std::unique_ptr< Pathfinder > const & getPathFinder(std::shared_ptr< AssetCache > const &, hash_map< PathAsset, std::unique_ptr< Pathfinder > > &, PathAsset const &, STAmount const &, int const, std::function< bool(void)> const &)
std::pair< bool, json::Value > doCreate(std::shared_ptr< AssetCache > const &, json::Value const &)
bool findPaths(std::shared_ptr< AssetCache > const &, int const, json::Value &, std::function< bool(void)> const &)
Finds and sets a PathSet in the JSON argument.
std::shared_ptr< PathRequest > pointer
Definition PathRequest.h:36
std::optional< AccountID > raSrcAccount_
std::map< Asset, STPathSet > context_
An endpoint that consumes resources.
Definition Consumer.h:15
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition algorithm.h:5
std::uint32_t LedgerIndex
A ledger index.
Definition Protocol.h:259
std::unordered_map< Key, Value, Hash, Pred, Allocator > hash_map