xrpld
Loading...
Searching...
No Matches
SSLWSPeer.h
1#pragma once
2
3#include <xrpl/beast/utility/Journal.h>
4#include <xrpl/server/Port.h>
5#include <xrpl/server/detail/BaseHTTPPeer.h>
6#include <xrpl/server/detail/BaseWSPeer.h>
7
8#include <boost/asio/ip/tcp.hpp>
9#include <boost/asio/ssl/context.hpp>
10#include <boost/asio/ssl/stream.hpp>
11#include <boost/beast/core/tcp_stream.hpp>
12#include <boost/beast/ssl/ssl_stream.hpp>
13#include <boost/beast/websocket/ssl.hpp>
14#include <boost/beast/websocket/stream.hpp>
15
16#include <chrono>
17#include <memory>
18#include <utility>
19
20namespace xrpl {
21
22template <class Handler>
23class SSLWSPeer : public BaseWSPeer<Handler, SSLWSPeer<Handler>>,
24 public std::enable_shared_from_this<SSLWSPeer<Handler>>
25{
26 friend class BasePeer<Handler, SSLWSPeer>;
27 friend class BaseWSPeer<Handler, SSLWSPeer>;
28
30 using ErrorCode = boost::system::error_code;
31 using EndpointType = boost::asio::ip::tcp::endpoint;
32 using SocketType = boost::beast::tcp_stream;
33 using StreamType = boost::beast::ssl_stream<SocketType>;
34 using WaitableTimer = boost::asio::basic_waitable_timer<ClockType>;
35
37 boost::beast::websocket::stream<StreamType&> ws_;
38
39public:
40 template <class Body, class Headers>
42 Port const& port,
43 Handler& handler,
45 boost::beast::http::request<Body, Headers>&& request,
47 beast::Journal journal);
48};
49
50//------------------------------------------------------------------------------
51
52template <class Handler>
53template <class Body, class Headers>
55 Port const& port,
56 Handler& handler,
58 boost::beast::http::request<Body, Headers>&& request,
60 beast::Journal journal)
61 : BaseWSPeer<Handler, SSLWSPeer>(
62 port,
63 handler,
64 streamPtr->get_executor(),
65 WaitableTimer{streamPtr->get_executor()},
67 std::move(request),
68 journal)
69 , streamPtr_(std::move(streamPtr))
70 , ws_(*streamPtr_)
71{
72}
73
74} // namespace xrpl
A generic endpoint for log messages.
Definition Journal.h:44
HttpRequestType const & request() const override
Definition BaseWSPeer.h:93
boost::asio::ip::tcp::endpoint const & remoteEndpoint() const override
Definition BaseWSPeer.h:99
BaseWSPeer(Port const &port, Handler &handler, boost::asio::executor const &executor, WaitableTimer timer, EndpointType remoteAddress, boost::beast::http::request< Body, Headers > &&request, beast::Journal journal)
Definition BaseWSPeer.h:168
boost::beast::websocket::stream< StreamType & > ws_
Definition SSLWSPeer.h:37
SSLWSPeer(Port const &port, Handler &handler, EndpointType remoteEndpoint, boost::beast::http::request< Body, Headers > &&request, std::unique_ptr< StreamType > &&streamPtr, beast::Journal journal)
Definition SSLWSPeer.h:54
boost::beast::tcp_stream SocketType
Definition SSLWSPeer.h:32
boost::system::error_code ErrorCode
Definition SSLWSPeer.h:30
boost::asio::basic_waitable_timer< ClockType > WaitableTimer
Definition SSLWSPeer.h:34
boost::beast::ssl_stream< SocketType > StreamType
Definition SSLWSPeer.h:33
boost::asio::ip::tcp::endpoint EndpointType
Definition SSLWSPeer.h:31
std::unique_ptr< StreamType > streamPtr_
Definition SSLWSPeer.h:36
std::chrono::system_clock ClockType
Definition SSLWSPeer.h:29
STL namespace.
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition algorithm.h:5
Configuration information for a Server listening port.
Definition Port.h:29