3#include <xrpl/beast/rfc2616.h>
4#include <xrpl/beast/utility/Journal.h>
5#include <xrpl/server/Port.h>
6#include <xrpl/server/WSSession.h>
7#include <xrpl/server/detail/BaseHTTPPeer.h>
8#include <xrpl/server/detail/PlainWSPeer.h>
10#include <boost/beast/core/tcp_stream.hpp>
17template <
class Handler>
31 template <
class ConstBufferSequence>
35 boost::asio::io_context& ioc,
38 ConstBufferSequence
const& buffers,
57template <
class Handler>
58template <
class ConstBufferSequence>
62 boost::asio::io_context& ioc,
65 ConstBufferSequence
const& buffers,
81 if (remoteEndpoint.address().is_loopback())
82 socket_.set_option(boost::asio::ip::tcp::no_delay{true});
85template <
class Handler>
89 if (!this->
handler_.onAccept(this->session(), this->remoteAddress_))
102 self->doRead(doYield);
106template <
class Handler>
110 auto ws = this->
ios().template emplace<PlainWSPeer<Handler>>(
120template <
class Handler>
129 boost::system::error_code ec;
134 socket_.shutdown(socket_type::shutdown_receive, ec);
136 return this->
fail(ec,
"request");
137 return this->
write(what.response, what.keepAlive);
142 socket_.shutdown(socket_type::shutdown_receive, ec);
144 return this->
fail(ec,
"request");
149template <
class Handler>
153 boost::system::error_code ec;
154 socket_.shutdown(socket_type::shutdown_send, ec);
A generic endpoint for log messages.
BaseHTTPPeer(Port const &port, Handler &handler, boost::asio::executor const &executor, beast::Journal journal, endpoint_type remoteAddress, ConstBufferSequence const &buffers)
endpoint_type remoteAddress_
http_request_type message_
void write(void const *buffer, std::size_t bytes) override
beast::ip::Endpoint remoteAddress() override
beast::Journal const journal_
void fail(error_code ec, char const *what)
beast::Journal journal() override
boost::asio::strand< boost::asio::executor > strand_
Port const & port() override
void doRequest() override
std::shared_ptr< WSSession > websocketUpgrade() override
Convert the connection to WebSocket.
PlainHTTPPeer(Port const &port, Handler &handler, boost::asio::io_context &ioc, beast::Journal journal, endpoint_type remoteAddress, ConstBufferSequence const &buffers, stream_type &&stream)
boost::asio::ip::tcp::socket socket_type
boost::asio::ip::tcp::endpoint endpoint_type
boost::beast::tcp_stream stream_type
bool isKeepAlive(boost::beast::http::message< IsRequest, Body, Fields > const &m)
void spawn(Ctx &&ctx, F &&func)
Spawns a coroutine using boost::asio::spawn.
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
T shared_from_this(T... args)
Configuration information for a Server listening port.