ws_engine.hpp
Go to the documentation of this file.
1 /* SPDX-License-Identifier: MPL-2.0 */
2 
3 #ifndef __ZMQ_WS_ENGINE_HPP_INCLUDED__
4 #define __ZMQ_WS_ENGINE_HPP_INCLUDED__
5 
6 #include "io_object.hpp"
7 #include "address.hpp"
8 #include "msg.hpp"
9 #include "stream_engine_base.hpp"
10 #include "ws_address.hpp"
11 
12 #define WS_BUFFER_SIZE 8192
13 #define MAX_HEADER_NAME_LENGTH 1024
14 #define MAX_HEADER_VALUE_LENGTH 2048
15 
16 namespace zmq
17 {
18 class io_thread_t;
19 class session_base_t;
20 
21 typedef enum
22 {
47 
50 
51 
52 typedef enum
53 {
96 
99 
101 {
102  public:
103  ws_engine_t (fd_t fd_,
104  const options_t &options_,
105  const endpoint_uri_pair_t &endpoint_uri_pair_,
106  const ws_address_t &address_,
107  bool client_);
108  ~ws_engine_t ();
109 
110  protected:
111  int decode_and_push (msg_t *msg_);
112  int process_command_message (msg_t *msg_);
113  int produce_pong_message (msg_t *msg_);
114  int produce_ping_message (msg_t *msg_);
115  bool handshake ();
116  void plug_internal ();
117  void start_ws_handshake ();
118 
119  private:
120  int routing_id_msg (msg_t *msg_);
121  int process_routing_id_msg (msg_t *msg_);
122  int produce_close_message (msg_t *msg_);
123  int produce_no_msg_after_close (msg_t *msg_);
125 
126  bool select_protocol (const char *protocol);
127 
128  bool client_handshake ();
129  bool server_handshake ();
130 
131  bool _client;
133 
136 
137  unsigned char _read_buffer[WS_BUFFER_SIZE];
143 
149 
152 };
153 }
154 
155 #endif
zmq::ws_engine_t::handshake
bool handshake()
Definition: ws_engine.cpp:233
zmq::response_line_p
@ response_line_p
Definition: ws_engine.hpp:78
zmq::ws_engine_t::_websocket_protocol
char _websocket_protocol[256]
Definition: ws_engine.hpp:146
stream_engine_base.hpp
zmq::ws_engine_t::process_command_message
int process_command_message(msg_t *msg_)
Definition: ws_engine.cpp:972
zmq::ws_engine_t::routing_id_msg
int routing_id_msg(msg_t *msg_)
Definition: ws_engine.cpp:154
zmq::client_handshake_end_line_cr
@ client_handshake_end_line_cr
Definition: ws_engine.hpp:94
zmq::response_line_status_101
@ response_line_status_101
Definition: ws_engine.hpp:66
zmq::ws_engine_t::close_connection_after_close
int close_connection_after_close(msg_t *msg_)
Definition: ws_engine.cpp:937
zmq::handshake_end_line_cr
@ handshake_end_line_cr
Definition: ws_engine.hpp:45
zmq::options_t
Definition: options.hpp:34
zmq::ws_client_handshake_state_t
ws_client_handshake_state_t
Definition: ws_engine.hpp:52
zmq::request_line_HTTP_slash_1
@ request_line_HTTP_slash_1
Definition: ws_engine.hpp:35
zmq::client_header_field_value
@ client_header_field_value
Definition: ws_engine.hpp:92
zmq::response_line_HTTP_slash_1
@ response_line_HTTP_slash_1
Definition: ws_engine.hpp:60
zmq::ws_engine_t::client_handshake
bool client_handshake()
Definition: ws_engine.cpp:540
zmq::client_handshake_initial
@ client_handshake_initial
Definition: ws_engine.hpp:54
zmq::client_header_field_colon
@ client_header_field_colon
Definition: ws_engine.hpp:90
zmq::ws_engine_t::_server_handshake_state
ws_server_handshake_state_t _server_handshake_state
Definition: ws_engine.hpp:135
zmq::response_line_protocols
@ response_line_protocols
Definition: ws_engine.hpp:86
zmq::request_line_HTTP_slash_1_dot
@ request_line_HTTP_slash_1_dot
Definition: ws_engine.hpp:36
zmq::response_line_sw
@ response_line_sw
Definition: ws_engine.hpp:69
zmq::ws_engine_t::produce_no_msg_after_close
int produce_no_msg_after_close(msg_t *msg_)
Definition: ws_engine.cpp:927
zmq::request_line_GET_space
@ request_line_GET_space
Definition: ws_engine.hpp:27
zmq::header_field_value_trailing_space
@ header_field_value_trailing_space
Definition: ws_engine.hpp:42
zmq::ws_engine_t::_close_msg
msg_t _close_msg
Definition: ws_engine.hpp:151
zmq::response_line_swi
@ response_line_swi
Definition: ws_engine.hpp:70
zmq::request_line_GET
@ request_line_GET
Definition: ws_engine.hpp:26
zmq::response_line_cr
@ response_line_cr
Definition: ws_engine.hpp:87
zmq::ws_engine_t::select_protocol
bool select_protocol(const char *protocol)
Definition: ws_engine.cpp:183
zmq::ws_engine_t::produce_close_message
int produce_close_message(msg_t *msg_)
Definition: ws_engine.cpp:916
zmq::request_line_HT
@ request_line_HT
Definition: ws_engine.hpp:31
zmq::request_line_HTTP_slash_1_dot_1
@ request_line_HTTP_slash_1_dot_1
Definition: ws_engine.hpp:37
zmq::request_line_HTTP
@ request_line_HTTP
Definition: ws_engine.hpp:33
zmq::ws_engine_t::~ws_engine_t
~ws_engine_t()
Definition: ws_engine.cpp:94
zmq::fd_t
int fd_t
Definition: zmq.hpp:287
zmq::request_line_HTT
@ request_line_HTT
Definition: ws_engine.hpp:32
zmq::ws_engine_t::_header_value_position
int _header_value_position
Definition: ws_engine.hpp:142
zmq::ws_engine_t::_header_name_position
int _header_name_position
Definition: ws_engine.hpp:140
zmq::response_line_s
@ response_line_s
Definition: ws_engine.hpp:68
zmq::ws_engine_t::_header_value
char _header_value[MAX_HEADER_VALUE_LENGTH+1]
Definition: ws_engine.hpp:141
zmq
Definition: zmq.hpp:229
zmq::ws_engine_t::_address
ws_address_t _address
Definition: ws_engine.hpp:132
zmq::ws_server_handshake_state_t
ws_server_handshake_state_t
Definition: ws_engine.hpp:21
zmq::ws_engine_t::process_routing_id_msg
int process_routing_id_msg(msg_t *msg_)
Definition: ws_engine.cpp:165
zmq::response_line_HTT
@ response_line_HTT
Definition: ws_engine.hpp:57
zmq::client_header_field_cr
@ client_header_field_cr
Definition: ws_engine.hpp:93
zmq::handshake_complete
@ handshake_complete
Definition: ws_engine.hpp:46
zmq::ws_engine_t::_header_connection_upgrade
bool _header_connection_upgrade
Definition: ws_engine.hpp:145
zmq::ws_engine_t::plug_internal
void plug_internal()
Definition: ws_engine.cpp:147
zmq::ws_engine_t::_client
bool _client
Definition: ws_engine.hpp:131
WS_BUFFER_SIZE
#define WS_BUFFER_SIZE
Definition: ws_engine.hpp:12
zmq::ws_engine_t::_websocket_key
char _websocket_key[MAX_HEADER_VALUE_LENGTH+1]
Definition: ws_engine.hpp:147
zmq::endpoint_uri_pair_t
Definition: endpoint.hpp:17
zmq::ws_engine_t::server_handshake
bool server_handshake()
Definition: ws_engine.cpp:260
zmq::client_header_field_value_trailing_space
@ client_header_field_value_trailing_space
Definition: ws_engine.hpp:91
zmq::response_line_protoc
@ response_line_protoc
Definition: ws_engine.hpp:83
zmq::ws_engine_t::_read_buffer
unsigned char _read_buffer[WS_BUFFER_SIZE]
Definition: ws_engine.hpp:137
zmq::response_line_switchin
@ response_line_switchin
Definition: ws_engine.hpp:75
zmq::response_line_swit
@ response_line_swit
Definition: ws_engine.hpp:71
zmq::ws_engine_t::produce_ping_message
int produce_ping_message(msg_t *msg_)
Definition: ws_engine.cpp:945
zmq::header_field_colon
@ header_field_colon
Definition: ws_engine.hpp:41
zmq::response_line_switching
@ response_line_switching
Definition: ws_engine.hpp:76
zmq::response_line_HTTP
@ response_line_HTTP
Definition: ws_engine.hpp:58
zmq::ws_engine_t::_client_handshake_state
ws_client_handshake_state_t _client_handshake_state
Definition: ws_engine.hpp:134
zmq::ws_engine_t::_write_buffer
unsigned char _write_buffer[WS_BUFFER_SIZE]
Definition: ws_engine.hpp:138
zmq::response_line_HTTP_slash
@ response_line_HTTP_slash
Definition: ws_engine.hpp:59
zmq::response_line_pr
@ response_line_pr
Definition: ws_engine.hpp:79
address.hpp
zmq::ws_engine_t::_websocket_accept
char _websocket_accept[MAX_HEADER_VALUE_LENGTH+1]
Definition: ws_engine.hpp:148
MAX_HEADER_NAME_LENGTH
#define MAX_HEADER_NAME_LENGTH
Definition: ws_engine.hpp:13
zmq::response_line_HTTP_slash_1_dot_1_space
@ response_line_HTTP_slash_1_dot_1_space
Definition: ws_engine.hpp:63
MAX_HEADER_VALUE_LENGTH
#define MAX_HEADER_VALUE_LENGTH
Definition: ws_engine.hpp:14
zmq::header_field_value
@ header_field_value
Definition: ws_engine.hpp:43
zmq::client_handshake_error
@ client_handshake_error
Definition: ws_engine.hpp:97
zmq::response_line_switching_space
@ response_line_switching_space
Definition: ws_engine.hpp:77
zmq::stream_engine_base_t
Definition: stream_engine_base.hpp:28
zmq::ws_address_t
Definition: ws_address.hpp:15
zmq::response_line_HTTP_slash_1_dot
@ response_line_HTTP_slash_1_dot
Definition: ws_engine.hpp:61
msg.hpp
zmq::response_line_protocol
@ response_line_protocol
Definition: ws_engine.hpp:85
zmq::response_line_proto
@ response_line_proto
Definition: ws_engine.hpp:82
zmq::response_line_HT
@ response_line_HT
Definition: ws_engine.hpp:56
zmq::header_field_cr
@ header_field_cr
Definition: ws_engine.hpp:44
zmq::ws_engine_t::_heartbeat_timeout
int _heartbeat_timeout
Definition: ws_engine.hpp:150
zmq::request_line_HTTP_slash
@ request_line_HTTP_slash
Definition: ws_engine.hpp:34
zmq::ws_engine_t::_header_upgrade_websocket
bool _header_upgrade_websocket
Definition: ws_engine.hpp:144
zmq::response_line_status_10
@ response_line_status_10
Definition: ws_engine.hpp:65
zmq::ws_engine_t::produce_pong_message
int produce_pong_message(msg_t *msg_)
Definition: ws_engine.cpp:961
zmq::handshake_error
@ handshake_error
Definition: ws_engine.hpp:48
zmq::response_line_switchi
@ response_line_switchi
Definition: ws_engine.hpp:74
zmq::response_line_H
@ response_line_H
Definition: ws_engine.hpp:55
zmq::request_line_cr
@ request_line_cr
Definition: ws_engine.hpp:38
io_object.hpp
zmq::header_field_name
@ header_field_name
Definition: ws_engine.hpp:40
zmq::response_line_status_1
@ response_line_status_1
Definition: ws_engine.hpp:64
ws_address.hpp
zmq::ws_engine_t::start_ws_handshake
void start_ws_handshake()
Definition: ws_engine.cpp:99
zmq::response_line_switc
@ response_line_switc
Definition: ws_engine.hpp:72
zmq::request_line_G
@ request_line_G
Definition: ws_engine.hpp:24
zmq::ws_engine_t
Definition: ws_engine.hpp:100
zmq::ws_engine_t::decode_and_push
int decode_and_push(msg_t *msg_)
Definition: ws_engine.cpp:886
zmq::ws_engine_t::_header_name
char _header_name[MAX_HEADER_NAME_LENGTH+1]
Definition: ws_engine.hpp:139
zmq::handshake_initial
@ handshake_initial
Definition: ws_engine.hpp:23
zmq::request_line_GE
@ request_line_GE
Definition: ws_engine.hpp:25
zmq::response_line_status_101_space
@ response_line_status_101_space
Definition: ws_engine.hpp:67
zmq::response_line_pro
@ response_line_pro
Definition: ws_engine.hpp:80
zmq::client_header_field_name
@ client_header_field_name
Definition: ws_engine.hpp:89
zmq::request_line_resource
@ request_line_resource
Definition: ws_engine.hpp:28
zmq::client_header_field_begin_name
@ client_header_field_begin_name
Definition: ws_engine.hpp:88
zmq::response_line_HTTP_slash_1_dot_1
@ response_line_HTTP_slash_1_dot_1
Definition: ws_engine.hpp:62
zmq::response_line_switch
@ response_line_switch
Definition: ws_engine.hpp:73
zmq::header_field_begin_name
@ header_field_begin_name
Definition: ws_engine.hpp:39
zmq::request_line_resource_space
@ request_line_resource_space
Definition: ws_engine.hpp:29
zmq::ws_engine_t::ws_engine_t
ws_engine_t(fd_t fd_, const options_t &options_, const endpoint_uri_pair_t &endpoint_uri_pair_, const ws_address_t &address_, bool client_)
Definition: ws_engine.cpp:63
zmq::request_line_H
@ request_line_H
Definition: ws_engine.hpp:30
zmq::response_line_protoco
@ response_line_protoco
Definition: ws_engine.hpp:84
zmq::response_line_prot
@ response_line_prot
Definition: ws_engine.hpp:81
zmq::msg_t
Definition: msg.hpp:33
zmq::client_handshake_complete
@ client_handshake_complete
Definition: ws_engine.hpp:95
options_
DebugStringOptions options_
Definition: src/google/protobuf/descriptor.cc:2410


libaditof
Author(s):
autogenerated on Wed May 21 2025 02:07:02