C++ Actor Framework 0.19
|
Implements the WebSocket framing protocol as defined in RFC-6455. More...
#include <framing.hpp>
Public Types | |
using | binary_buffer = std::vector< std::byte > |
using | upper_layer_ptr = std::unique_ptr< web_socket::upper_layer > |
Public Member Functions | |
auto & | up () noexcept |
const auto & | up () const noexcept |
auto & | down () noexcept |
const auto & | down () const noexcept |
error | start (octet_stream::lower_layer *down) override |
Initializes the upper layer. | |
void | abort (const error &reason) override |
Called by the lower layer for cleaning up any state in case of an error or when disposed. | |
ptrdiff_t | consume (byte_span input, byte_span) override |
Consumes bytes from the lower layer. | |
void | prepare_send () override |
Gives the upper layer an opportunity to add additional data to the output buffer. | |
bool | done_sending () override |
Queries whether all pending data has been sent. | |
multiplexer & | mpx () noexcept override |
Returns the multiplexer instance that executes this protocol stack. | |
bool | can_send_more () const noexcept override |
Queries whether the output device can accept more data straight away. | |
void | suspend_reading () override |
Stops reading messages until calling request_messages . | |
bool | is_reading () const noexcept override |
Queries whether the lower layer is currently reading from its input device. | |
void | write_later () override |
Triggers a write callback after the write device signals downstream capacity. | |
void | shutdown (status code, std::string_view desc) override |
Sends a shutdown message with custom status code and msg text. | |
void | request_messages () override |
Pulls messages from the transport until calling suspend_reading . | |
void | begin_binary_message () override |
Begins transmission of a binary message. | |
byte_buffer & | binary_message_buffer () override |
Returns the buffer for the current binary message. | |
bool | end_binary_message () override |
Seals the current binary message buffer and ships a new WebSocket frame. | |
void | begin_text_message () override |
Begins transmission of a text message. | |
text_buffer & | text_message_buffer () override |
Returns the buffer for the current text message. | |
bool | end_text_message () override |
Seals the current text message buffer and ships a new WebSocket frame. | |
virtual error | start (lower_layer *down)=0 |
Initializes the upper layer. | |
virtual ptrdiff_t | consume (byte_span buffer, byte_span delta)=0 |
Consumes bytes from the lower layer. | |
virtual void | prepare_send ()=0 |
Gives the upper layer an opportunity to add additional data to the output buffer. | |
virtual bool | done_sending ()=0 |
Queries whether all pending data has been sent. | |
virtual void | abort (const error &reason)=0 |
Called by the lower layer for cleaning up any state in case of an error or when disposed. | |
![]() | |
virtual void | request_messages ()=0 |
Pulls messages from the transport until calling suspend_reading . | |
virtual void | suspend_reading ()=0 |
Stops reading messages until calling request_messages . | |
virtual void | begin_binary_message ()=0 |
Begins transmission of a binary message. | |
virtual byte_buffer & | binary_message_buffer ()=0 |
Returns the buffer for the current binary message. | |
virtual bool | end_binary_message ()=0 |
Seals the current binary message buffer and ships a new WebSocket frame. | |
virtual void | begin_text_message ()=0 |
Begins transmission of a text message. | |
virtual text_buffer & | text_message_buffer ()=0 |
Returns the buffer for the current text message. | |
virtual bool | end_text_message ()=0 |
Seals the current text message buffer and ships a new WebSocket frame. | |
void | shutdown () override |
Shuts down any connection or session gracefully. | |
void | shutdown (const error &reason) override |
Shuts down any connection or session du to an error. | |
virtual void | shutdown (status code, std::string_view msg)=0 |
Sends a shutdown message with custom status code and msg text. | |
virtual multiplexer & | mpx () noexcept=0 |
Returns the multiplexer instance that executes this protocol stack. | |
virtual bool | can_send_more () const noexcept=0 |
Queries whether the output device can accept more data straight away. | |
virtual bool | is_reading () const noexcept=0 |
Queries whether the lower layer is currently reading from its input device. | |
virtual void | write_later ()=0 |
Triggers a write callback after the write device signals downstream capacity. | |
virtual void | shutdown ()=0 |
Shuts down any connection or session gracefully. | |
virtual void | shutdown (const error &reason) |
Shuts down any connection or session du to an error. | |
Static Public Member Functions | |
static std::unique_ptr< framing > | make_client (upper_layer_ptr up) |
Creates a new framing protocol for client mode. | |
static std::unique_ptr< framing > | make_server (upper_layer_ptr up) |
Creates a new framing protocol for server mode. | |
Public Attributes | |
bool | mask_outgoing_frames = true |
When set to true, causes the layer to mask all outgoing frames with a randomly chosen masking key (cf. | |
Implements the WebSocket framing protocol as defined in RFC-6455.
|
overridevirtual |
Called by the lower layer for cleaning up any state in case of an error or when disposed.
Implements caf::net::generic_upper_layer.
|
overridevirtual |
Begins transmission of a binary message.
Implements caf::net::web_socket::lower_layer.
|
overridevirtual |
Begins transmission of a text message.
Implements caf::net::web_socket::lower_layer.
|
overridevirtual |
Returns the buffer for the current binary message.
Must be called between calling begin_binary_message
and end_binary_message
.
Implements caf::net::web_socket::lower_layer.
|
overridevirtualnoexcept |
Queries whether the output device can accept more data straight away.
Implements caf::net::generic_lower_layer.
|
overridevirtual |
Consumes bytes from the lower layer.
buffer | Available bytes to read. |
delta | Bytes that arrived since last calling this function. |
Implements caf::net::octet_stream::upper_layer.
|
overridevirtual |
Queries whether all pending data has been sent.
The lower calls this function to decide whether it has to wait for write events on the socket.
Implements caf::net::generic_upper_layer.
|
overridevirtual |
Seals the current binary message buffer and ships a new WebSocket frame.
Implements caf::net::web_socket::lower_layer.
|
overridevirtual |
Seals the current text message buffer and ships a new WebSocket frame.
Implements caf::net::web_socket::lower_layer.
|
overridevirtualnoexcept |
Queries whether the lower layer is currently reading from its input device.
Implements caf::net::generic_lower_layer.
|
overridevirtualnoexcept |
Returns the multiplexer instance that executes this protocol stack.
Implements caf::net::generic_lower_layer.
|
overridevirtual |
Gives the upper layer an opportunity to add additional data to the output buffer.
Implements caf::net::generic_upper_layer.
|
overridevirtual |
Pulls messages from the transport until calling suspend_reading
.
Implements caf::net::web_socket::lower_layer.
|
overridevirtual |
Sends a shutdown message with custom status code
and msg
text.
Implements caf::net::web_socket::lower_layer.
|
overridevirtual |
Initializes the upper layer.
down | A pointer to the lower layer that remains valid for the lifetime of the upper layer. |
Implements caf::net::octet_stream::upper_layer.
|
overridevirtual |
Stops reading messages until calling request_messages
.
Implements caf::net::web_socket::lower_layer.
|
overridevirtual |
Returns the buffer for the current text message.
Must be called between calling begin_text_message
and end_text_message
.
Implements caf::net::web_socket::lower_layer.
|
overridevirtual |
Triggers a write callback after the write device signals downstream capacity.
Does nothing if this layer is already writing.
Implements caf::net::generic_lower_layer.
bool caf::net::web_socket::framing::mask_outgoing_frames = true |
When set to true, causes the layer to mask all outgoing frames with a randomly chosen masking key (cf.
RFC 6455, Section 5.3). Servers may set this to false, whereas clients are required to always mask according to the standard.