rippled
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 {
18namespace asio {
19namespace ssl {
20class context;
21}
22} // namespace asio
23} // namespace boost
24
25namespace xrpl {
26
29{
30protected:
31 using socket_type = boost::beast::tcp_stream;
32 using stream_type = boost::beast::ssl_stream<socket_type>;
33
34 // VFALCO NOTE The requirement of this constructor is an
35 // unfortunate problem with the API for
36 // PropertyStream
37 Overlay() : beast::PropertyStream::Source("peers")
38 {
39 }
40
41public:
42 enum class Promote { automatic, never, always };
43
55
57
58 virtual ~Overlay() = default;
59
60 virtual void
62 {
63 }
64
65 virtual void
67 {
68 }
69
71 virtual Handoff
74 http_request_type&& request,
75 boost::asio::ip::tcp::endpoint remote_address) = 0;
76
81 virtual void
82 connect(beast::IP::Endpoint const& address) = 0;
83
85 virtual int
86 limit() = 0;
87
92 virtual std::size_t
93 size() const = 0;
94
98 virtual Json::Value
99 json() = 0;
100
104 virtual PeerSequence
105 getActivePeers() const = 0;
106
110 virtual void
112
115 findPeerByShortID(Peer::id_t const& id) const = 0;
116
119 findPeerByPublicKey(PublicKey const& pubKey) = 0;
120
122 virtual void
123 broadcast(protocol::TMProposeSet& m) = 0;
124
126 virtual void
127 broadcast(protocol::TMValidation& m) = 0;
128
136 relay(protocol::TMProposeSet& m, uint256 const& uid, PublicKey const& validator) = 0;
137
145 relay(protocol::TMValidation& m, uint256 const& uid, PublicKey const& validator) = 0;
146
154 virtual void
156 uint256 const& hash,
158 std::set<Peer::id_t> const& toSkip) = 0;
159
167 template <class Function>
168 void
169 foreach(Function f) const
170 {
171 for (auto const& p : getActivePeers())
172 f(p);
173 }
174
176 virtual void
178 virtual std::uint64_t
180
184 virtual void
186 virtual std::uint64_t
187 getPeerDisconnect() const = 0;
188 virtual void
190 virtual std::uint64_t
192
202 networkID() const = 0;
203
207 virtual Json::Value
208 txMetrics() const = 0;
209};
210
211} // namespace xrpl
Represents a JSON value.
Definition json_value.h:130
A version-independent IP address and port combination.
Definition IPEndpoint.h:18
Subclasses can be called to write to a stream and have children.
Manages the set of connected peers.
Definition Overlay.h:29
virtual ~Overlay()=default
virtual void start()
Definition Overlay.h:61
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 &m, uint256 const &uid, PublicKey const &validator)=0
Relay 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...
virtual void broadcast(protocol::TMProposeSet &m)=0
Broadcast a proposal.
boost::beast::ssl_stream< socket_type > stream_type
Definition Overlay.h:32
boost::beast::tcp_stream socket_type
Definition Overlay.h:31
virtual void stop()
Definition Overlay.h:66
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 &m)=0
Broadcast a validation.
virtual Handoff onHandoff(std::unique_ptr< stream_type > &&bundle, http_request_type &&request, boost::asio::ip::tcp::endpoint remote_address)=0
Conditionally accept an incoming HTTP request.
virtual std::uint64_t getJqTransOverflow() const =0
virtual void incPeerDisconnectCharges()=0
virtual Json::Value txMetrics() const =0
Returns tx reduce-relay metrics.
virtual Json::Value json()=0
Return diagnostics on the status of all peers.
virtual void connect(beast::IP::Endpoint const &address)=0
Establish a peer connection to the specified endpoint.
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::set< Peer::id_t > relay(protocol::TMValidation &m, uint256 const &uid, PublicKey const &validator)=0
Relay a validation.
virtual std::size_t size() const =0
Returns the number of active peers.
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
Used to indicate the result of a server connection handoff.
Definition Handoff.h:18
std::uint32_t crawlOptions
Definition Overlay.h:51
std::optional< std::uint32_t > networkID
Definition Overlay.h:52
std::shared_ptr< boost::asio::ssl::context > context
Definition Overlay.h:48
beast::IP::Address public_ip
Definition Overlay.h:49