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 error_code = boost::system::error_code;
31 using endpoint_type = boost::asio::ip::tcp::endpoint;
32 using socket_type = boost::beast::tcp_stream;
33 using stream_type = boost::beast::ssl_stream<socket_type>;
34 using waitable_timer = boost::asio::basic_waitable_timer<clock_type>;
35
37 boost::beast::websocket::stream<stream_type&> 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 waitable_timer{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
BaseWSPeer(Port const &port, Handler &handler, boost::asio::executor const &executor, waitable_timer timer, endpoint_type remoteAddress, boost::beast::http::request< Body, Headers > &&request, beast::Journal journal)
Definition BaseWSPeer.h:168
boost::asio::ip::tcp::endpoint const & remoteEndpoint() const override
Definition BaseWSPeer.h:99
http_request_type const & request() const override
Definition BaseWSPeer.h:93
boost::beast::websocket::stream< stream_type & > ws_
Definition SSLWSPeer.h:37
std::unique_ptr< stream_type > streamPtr_
Definition SSLWSPeer.h:36
std::chrono::system_clock clock_type
Definition SSLWSPeer.h:29
boost::asio::ip::tcp::endpoint endpoint_type
Definition SSLWSPeer.h:31
boost::system::error_code error_code
Definition SSLWSPeer.h:30
boost::beast::ssl_stream< socket_type > stream_type
Definition SSLWSPeer.h:33
boost::asio::basic_waitable_timer< clock_type > waitable_timer
Definition SSLWSPeer.h:34
SSLWSPeer(Port const &port, Handler &handler, endpoint_type remoteEndpoint, boost::beast::http::request< Body, Headers > &&request, std::unique_ptr< stream_type > &&streamPtr, beast::Journal journal)
Definition SSLWSPeer.h:54
boost::beast::tcp_stream socket_type
Definition SSLWSPeer.h:32
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