xrpld
Loading...
Searching...
No Matches
ServerHandler.h
1#pragma once
2
3#include <xrpld/app/main/Application.h>
4#include <xrpld/app/main/CollectorManager.h>
5#include <xrpld/core/Config.h>
6#include <xrpld/rpc/detail/WSInfoSub.h>
7
8#include <xrpl/beast/insight/Counter.h>
9#include <xrpl/beast/insight/Event.h>
10#include <xrpl/beast/net/IPEndpoint.h>
11#include <xrpl/beast/utility/Journal.h>
12#include <xrpl/core/JobQueue.h>
13#include <xrpl/json/Output.h>
14#include <xrpl/resource/ResourceManager.h>
15#include <xrpl/server/Handoff.h>
16#include <xrpl/server/Port.h>
17#include <xrpl/server/Server.h> // IWYU pragma: keep
18#include <xrpl/server/Session.h>
19#include <xrpl/server/WSSession.h>
20
21#include <boost/beast/core/tcp_stream.hpp>
22#include <boost/beast/ssl/ssl_stream.hpp>
23#include <boost/utility/string_view.hpp>
24
25#include <condition_variable>
26#include <cstdint>
27#include <functional>
28#include <map>
29#include <memory>
30#include <mutex>
31#include <ostream>
32#include <string>
33#include <string_view>
34#include <utility>
35#include <vector>
36
37namespace xrpl {
38
39inline bool
40operator<(Port const& lhs, Port const& rhs)
41{
42 return lhs.name < rhs.name;
43}
44
46{
47public:
48 struct Setup
49 {
50 explicit Setup() = default;
51
53
54 // Memberspace
67
68 // Configuration when acting in client role
70
71 // Configuration for the Overlay
72 boost::asio::ip::tcp::endpoint overlay;
73
74 void
76 };
77
78private:
79 using socket_type = boost::beast::tcp_stream;
80 using stream_type = boost::beast::ssl_stream<socket_type>;
81
95 bool stopped_{false};
97
98 // A private type used to restrict access to the ServerHandler constructor.
100 {
101 explicit ServerHandlerCreator() = default;
102 };
103
104 // Friend declaration that allows make_ServerHandler to access the
105 // private type that restricts access to the ServerHandler ctor.
108 Application& app,
109 boost::asio::io_context&,
110 JobQueue&,
111 NetworkOPs&,
113 CollectorManager& cm);
114
115public:
116 // Must be public so make_unique can call it.
119 Application& app,
120 boost::asio::io_context& ioContext,
121 JobQueue& jobQueue,
122 NetworkOPs& networkOPs,
123 resource::Manager& resourceManager,
124 CollectorManager& cm);
125
127
129
130 void
131 setup(Setup const& setup, beast::Journal journal);
132
133 [[nodiscard]] Setup const&
134 setup() const
135 {
136 return setup_;
137 }
138
139 [[nodiscard]] Endpoints const&
140 endpoints() const
141 {
142 return endpoints_;
143 }
144
145 void
146 stop();
147
148 //
149 // Handler
150 //
151
152 bool
153 onAccept(Session& session, boost::asio::ip::tcp::endpoint endpoint);
154
155 Handoff
156 onHandoff(
157 Session& session,
159 http_request_type&& request,
160 boost::asio::ip::tcp::endpoint const& remoteAddress);
161
162 Handoff
164 Session& session,
165 http_request_type&& request, // NOLINT(cppcoreguidelines-rvalue-reference-param-not-moved)
166 boost::asio::ip::tcp::endpoint const& remoteAddress)
167 {
168 return onHandoff(session, {}, std::forward<http_request_type>(request), remoteAddress);
169 }
170
171 void
172 onRequest(Session& session);
173
174 void
178
179 void
180 onClose(Session& session, boost::system::error_code const&);
181
182 void
184
185private:
188 std::shared_ptr<WSSession> const& session,
190 json::Value const& jv);
191
192 void
194
195 void
197 Port const& port,
198 std::string const& request,
199 beast::ip::Endpoint const& remoteIPAddress,
200 Output const&,
203 std::string_view user);
204
205 [[nodiscard]] Handoff
206 statusResponse(http_request_type const& request) const;
207};
208
209ServerHandler::Setup
210setupServerHandler(Config const& c, std::ostream& log);
211
214 Application& app,
215 boost::asio::io_context&,
216 JobQueue&,
217 NetworkOPs&,
218 resource::Manager&,
219 CollectorManager& cm);
220
221} // namespace xrpl
A generic endpoint for log messages.
Definition Journal.h:44
A metric for measuring an integral value.
Definition Counter.h:20
A metric for reporting event timing.
Definition Event.h:22
A version-independent IP address and port combination.
Definition IPEndpoint.h:24
Represents a JSON value.
Definition json_value.h:117
Provides the beast::insight::Collector service.
A pool of threads to perform work.
Definition JobQueue.h:60
Provides server functionality for clients.
Definition NetworkOPs.h:82
std::condition_variable condition_
ServerHandler(ServerHandlerCreator const &, Application &app, boost::asio::io_context &ioContext, JobQueue &jobQueue, NetworkOPs &networkOPs, resource::Manager &resourceManager, CollectorManager &cm)
Handoff onHandoff(Session &session, std::unique_ptr< stream_type > &&bundle, http_request_type &&request, boost::asio::ip::tcp::endpoint const &remoteAddress)
beast::insight::Event rpcTime_
boost::beast::tcp_stream socket_type
beast::insight::Event rpcSize_
Application & app_
json::Value processSession(std::shared_ptr< WSSession > const &session, std::shared_ptr< JobQueue::Coro > const &coro, json::Value const &jv)
void processRequest(Port const &port, std::string const &request, beast::ip::Endpoint const &remoteIPAddress, Output const &, std::shared_ptr< JobQueue::Coro > coro, std::string_view forwardedFor, std::string_view user)
void onClose(Session &session, boost::system::error_code const &)
Setup const & setup() const
NetworkOPs & networkOPs_
Handoff onHandoff(Session &session, http_request_type &&request, boost::asio::ip::tcp::endpoint const &remoteAddress)
bool onAccept(Session &session, boost::asio::ip::tcp::endpoint endpoint)
friend std::unique_ptr< ServerHandler > makeServerHandler(Application &app, boost::asio::io_context &, JobQueue &, NetworkOPs &, resource::Manager &, CollectorManager &cm)
void onStopped(Server &)
void setup(Setup const &setup, beast::Journal journal)
resource::Manager & resourceManager_
Handoff statusResponse(http_request_type const &request) const
Endpoints const & endpoints() const
std::map< std::reference_wrapper< Port const >, int > count_
void onRequest(Session &session)
void onWSMessage(std::shared_ptr< WSSession > session, std::vector< boost::asio::const_buffer > const &buffers)
boost::beast::ssl_stream< socket_type > stream_type
beast::Journal journal_
std::unique_ptr< Server > server_
beast::insight::Counter rpcRequests_
A multi-protocol server.
Definition ServerImpl.h:37
Persistent state information for a connection session.
Definition Session.h:25
Tracks load and resource consumption.
T forward(T... args)
std::function< void(boost::beast::string_view const &)> Output
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition algorithm.h:5
bool operator<(Slice const &lhs, Slice const &rhs) noexcept
Definition Slice.h:212
std::unordered_map< std::string, boost::asio::ip::tcp::endpoint > Endpoints
Definition ServerImpl.h:27
ServerHandler::Setup setupServerHandler(Config const &config, std::ostream &log)
std::string_view forwardedFor(http_request_type const &request)
Definition Role.cpp:251
std::unique_ptr< ServerHandler > makeServerHandler(Application &app, boost::asio::io_context &ioContext, JobQueue &jobQueue, NetworkOPs &networkOPs, resource::Manager &resourceManager, CollectorManager &cm)
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:20
Configuration information for a Server listening port.
Definition Port.h:29
std::string name
Definition Port.h:32
boost::asio::ip::tcp::endpoint overlay
std::vector< Port > ports