rippled
Loading...
Searching...
No Matches
PathRequest.h
1#ifndef XRPL_APP_PATHS_PATHREQUEST_H_INCLUDED
2#define XRPL_APP_PATHS_PATHREQUEST_H_INCLUDED
3
4#include <xrpld/app/ledger/Ledger.h>
5#include <xrpld/app/paths/Pathfinder.h>
6#include <xrpld/app/paths/RippleLineCache.h>
7#include <xrpld/rpc/InfoSub.h>
8
9#include <xrpl/basics/base_uint.h>
10#include <xrpl/json/json_value.h>
11#include <xrpl/protocol/UintTypes.h>
12
13#include <map>
14#include <mutex>
15#include <optional>
16#include <set>
17
18namespace ripple {
19
20// A pathfinding request submitted by a client
21// The request issuer must maintain a strong pointer
22
23class RippleLineCache;
24class PathRequests;
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)> const& completion,
55 Resource::Consumer& consumer,
56 int id,
58 beast::Journal journal);
59
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 Currency 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 quick_reply_;
156 std::chrono::steady_clock::time_point full_reply_;
157
158 static unsigned int const max_paths_ = 4;
159};
160
161} // namespace ripple
162
163#endif
Represents a JSON value.
Definition json_value.h:130
A generic endpoint for log messages.
Definition Journal.h:41
Tracks the number of instances of an object.
std::optional< STAmount > saSendMax
pointer const & ref
Definition PathRequest.h:37
std::function< void(void)> fCompletion
static unsigned int const max_paths_
bool findPaths(std::shared_ptr< RippleLineCache > const &, int const, Json::Value &, std::function< bool(void)> const &)
Finds and sets a PathSet in the JSON argument.
Json::Value doClose() override
std::weak_ptr< InfoSub > wpSubscriber
wptr const & wref
Definition PathRequest.h:38
Json::Value doStatus(Json::Value const &) override
std::set< Issue > sciSourceCurrencies
int parseJson(Json::Value const &)
bool needsUpdate(bool newOnly, LedgerIndex index)
std::recursive_mutex mLock
std::recursive_mutex mIndexLock
Resource::Consumer & consumer_
std::optional< AccountID > raSrcAccount
InfoSub::pointer getSubscriber() const
std::optional< uint256 > domain
Json::Value doUpdate(std::shared_ptr< RippleLineCache > const &, bool fast, std::function< bool(void)> const &continueCallback={})
PathRequests & mOwner
std::chrono::steady_clock::time_point full_reply_
LedgerIndex mLastIndex
std::pair< bool, Json::Value > doCreate(std::shared_ptr< RippleLineCache > const &, Json::Value const &)
Application & app_
Json::Value jvStatus
void doAborting() const
std::chrono::steady_clock::time_point quick_reply_
std::map< Issue, STPathSet > mContext
std::optional< AccountID > raDstAccount
std::chrono::steady_clock::time_point const created_
beast::Journal m_journal
std::unique_ptr< Pathfinder > const & getPathFinder(std::shared_ptr< RippleLineCache > const &, hash_map< Currency, std::unique_ptr< Pathfinder > > &, Currency const &, STAmount const &, int const, std::function< bool(void)> const &)
bool isValid(std::shared_ptr< RippleLineCache > const &crCache)
An endpoint that consumes resources.
Definition Consumer.h:17
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition algorithm.h:6