xrpld
Toggle main menu visibility
Loading...
Searching...
No Matches
include
xrpl
server
WSSession.h
1
#pragma once
2
3
#include <xrpl/server/Handoff.h>
4
#include <xrpl/server/Port.h>
5
6
#include <boost/asio/buffer.hpp>
7
#include <boost/asio/ip/tcp.hpp>
8
#include <boost/beast/core/buffers_prefix.hpp>
9
#include <boost/beast/websocket/rfc6455.hpp>
10
#include <boost/logic/tribool.hpp>
11
12
#include <
algorithm
>
13
#include <
cstddef
>
14
#include <
functional
>
15
#include <
iterator
>
16
#include <
memory
>
17
#include <
utility
>
18
#include <
vector
>
19
20
namespace
xrpl
{
21
22
class
WSMsg
23
{
24
public
:
25
WSMsg
() =
default
;
26
WSMsg
(
WSMsg
const
&) =
delete
;
27
WSMsg
&
28
operator=
(
WSMsg
const
&) =
delete
;
29
virtual
~WSMsg
() =
default
;
30
49
virtual
std::pair<boost::tribool, std::vector<boost::asio::const_buffer>
>
50
prepare
(
std::size_t
bytes,
std::function
<
void
(
void
)> resume) = 0;
51
};
52
53
template
<
class
Streambuf>
54
class
StreambufWSMsg
:
public
WSMsg
55
{
56
Streambuf
sb_
;
57
std::size_t
n_
= 0;
58
59
public
:
60
StreambufWSMsg
(Streambuf&& sb) :
sb_
(
std
::move(sb))
61
{
62
}
63
64
std::pair<boost::tribool, std::vector<boost::asio::const_buffer>
>
65
prepare
(
std::size_t
bytes,
std::function
<
void
(
void
)>)
override
66
{
67
if
(
sb_
.size() == 0)
68
return
{
true
, {}};
69
sb_
.consume(
n_
);
70
boost::tribool done;
71
if
(bytes <
sb_
.size())
72
{
73
n_
= bytes;
74
done =
false
;
75
}
76
else
77
{
78
n_
=
sb_
.size();
79
done =
true
;
80
}
81
auto
const
pb = boost::beast::buffers_prefix(
n_
,
sb_
.data());
82
std::vector<boost::asio::const_buffer>
vb(
std::distance
(pb.begin(), pb.end()));
83
std::copy
(pb.begin(), pb.end(),
std::back_inserter
(vb));
84
return
{done, vb};
85
}
86
};
87
88
struct
WSSession
89
{
90
std::shared_ptr<void>
appDefined
;
91
92
virtual
~WSSession
() =
default
;
93
WSSession
() =
default
;
94
WSSession
(
WSSession
const
&) =
delete
;
95
WSSession
&
96
operator=
(
WSSession
const
&) =
delete
;
97
98
virtual
void
99
run
() = 0;
100
101
[[nodiscard]]
virtual
Port
const
&
102
port
()
const
= 0;
103
104
[[nodiscard]]
virtual
HttpRequestType
const
&
105
request
()
const
= 0;
106
107
[[nodiscard]]
virtual
boost::asio::ip::tcp::endpoint
const
&
108
remoteEndpoint
()
const
= 0;
109
113
virtual
void
114
send
(
std::shared_ptr<WSMsg>
w) = 0;
115
116
virtual
void
117
close
() = 0;
118
119
virtual
void
120
close
(boost::beast::websocket::close_reason
const
& reason) = 0;
121
127
virtual
void
128
complete
() = 0;
129
};
130
131
}
// namespace xrpl
algorithm
std::back_inserter
T back_inserter(T... args)
xrpl::StreambufWSMsg::n_
std::size_t n_
Definition
WSSession.h:57
xrpl::StreambufWSMsg::prepare
std::pair< boost::tribool, std::vector< boost::asio::const_buffer > > prepare(std::size_t bytes, std::function< void(void)>) override
Retrieve message data.
Definition
WSSession.h:65
xrpl::StreambufWSMsg::StreambufWSMsg
StreambufWSMsg(Streambuf &&sb)
Definition
WSSession.h:60
xrpl::StreambufWSMsg::sb_
Streambuf sb_
Definition
WSSession.h:56
xrpl::WSMsg::operator=
WSMsg & operator=(WSMsg const &)=delete
xrpl::WSMsg::WSMsg
WSMsg(WSMsg const &)=delete
xrpl::WSMsg::~WSMsg
virtual ~WSMsg()=default
xrpl::WSMsg::prepare
virtual std::pair< boost::tribool, std::vector< boost::asio::const_buffer > > prepare(std::size_t bytes, std::function< void(void)> resume)=0
Retrieve message data.
xrpl::WSMsg::WSMsg
WSMsg()=default
std::copy
T copy(T... args)
cstddef
std::distance
T distance(T... args)
std::function
functional
iterator
memory
std
STL namespace.
xrpl
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition
algorithm.h:5
xrpl::HttpRequestType
boost::beast::http::request< boost::beast::http::dynamic_body > HttpRequestType
Definition
Handoff.h:12
std::pair
std::shared_ptr
std::size_t
xrpl::Port
Configuration information for a Server listening port.
Definition
Port.h:29
xrpl::WSSession::~WSSession
virtual ~WSSession()=default
xrpl::WSSession::close
virtual void close(boost::beast::websocket::close_reason const &reason)=0
xrpl::WSSession::run
virtual void run()=0
xrpl::WSSession::remoteEndpoint
virtual boost::asio::ip::tcp::endpoint const & remoteEndpoint() const =0
xrpl::WSSession::WSSession
WSSession(WSSession const &)=delete
xrpl::WSSession::appDefined
std::shared_ptr< void > appDefined
Definition
WSSession.h:90
xrpl::WSSession::port
virtual Port const & port() const =0
xrpl::WSSession::WSSession
WSSession()=default
xrpl::WSSession::complete
virtual void complete()=0
Indicate that the response is complete.
xrpl::WSSession::request
virtual HttpRequestType const & request() const =0
xrpl::WSSession::operator=
WSSession & operator=(WSSession const &)=delete
xrpl::WSSession::close
virtual void close()=0
xrpl::WSSession::send
virtual void send(std::shared_ptr< WSMsg > w)=0
Send a WebSockets message.
utility
vector
Generated by
1.17.0