xrpld
Loading...
Searching...
No Matches
Overlay.h
1#pragma once
2
3#include <xrpld/overlay/Peer.h>
4
5#include <xrpl/beast/utility/PropertyStream.h>
6#include <xrpl/json/json_value.h>
7#include <xrpl/server/Handoff.h>
8
9#include <boost/asio/ip/tcp.hpp>
10#include <boost/asio/ssl/context.hpp>
11#include <boost/beast/core/tcp_stream.hpp>
12#include <boost/beast/ssl/ssl_stream.hpp>
13
14#include <functional>
15#include <optional>
16
17namespace boost::asio::ssl {
18class context;
19} // namespace boost::asio::ssl
20
21namespace xrpl {
22
25{
26protected:
27 using socket_type = boost::beast::tcp_stream;
28 using stream_type = boost::beast::ssl_stream<socket_type>;
29
30 // VFALCO NOTE The requirement of this constructor is an
31 // unfortunate problem with the API for
32 // PropertyStream
33 Overlay() : beast::PropertyStream::Source("peers")
34 {
35 }
36
37public:
38 enum class Promote { Automatic, Never, Always };
39
52
54
55 ~Overlay() override = default;
56
57 virtual void
59 {
60 }
61
62 virtual void
64 {
65 }
66
68 virtual Handoff
71 http_request_type&& request,
72 boost::asio::ip::tcp::endpoint remoteAddress) = 0;
73
78 virtual void
79 connect(beast::IP::Endpoint const& address) = 0;
80
82 virtual int
83 limit() = 0;
84
89 [[nodiscard]] virtual std::size_t
90 size() const = 0;
91
95 virtual json::Value
96 json() = 0;
97
101 [[nodiscard]] virtual PeerSequence
102 getActivePeers() const = 0;
103
107 virtual void
109
111 [[nodiscard]] virtual std::shared_ptr<Peer>
112 findPeerByShortID(Peer::id_t const& id) const = 0;
113
116 findPeerByPublicKey(PublicKey const& pubKey) = 0;
117
119 virtual void
120 broadcast(protocol::TMProposeSet const& m) = 0;
121
123 virtual void
124 broadcast(protocol::TMValidation const& m) = 0;
125
133 relay(protocol::TMProposeSet const& m, uint256 const& uid, PublicKey const& validator) = 0;
134
142 relay(protocol::TMValidation const& m, uint256 const& uid, PublicKey const& validator) = 0;
143
151 virtual void
153 uint256 const& hash,
155 std::set<Peer::id_t> const& toSkip) = 0;
156
164 template <class Function>
165 void
166 foreach(Function f) const
167 {
168 for (auto const& p : getActivePeers())
169 f(p);
170 }
171
173 virtual void
175 [[nodiscard]] virtual std::uint64_t
177
181 virtual void
183 [[nodiscard]] virtual std::uint64_t
184 getPeerDisconnect() const = 0;
185 virtual void
187 [[nodiscard]] virtual std::uint64_t
189
198 [[nodiscard]] virtual std::optional<std::uint32_t>
199 networkID() const = 0;
200
204 [[nodiscard]] virtual json::Value
205 txMetrics() const = 0;
206};
207
208} // namespace xrpl
A version-independent IP address and port combination.
Definition IPEndpoint.h:17
Subclasses can be called to write to a stream and have children.
Represents a JSON value.
Definition json_value.h:130
virtual Handoff onHandoff(std::unique_ptr< stream_type > &&bundle, http_request_type &&request, boost::asio::ip::tcp::endpoint remoteAddress)=0
Conditionally accept an incoming HTTP request.
virtual json::Value txMetrics() const =0
Returns tx reduce-relay metrics.
virtual void start()
Definition Overlay.h:58
virtual std::uint64_t getPeerDisconnect() const =0
virtual std::optional< std::uint32_t > networkID() const =0
Returns the ID of the network this server is configured for, if any.
virtual std::set< Peer::id_t > relay(protocol::TMProposeSet const &m, uint256 const &uid, PublicKey const &validator)=0
Relay a proposal.
virtual void broadcast(protocol::TMProposeSet const &m)=0
Broadcast a proposal.
virtual std::shared_ptr< Peer > findPeerByShortID(Peer::id_t const &id) const =0
Returns the peer with the matching short id, or null.
virtual void incPeerDisconnect()=0
Increment and retrieve counters for total peer disconnects, and disconnects we initiate for excessive...
~Overlay() override=default
std::vector< std::shared_ptr< Peer > > PeerSequence
Definition Overlay.h:53
boost::beast::ssl_stream< socket_type > stream_type
Definition Overlay.h:28
boost::beast::tcp_stream socket_type
Definition Overlay.h:27
virtual void stop()
Definition Overlay.h:63
virtual void checkTracking(std::uint32_t index)=0
Calls the checkTracking function on each peer.
virtual std::uint64_t getPeerDisconnectCharges() const =0
virtual void incJqTransOverflow()=0
Increment and retrieve counter for transaction job queue overflows.
virtual int limit()=0
Returns the maximum number of peers we are configured to allow.
virtual PeerSequence getActivePeers() const =0
Returns a sequence representing the current list of peers.
virtual void broadcast(protocol::TMValidation const &m)=0
Broadcast a validation.
virtual std::uint64_t getJqTransOverflow() const =0
virtual json::Value json()=0
Return diagnostics on the status of all peers.
virtual void incPeerDisconnectCharges()=0
virtual void connect(beast::IP::Endpoint const &address)=0
Establish a peer connection to the specified endpoint.
virtual std::set< Peer::id_t > relay(protocol::TMValidation const &m, uint256 const &uid, PublicKey const &validator)=0
Relay a validation.
virtual void relay(uint256 const &hash, std::optional< std::reference_wrapper< protocol::TMTransaction > > m, std::set< Peer::id_t > const &toSkip)=0
Relay a transaction.
virtual std::shared_ptr< Peer > findPeerByPublicKey(PublicKey const &pubKey)=0
Returns the peer with the matching public key, or null.
virtual std::size_t size() const =0
Returns the number of active peers.
std::uint32_t id_t
Uniquely identifies a peer.
A public key.
Definition PublicKey.h:42
boost::asio::ip::address Address
Definition IPAddress.h:19
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition algorithm.h:5
boost::beast::http::request< boost::beast::http::dynamic_body > http_request_type
Definition Handoff.h:12
BaseUInt< 256 > uint256
Definition base_uint.h:562
Used to indicate the result of a server connection handoff.
Definition Handoff.h:18
std::uint32_t crawlOptions
Definition Overlay.h:47
std::optional< std::uint32_t > networkID
Definition Overlay.h:48
beast::IP::Address publicIp
Definition Overlay.h:45
std::shared_ptr< boost::asio::ssl::context > context
Definition Overlay.h:44