197 throw exception_t(
"Cannot add one more bytes to expected data.");
199 m_loaded_data.push_back(
static_cast<raw_data_t::value_type
>(
byte));
224 for(
const auto byte:
data )
227 number |=
static_cast<std::uint8_t
>( byte );
243 data.push_back(
static_cast<raw_data_t::value_type
>(
457 std::uint8_t payload_len,
505 payload[
i ] ^= mask[
j ];
528 result.push_back(
static_cast<raw_data_t::value_type
>(
byte) );
540 result.push_back(
static_cast<raw_data_t::value_type
>(
byte) );
546 result.push_back(
static_cast<raw_data_t::value_type
>(
byte) );
557 result.push_back(
static_cast<raw_data_t::value_type
>(
byte) );
569 using ch_type = raw_data_t::value_type;
Exception class for all exceptions thrown by RESTinio.
Websocket message class with more detailed protocol information.
std::uint64_t payload_len() const
Get payload len.
bool m_rsv1_flag
Reserved flags.
message_details_t()=default
std::uint32_t m_masking_key
Masking key.
std::uint8_t m_payload_len
Payload len.
message_details_t(final_frame_flag_t final_flag, opcode_t opcode, size_t payload_len, std::uint32_t masking_key)
std::uint64_t m_ext_payload_len
Ext payload len.
bool m_final_flag
Final flag.
message_details_t(final_frame_flag_t final_flag, opcode_t opcode, size_t payload_len) noexcept
void init_payload_len(size_t payload_len)
Initialize payload len.
bool m_mask_flag
Mask flag.
void set_masking_key(std::uint32_t value)
Set masking key.
void process_extended_length()
Process extended length.
message_details_t m_current_msg
Current websocket message details.
void reset()
Reset internal state.
const message_details_t & current_message() const
Get current mesasge details.
void process_byte(byte_t byte)
Process one byte of incoming buffer.
void parse_first_2_bytes(const raw_data_t &data)
Parse first two bytes of message from buffer.
void parse_ext_payload_len(std::uint8_t payload_len, const raw_data_t &data)
Parse extended length from buffer.
void parse_masking_key(bool mask_flag, const raw_data_t &data)
Parse masking key from buffer.
@ waiting_for_first_2_bytes
size_t parser_execute(const char *data, size_t size)
Parse piece of data from buffer.
void process_masking_key()
Process extended length.
bool header_parsed() const
Check header of current websocket message is parsed.
state_t m_current_state
Current state.
expected_data_t m_expected_data
Buffer for parts of websocket message with known size.
void process_first_2_bytes()
Process first two bytes of message.
void read_number_from_big_endian_bytes(T &number, const raw_data_t &data)
Read number from buffer with network bytes order.
void mask_unmask_payload(std::uint32_t masking_key, raw_data_t &payload)
Do msak/unmask operation with buffer.
constexpr byte_t bit_flag_7
constexpr size_t websocket_max_payload_size_without_ext
constexpr size_t websocket_long_ext_payload_length
raw_data_t write_message_details(const message_details_t &message)
Serialize websocket message details into bytes buffer.
constexpr size_t websocket_short_ext_len_code
constexpr byte_t bit_flag_5
constexpr byte_t payload_len_mask
constexpr byte_t bit_flag_4
constexpr size_t websocket_short_ext_payload_length
constexpr byte_t bit_flag_6
constexpr byte_t opcode_mask
constexpr size_t websocket_long_ext_len_code
constexpr size_t websocket_masking_key_size
constexpr size_t websocket_first_two_bytes_size
Websocket parser constants.
void write_number_to_big_endian_bytes(std::uint64_t &number, raw_data_t &data)
Save number to buffer with network bytes order.
unsigned char byte_t
Alias for byte.
constexpr final_frame_flag_t final_frame
std::string raw_data_t
Bytes buffer.
final_frame_flag_t
WS frame (message) "final"/"not final" flag.
run_on_this_thread_settings_t< Traits > on_this_thread()
A special marker for the case when http_server must be run on the context of the current thread.
bool add_byte_and_check_size(byte_t byte)
Try to add one more byte to loaded data and check loaded data size.
void reset(size_t expected_size)
Reset internal state on next expected data size.
bool all_bytes_loaded() const
Check all bytes are loaded.
expected_data_t()=default
expected_data_t(size_t expected_size)
size_t m_expected_size
Expected data size in bytes.
raw_data_t m_loaded_data
Buffer for accumulating data.