rippled
Loading...
Searching...
No Matches
Overlay.h
1#ifndef XRPL_OVERLAY_OVERLAY_H_INCLUDED
2#define XRPL_OVERLAY_OVERLAY_H_INCLUDED
3
4#include <xrpld/overlay/Peer.h>
5
6#include <xrpl/beast/utility/PropertyStream.h>
7#include <xrpl/json/json_value.h>
8#include <xrpl/server/Handoff.h>
9
10#include <boost/asio/ip/tcp.hpp>
11#include <boost/asio/ssl/context.hpp>
12#include <boost/beast/core/tcp_stream.hpp>
13#include <boost/beast/ssl/ssl_stream.hpp>
14
15#include <functional>
16#include <optional>
17
18namespace boost {
19namespace asio {
20namespace ssl {
21class context;
22}
23} // namespace asio
24} // namespace boost
25
26namespace ripple {
27
30{
31protected:
32 using socket_type = boost::beast::tcp_stream;
33 using stream_type = boost::beast::ssl_stream<socket_type>;
34
35 // VFALCO NOTE The requirement of this constructor is an
36 // unfortunate problem with the API for
37 // PropertyStream
38 Overlay() : beast::PropertyStream::Source("peers")
39 {
40 }
41
42public:
43 enum class Promote { automatic, never, always };
44
56
58
59 virtual ~Overlay() = default;
60
61 virtual void
63 {
64 }
65
66 virtual void
68 {
69 }
70
72 virtual Handoff
75 http_request_type&& request,
76 boost::asio::ip::tcp::endpoint remote_address) = 0;
77
82 virtual void
83 connect(beast::IP::Endpoint const& address) = 0;
84
86 virtual int
87 limit() = 0;
88
93 virtual std::size_t
94 size() const = 0;
95
99 virtual Json::Value
100 json() = 0;
101
105 virtual PeerSequence
106 getActivePeers() const = 0;
107
111 virtual void
113
116 findPeerByShortID(Peer::id_t const& id) const = 0;
117
120 findPeerByPublicKey(PublicKey const& pubKey) = 0;
121
123 virtual void
124 broadcast(protocol::TMProposeSet& m) = 0;
125
127 virtual void
128 broadcast(protocol::TMValidation& m) = 0;
129
138 protocol::TMProposeSet& m,
139 uint256 const& uid,
140 PublicKey const& validator) = 0;
141
150 protocol::TMValidation& m,
151 uint256 const& uid,
152 PublicKey const& validator) = 0;
153
161 virtual void
163 uint256 const& hash,
165 std::set<Peer::id_t> const& toSkip) = 0;
166
174 template <class Function>
175 void
176 foreach(Function f) const
177 {
178 for (auto const& p : getActivePeers())
179 f(p);
180 }
181
183 virtual void
185 virtual std::uint64_t
187
191 virtual void
193 virtual std::uint64_t
194 getPeerDisconnect() const = 0;
195 virtual void
197 virtual std::uint64_t
199
209 networkID() const = 0;
210
214 virtual Json::Value
215 txMetrics() const = 0;
216};
217
218} // namespace ripple
219
220#endif
Represents a JSON value.
Definition json_value.h:130
A version-independent IP address and port combination.
Definition IPEndpoint.h:19
Subclasses can be called to write to a stream and have children.
Manages the set of connected peers.
Definition Overlay.h:30
boost::beast::ssl_stream< socket_type > stream_type
Definition Overlay.h:33
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 void broadcast(protocol::TMProposeSet &m)=0
Broadcast a proposal.
virtual void broadcast(protocol::TMValidation &m)=0
Broadcast a validation.
virtual void start()
Definition Overlay.h:62
virtual std::shared_ptr< Peer > findPeerByPublicKey(PublicKey const &pubKey)=0
Returns the peer with the matching public key, or null.
virtual void stop()
Definition Overlay.h:67
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 std::shared_ptr< Peer > findPeerByShortID(Peer::id_t const &id) const =0
Returns the peer with the matching short id, or null.
virtual Json::Value json()=0
Return diagnostics on the status of all peers.
virtual std::set< Peer::id_t > relay(protocol::TMProposeSet &m, uint256 const &uid, PublicKey const &validator)=0
Relay a proposal.
virtual std::optional< std::uint32_t > networkID() const =0
Returns the ID of the network this server is configured for, if any.
boost::beast::tcp_stream socket_type
Definition Overlay.h:32
virtual void checkTracking(std::uint32_t index)=0
Calls the checkTracking function on each peer.
virtual Json::Value txMetrics() const =0
Returns tx reduce-relay metrics.
virtual std::uint64_t getPeerDisconnect() const =0
virtual std::size_t size() const =0
Returns the number of active peers.
virtual ~Overlay()=default
virtual void incPeerDisconnect()=0
Increment and retrieve counters for total peer disconnects, and disconnects we initiate for excessive...
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 std::set< Peer::id_t > relay(protocol::TMValidation &m, uint256 const &uid, PublicKey const &validator)=0
Relay a validation.
virtual void connect(beast::IP::Endpoint const &address)=0
Establish a peer connection to the specified endpoint.
virtual void incJqTransOverflow()=0
Increment and retrieve counter for transaction job queue overflows.
virtual void incPeerDisconnectCharges()=0
virtual std::uint64_t getPeerDisconnectCharges() const =0
A public key.
Definition PublicKey.h:43
boost::asio::ip::address Address
Definition IPAddress.h:20
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition algorithm.h:6
boost::beast::http::request< boost::beast::http::dynamic_body > http_request_type
Definition Handoff.h:14
Used to indicate the result of a server connection handoff.
Definition Handoff.h:21
beast::IP::Address public_ip
Definition Overlay.h:50
std::uint32_t crawlOptions
Definition Overlay.h:52
std::shared_ptr< boost::asio::ssl::context > context
Definition Overlay.h:49
std::optional< std::uint32_t > networkID
Definition Overlay.h:53