mirror of
https://github.com/signalwire/freeswitch.git
synced 2025-08-13 17:38:59 +00:00
add ws
This commit is contained in:
96
libs/libwebsockets/lib/extension-x-google-mux.h
Normal file
96
libs/libwebsockets/lib/extension-x-google-mux.h
Normal file
@@ -0,0 +1,96 @@
|
||||
|
||||
#if 0
|
||||
#ifdef WIN32
|
||||
static
|
||||
#else
|
||||
static inline
|
||||
#endif
|
||||
void muxdebug(const char *format, ...)
|
||||
{
|
||||
va_list ap;
|
||||
va_start(ap, format); vfprintf(stderr, format, ap); va_end(ap);
|
||||
}
|
||||
#else
|
||||
#ifdef WIN32
|
||||
static
|
||||
#else
|
||||
static inline
|
||||
#endif
|
||||
void muxdebug(const char *format, ...)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
#define MAX_XGM_SUBCHANNELS 8192
|
||||
|
||||
enum lws_ext_x_google_mux__parser_states {
|
||||
LWS_EXT_XGM_STATE__MUX_BLOCK_1,
|
||||
LWS_EXT_XGM_STATE__MUX_BLOCK_2,
|
||||
LWS_EXT_XGM_STATE__MUX_BLOCK_3,
|
||||
LWS_EXT_XGM_STATE__ADDCHANNEL_LEN,
|
||||
LWS_EXT_XGM_STATE__ADDCHANNEL_LEN16_1,
|
||||
LWS_EXT_XGM_STATE__ADDCHANNEL_LEN16_2,
|
||||
LWS_EXT_XGM_STATE__ADDCHANNEL_LEN32_1,
|
||||
LWS_EXT_XGM_STATE__ADDCHANNEL_LEN32_2,
|
||||
LWS_EXT_XGM_STATE__ADDCHANNEL_LEN32_3,
|
||||
LWS_EXT_XGM_STATE__ADDCHANNEL_LEN32_4,
|
||||
LWS_EXT_XGM_STATE__ADDCHANNEL_HEADERS,
|
||||
LWS_EXT_XGM_STATE__FLOWCONTROL_1,
|
||||
LWS_EXT_XGM_STATE__FLOWCONTROL_2,
|
||||
LWS_EXT_XGM_STATE__FLOWCONTROL_3,
|
||||
LWS_EXT_XGM_STATE__FLOWCONTROL_4,
|
||||
LWS_EXT_XGM_STATE__DATA,
|
||||
};
|
||||
|
||||
enum lws_ext_x_goole_mux__mux_opcodes {
|
||||
LWS_EXT_XGM_OPC__DATA,
|
||||
LWS_EXT_XGM_OPC__ADDCHANNEL,
|
||||
LWS_EXT_XGM_OPC__DROPCHANNEL,
|
||||
LWS_EXT_XGM_OPC__FLOWCONTROL,
|
||||
LWS_EXT_XGM_OPC__RESERVED_4,
|
||||
LWS_EXT_XGM_OPC__RESERVED_5,
|
||||
LWS_EXT_XGM_OPC__RESERVED_6,
|
||||
LWS_EXT_XGM_OPC__RESERVED_7,
|
||||
};
|
||||
|
||||
/* one of these per context (server or client) */
|
||||
|
||||
struct lws_ext_x_google_mux_context {
|
||||
/*
|
||||
* these are listing physical connections, not children sharing a
|
||||
* parent mux physical connection
|
||||
*/
|
||||
struct libwebsocket *wsi_muxconns[MAX_CLIENTS];
|
||||
/*
|
||||
* when this is < 2, we do not do any mux blocks
|
||||
* just pure websockets
|
||||
*/
|
||||
int active_conns;
|
||||
};
|
||||
|
||||
/* one of these per connection (server or client) */
|
||||
|
||||
struct lws_ext_x_google_mux_conn {
|
||||
enum lws_ext_x_goole_mux__mux_opcodes block_subopcode;
|
||||
int block_subchannel;
|
||||
unsigned int length;
|
||||
enum lws_ext_x_google_mux__parser_states state;
|
||||
/* child points to the mux wsi using this */
|
||||
struct libwebsocket *wsi_parent;
|
||||
int subchannel;
|
||||
struct libwebsocket *wsi_children[MAX_CLIENTS];
|
||||
int highest_child_subchannel;
|
||||
char awaiting_POLLOUT;
|
||||
int count_children_needing_POLLOUT;
|
||||
int sticky_mux_used;
|
||||
int defeat_mux_opcode_wrapping;
|
||||
int original_ch1_closed;
|
||||
int ignore_cmd;
|
||||
};
|
||||
|
||||
extern int
|
||||
lws_extension_callback_x_google_mux(struct libwebsocket_context *context,
|
||||
struct libwebsocket_extension *ext,
|
||||
struct libwebsocket *wsi,
|
||||
enum libwebsocket_extension_callback_reasons reason,
|
||||
void *user, void *in, size_t len);
|
Reference in New Issue
Block a user