xrpld
Loading...
Searching...
No Matches
PathRequest.h
1#pragma once
2
3#include <xrpld/app/main/Application.h>
4#include <xrpld/rpc/detail/AssetCache.h>
5#include <xrpld/rpc/detail/Pathfinder.h>
6
7#include <xrpl/basics/CountedObject.h>
8#include <xrpl/basics/UnorderedContainers.h>
9#include <xrpl/basics/base_uint.h>
10#include <xrpl/beast/utility/Journal.h>
11#include <xrpl/json/json_value.h>
12#include <xrpl/protocol/AccountID.h>
13#include <xrpl/protocol/Asset.h>
14#include <xrpl/protocol/PathAsset.h>
15#include <xrpl/protocol/Protocol.h>
16#include <xrpl/protocol/STAmount.h>
17#include <xrpl/protocol/STPathSet.h>
18#include <xrpl/resource/Consumer.h>
19#include <xrpl/server/InfoSub.h>
20
21#include <chrono>
22#include <functional>
23#include <map>
24#include <memory>
25#include <mutex>
26#include <optional>
27#include <set>
28#include <utility>
29
30namespace xrpl {
31
32// A pathfinding request submitted by a client
33// The request issuer must maintain a strong pointer
34
35class AssetCache;
37
38// Return values from parseJson <0 = invalid, >0 = valid
39#define PFR_PJ_INVALID (-1)
40#define PFR_PJ_NOCHANGE 0
41
42class PathRequest final : public InfoSubRequest,
43 public std::enable_shared_from_this<PathRequest>,
44 public CountedObject<PathRequest>
45{
46public:
49 using ref = pointer const&;
50 using wref = wptr const&;
51
52public:
53 // path_find semantics
54 // Subscriber is updated
56 Application& app,
57 std::shared_ptr<InfoSub> const& subscriber,
58 int id,
60 beast::Journal journal);
61
62 // ripple_path_find semantics
63 // Completion function is called after path update is complete
65 Application& app,
66 std::function<void(void)> completion,
67 resource::Consumer& consumer,
68 int id,
70 beast::Journal journal);
71
72 ~PathRequest() override;
73
74 bool
75 isNew();
76 bool
77 needsUpdate(bool newOnly, LedgerIndex index);
78
79 // Called when the PathRequest update is complete.
80 void
82
85
87 doClose() override;
89 doStatus(json::Value const&) override;
90 void
91 doAborting() const;
92
93 // update jvStatus
97 bool fast,
98 std::function<bool(void)> const& continueCallback = {});
100 getSubscriber() const;
101 bool
103
104private:
105 bool
106 isValid(std::shared_ptr<AssetCache> const& crCache);
107
112 PathAsset const&,
113 STAmount const&,
114 int const,
115 std::function<bool(void)> const&);
116
121 bool
122 findPaths(
124 int const,
126 std::function<bool(void)> const&);
127
128 int
129 parseJson(json::Value const&);
130
133
135
137
138 std::weak_ptr<InfoSub> wpSubscriber_; // Who this request came from
140 resource::Consumer& consumer_; // Charge according to source currencies
141
143 json::Value jvStatus_; // Last result
144
145 // Client request parameters
150
153
155
157
161
164
165 int const iIdentifier_;
166
167 std::chrono::steady_clock::time_point const created_;
168 std::chrono::steady_clock::time_point quickReply_;
169 std::chrono::steady_clock::time_point fullReply_;
170
171 static unsigned int const kMaxPaths = 4;
172};
173
174} // namespace xrpl
A generic endpoint for log messages.
Definition Journal.h:44
Represents a JSON value.
Definition json_value.h:117
std::shared_ptr< InfoSub > pointer
Definition InfoSub.h:91
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:47
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_
resource::Consumer & consumer_
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:49
wptr const & wref
Definition PathRequest.h:50
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:48
std::optional< AccountID > raSrcAccount_
std::map< Asset, STPathSet > context_
An endpoint that consumes resources.
Definition Consumer.h:20
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:370
std::unordered_map< Key, Value, Hash, Pred, Allocator > hash_map