rippled
Loading...
Searching...
No Matches
PathRequest.h
1#pragma once
2
3#include <xrpld/app/ledger/Ledger.h>
4#include <xrpld/app/paths/Pathfinder.h>
5#include <xrpld/app/paths/RippleLineCache.h>
6
7#include <xrpl/basics/base_uint.h>
8#include <xrpl/json/json_value.h>
9#include <xrpl/protocol/UintTypes.h>
10#include <xrpl/server/InfoSub.h>
11
12#include <map>
13#include <mutex>
14#include <optional>
15#include <set>
16
17namespace xrpl {
18
19// A pathfinding request submitted by a client
20// The request issuer must maintain a strong pointer
21
22class RippleLineCache;
23class PathRequests;
24
25// Return values from parseJson <0 = invalid, >0 = valid
26#define PFR_PJ_INVALID -1
27#define PFR_PJ_NOCHANGE 0
28
29class PathRequest final : public InfoSubRequest,
30 public std::enable_shared_from_this<PathRequest>,
31 public CountedObject<PathRequest>
32{
33public:
36 using ref = pointer const&;
37 using wref = wptr const&;
38
39public:
40 // path_find semantics
41 // Subscriber is updated
43 Application& app,
44 std::shared_ptr<InfoSub> const& subscriber,
45 int id,
47 beast::Journal journal);
48
49 // ripple_path_find semantics
50 // Completion function is called after path update is complete
52 Application& app,
53 std::function<void(void)> const& completion,
54 Resource::Consumer& consumer,
55 int id,
57 beast::Journal journal);
58
60
61 bool
62 isNew();
63 bool
64 needsUpdate(bool newOnly, LedgerIndex index);
65
66 // Called when the PathRequest update is complete.
67 void
69
72
74 doClose() override;
76 doStatus(Json::Value const&) override;
77 void
78 doAborting() const;
79
80 // update jvStatus
84 bool fast,
85 std::function<bool(void)> const& continueCallback = {});
87 getSubscriber() const;
88 bool
90
91private:
92 bool
94
99 Currency const&,
100 STAmount const&,
101 int const,
102 std::function<bool(void)> const&);
103
107 bool
108 findPaths(std::shared_ptr<RippleLineCache> const&, int const, Json::Value&, std::function<bool(void)> const&);
109
110 int
111 parseJson(Json::Value const&);
112
115
117
119
120 std::weak_ptr<InfoSub> wpSubscriber; // Who this request came from
122 Resource::Consumer& consumer_; // Charge according to source currencies
123
125 Json::Value jvStatus; // Last result
126
127 // Client request parameters
132
135
137
139
143
146
147 int const iIdentifier;
148
149 std::chrono::steady_clock::time_point const created_;
150 std::chrono::steady_clock::time_point quick_reply_;
151 std::chrono::steady_clock::time_point full_reply_;
152
153 static unsigned int const max_paths_ = 4;
154};
155
156} // namespace xrpl
Represents a JSON value.
Definition json_value.h:130
A generic endpoint for log messages.
Definition Journal.h:40
Tracks the number of instances of an object.
Json::Value doUpdate(std::shared_ptr< RippleLineCache > const &, bool fast, std::function< bool(void)> const &continueCallback={})
std::optional< AccountID > raDstAccount
Json::Value doClose() override
Json::Value jvId
std::map< Issue, STPathSet > mContext
std::optional< uint256 > domain
void doAborting() const
Resource::Consumer & consumer_
std::optional< STAmount > saSendMax
int parseJson(Json::Value const &)
static unsigned int const max_paths_
int const iIdentifier
Json::Value jvStatus
std::chrono::steady_clock::time_point const created_
bool needsUpdate(bool newOnly, LedgerIndex index)
beast::Journal m_journal
std::weak_ptr< InfoSub > wpSubscriber
InfoSub::pointer getSubscriber() const
std::recursive_mutex mIndexLock
Json::Value doStatus(Json::Value const &) override
std::pair< bool, Json::Value > doCreate(std::shared_ptr< RippleLineCache > const &, Json::Value const &)
Application & app_
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.
PathRequests & mOwner
pointer const & ref
Definition PathRequest.h:36
wptr const & wref
Definition PathRequest.h:37
std::chrono::steady_clock::time_point full_reply_
std::set< Issue > sciSourceCurrencies
bool isValid(std::shared_ptr< RippleLineCache > const &crCache)
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 &)
LedgerIndex mLastIndex
std::chrono::steady_clock::time_point quick_reply_
std::recursive_mutex mLock
std::function< void(void)> fCompletion
std::optional< AccountID > raSrcAccount
An endpoint that consumes resources.
Definition Consumer.h:16
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition algorithm.h:5