xrpld
Loading...
Searching...
No Matches
Overlay.h
1#pragma once
2
3#include <xrpld/overlay/Peer.h>
4
5#include <xrpl/basics/base_uint.h>
6#include <xrpl/beast/net/IPAddress.h>
7#include <xrpl/beast/net/IPEndpoint.h>
8#include <xrpl/beast/utility/PropertyStream.h>
9#include <xrpl/json/json_value.h>
10#include <xrpl/protocol/PublicKey.h>
11#include <xrpl/server/Handoff.h>
12
13#include <boost/asio/ip/tcp.hpp>
14#include <boost/asio/ssl/context.hpp>
15#include <boost/beast/core/tcp_stream.hpp>
16#include <boost/beast/ssl/ssl_stream.hpp>
17
18#include <xrpl.pb.h>
19
20#include <cstddef>
21#include <cstdint>
22#include <functional>
23#include <memory>
24#include <optional>
25#include <set>
26#include <vector>
27
28namespace boost::asio::ssl {
29class context;
30} // namespace boost::asio::ssl
31
32namespace xrpl {
33
38{
39protected:
40 using socket_type = boost::beast::tcp_stream;
41 using stream_type = boost::beast::ssl_stream<socket_type>;
42
43 // VFALCO NOTE The requirement of this constructor is an
44 // unfortunate problem with the API for
45 // PropertyStream
46 Overlay() : beast::PropertyStream::Source("peers")
47 {
48 }
49
50public:
51 enum class Promote { Automatic, Never, Always };
52
65
67
68 ~Overlay() override = default;
69
70 virtual void
72 {
73 }
74
75 virtual void
77 {
78 }
79
83 virtual Handoff
86 http_request_type&& request,
87 boost::asio::ip::tcp::endpoint remoteAddress) = 0;
88
94 virtual void
95 connect(beast::ip::Endpoint const& address) = 0;
96
100 virtual int
101 limit() = 0;
102
108 [[nodiscard]] virtual std::size_t
109 size() const = 0;
110
115 virtual json::Value
116 json() = 0;
117
122 [[nodiscard]] virtual PeerSequence
123 getActivePeers() const = 0;
124
129 virtual void
131
135 [[nodiscard]] virtual std::shared_ptr<Peer>
136 findPeerByShortID(Peer::id_t const& id) const = 0;
137
142 findPeerByPublicKey(PublicKey const& pubKey) = 0;
143
147 virtual void
148 broadcast(protocol::TMProposeSet const& m) = 0;
149
153 virtual void
154 broadcast(protocol::TMValidation const& m) = 0;
155
164 relay(protocol::TMProposeSet const& m, uint256 const& uid, PublicKey const& validator) = 0;
165
174 relay(protocol::TMValidation const& m, uint256 const& uid, PublicKey const& validator) = 0;
175
184 virtual void
186 uint256 const& hash,
188 std::set<Peer::id_t> const& toSkip) = 0;
189
198 template <class Function>
199 void
200 foreach(Function f) const
201 {
202 for (auto const& p : getActivePeers())
203 f(p);
204 }
205
209 virtual void
211 [[nodiscard]] virtual std::uint64_t
213
218 virtual void
220 [[nodiscard]] virtual std::uint64_t
221 getPeerDisconnect() const = 0;
222 virtual void
224 [[nodiscard]] virtual std::uint64_t
226
236 [[nodiscard]] virtual std::optional<std::uint32_t>
237 networkID() const = 0;
238
243 [[nodiscard]] virtual json::Value
244 txMetrics() const = 0;
245};
246
247} // namespace xrpl
Subclasses can be called to write to a stream and have children.
A version-independent IP address and port combination.
Definition IPEndpoint.h:24
Represents a JSON value.
Definition json_value.h:117
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:71
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 void connect(beast::ip::Endpoint const &address)=0
Establish a peer connection to the specified endpoint.
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:66
boost::beast::ssl_stream< socket_type > stream_type
Definition Overlay.h:41
boost::beast::tcp_stream socket_type
Definition Overlay.h:40
virtual void stop()
Definition Overlay.h:76
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 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:53
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:5
boost::beast::http::request< boost::beast::http::dynamic_body > http_request_type
Definition Handoff.h:12
BaseUInt< 256 > uint256
Definition base_uint.h:580
Used to indicate the result of a server connection handoff.
Definition Handoff.h:20
std::uint32_t crawlOptions
Definition Overlay.h:60
std::optional< std::uint32_t > networkID
Definition Overlay.h:61
beast::ip::Address publicIp
Definition Overlay.h:58
std::shared_ptr< boost::asio::ssl::context > context
Definition Overlay.h:57