GNU libmicrohttpd 0.9.77
|
Support for the websocket protocol. More...
Go to the source code of this file.
Support for the websocket protocol.
Definition in file mhd_websocket.c.
#define MHD_WEBSOCKET_FLAG_MASK_ALL |
Definition at line 83 of file mhd_websocket.c.
#define MHD_WEBSOCKET_FLAG_MASK_FRAGMENTATION MHD_WEBSOCKET_FLAG_WANT_FRAGMENTS |
Definition at line 79 of file mhd_websocket.c.
#define MHD_WEBSOCKET_FLAG_MASK_GENERATE_CLOSE_FRAMES MHD_WEBSOCKET_FLAG_GENERATE_CLOSE_FRAMES_ON_ERROR |
Definition at line 81 of file mhd_websocket.c.
#define MHD_WEBSOCKET_FLAG_MASK_SERVERCLIENT MHD_WEBSOCKET_FLAG_CLIENT |
Definition at line 78 of file mhd_websocket.c.
Definition at line 98 of file mhd_websocket.c.
Enumerator | |
---|---|
MHD_WebSocket_Opcode_Continuation | |
MHD_WebSocket_Opcode_Text | |
MHD_WebSocket_Opcode_Binary | |
MHD_WebSocket_Opcode_Close | |
MHD_WebSocket_Opcode_Ping | |
MHD_WebSocket_Opcode_Pong |
Definition at line 88 of file mhd_websocket.c.
Enumerator | |
---|---|
MHD_WebSocket_UTF8Result_Invalid | |
MHD_WebSocket_UTF8Result_Valid | |
MHD_WebSocket_UTF8Result_Incomplete |
Definition at line 122 of file mhd_websocket.c.
Converts a 64 bit value into network byte order (MSB first) in dependence of the host system
Definition at line 2421 of file mhd_websocket.c.
References MHD_HTTP_OK.
Referenced by MHD_websocket_decode(), and MHD_websocket_encode_data().
Converts a 16 bit value into network byte order (MSB first) in dependence of the host system
Definition at line 2397 of file mhd_websocket.c.
References MHD_HTTP_OK.
Referenced by MHD_websocket_decode(), MHD_websocket_encode_close(), MHD_websocket_encode_data(), and MHD_websocket_split_close_reason().
_MHD_EXTERN enum MHD_WEBSOCKET_STATUS MHD_websocket_check_connection_header | ( | const char * | connection_header | ) |
Checks whether the "Connection" request header has the 'Upgrade' token.
Definition at line 282 of file mhd_websocket.c.
References MHD_HTTP_OK, MHD_WEBSOCKET_STATUS_NO_WEBSOCKET_HANDSHAKE_HEADER, MHD_WEBSOCKET_STATUS_OK, and NULL.
_MHD_EXTERN enum MHD_WEBSOCKET_STATUS MHD_websocket_check_http_version | ( | const char * | http_version | ) |
Checks whether the HTTP version is 1.1 or above.
Definition at line 189 of file mhd_websocket.c.
References MHD_HTTP_OK, MHD_WEBSOCKET_STATUS_NO_WEBSOCKET_HANDSHAKE_HEADER, MHD_WEBSOCKET_STATUS_OK, and NULL.
_MHD_EXTERN enum MHD_WEBSOCKET_STATUS MHD_websocket_check_upgrade_header | ( | const char * | upgrade_header | ) |
Checks whether the "Upgrade" request header has the "websocket" keyword.
Definition at line 365 of file mhd_websocket.c.
References MHD_HTTP_OK, MHD_WEBSOCKET_STATUS_NO_WEBSOCKET_HANDSHAKE_HEADER, MHD_WEBSOCKET_STATUS_OK, and NULL.
|
static |
Checks a UTF-8 sequence
Definition at line 2100 of file mhd_websocket.c.
References MHD_HTTP_OK, MHD_WebSocket_UTF8Result_Incomplete, MHD_WebSocket_UTF8Result_Invalid, MHD_WebSocket_UTF8Result_Valid, MHD_WEBSOCKET_UTF8STEP_NORMAL, MHD_WEBSOCKET_UTF8STEP_UTF2TAIL_1OF1, MHD_WEBSOCKET_UTF8STEP_UTF3TAIL1_1OF2, MHD_WEBSOCKET_UTF8STEP_UTF3TAIL2_1OF2, MHD_WEBSOCKET_UTF8STEP_UTF3TAIL_1OF2, MHD_WEBSOCKET_UTF8STEP_UTF3TAIL_2OF2, MHD_WEBSOCKET_UTF8STEP_UTF4TAIL1_1OF3, MHD_WEBSOCKET_UTF8STEP_UTF4TAIL2_1OF3, MHD_WEBSOCKET_UTF8STEP_UTF4TAIL_1OF3, MHD_WEBSOCKET_UTF8STEP_UTF4TAIL_2OF3, MHD_WEBSOCKET_UTF8STEP_UTF4TAIL_3OF3, and NULL.
Referenced by MHD_websocket_decode(), MHD_websocket_encode_close(), and MHD_websocket_encode_text().
_MHD_EXTERN enum MHD_WEBSOCKET_STATUS MHD_websocket_check_version_header | ( | const char * | version_header | ) |
Checks whether the "Sec-WebSocket-Version" request header equals to "13"
Definition at line 453 of file mhd_websocket.c.
References MHD_HTTP_OK, MHD_WEBSOCKET_STATUS_NO_WEBSOCKET_HANDSHAKE_HEADER, MHD_WEBSOCKET_STATUS_OK, and NULL.
|
static |
Copies the payload to the destination (using mask)
Definition at line 2069 of file mhd_websocket.c.
References MHD_HTTP_OK.
Referenced by MHD_websocket_decode(), MHD_websocket_encode_close(), MHD_websocket_encode_data(), and MHD_websocket_encode_ping_pong().
_MHD_EXTERN enum MHD_WEBSOCKET_STATUS MHD_websocket_create_accept_header | ( | const char * | sec_websocket_key, |
char * | sec_websocket_accept | ||
) |
Creates the response for the Sec-WebSocket-Accept header
Definition at line 479 of file mhd_websocket.c.
References MHD_HTTP_OK, MHD_SHA1_finish(), MHD_SHA1_init(), MHD_SHA1_update(), MHD_WEBSOCKET_STATUS_NO_WEBSOCKET_HANDSHAKE_HEADER, MHD_WEBSOCKET_STATUS_OK, MHD_WEBSOCKET_STATUS_PARAMETER_ERROR, and NULL.
_MHD_EXTERN enum MHD_WEBSOCKET_STATUS MHD_websocket_decode | ( | struct MHD_WebSocketStream * | ws, |
const char * | streambuf, | ||
size_t | streambuf_len, | ||
size_t * | streambuf_read_len, | ||
char ** | payload, | ||
size_t * | payload_len | ||
) |
Decodes incoming data to a websocket frame
Definition at line 666 of file mhd_websocket.c.
References MHD_htonll(), MHD_htons(), MHD_HTTP_OK, MHD_websocket_check_utf8(), MHD_WEBSOCKET_CLOSEREASON_MALFORMED_UTF8, MHD_WEBSOCKET_CLOSEREASON_MAXIMUM_ALLOWED_PAYLOAD_SIZE_EXCEEDED, MHD_WEBSOCKET_CLOSEREASON_PROTOCOL_ERROR, MHD_websocket_copy_payload(), MHD_websocket_decode_header_complete(), MHD_websocket_decode_payload_complete(), MHD_WebSocket_DecodeStep_BrokenStream, MHD_WebSocket_DecodeStep_HeaderCompleted, MHD_WebSocket_DecodeStep_Length1of2, MHD_WebSocket_DecodeStep_Length1of8, MHD_WebSocket_DecodeStep_Length1ofX, MHD_WebSocket_DecodeStep_Length2of2, MHD_WebSocket_DecodeStep_Length2of8, MHD_WebSocket_DecodeStep_Length3of8, MHD_WebSocket_DecodeStep_Length4of8, MHD_WebSocket_DecodeStep_Length5of8, MHD_WebSocket_DecodeStep_Length6of8, MHD_WebSocket_DecodeStep_Length7of8, MHD_WebSocket_DecodeStep_Length8of8, MHD_WebSocket_DecodeStep_Mask1Of4, MHD_WebSocket_DecodeStep_Mask2Of4, MHD_WebSocket_DecodeStep_Mask3Of4, MHD_WebSocket_DecodeStep_Mask4Of4, MHD_WebSocket_DecodeStep_PayloadOfControlFrame, MHD_WebSocket_DecodeStep_PayloadOfDataFrame, MHD_WebSocket_DecodeStep_Start, MHD_websocket_encode_close(), MHD_WEBSOCKET_FLAG_CLIENT, MHD_WEBSOCKET_FLAG_GENERATE_CLOSE_FRAMES_ON_ERROR, MHD_WEBSOCKET_FLAG_SERVER, MHD_WebSocket_Opcode_Binary, MHD_WebSocket_Opcode_Close, MHD_WebSocket_Opcode_Continuation, MHD_WebSocket_Opcode_Ping, MHD_WebSocket_Opcode_Pong, MHD_WebSocket_Opcode_Text, MHD_WEBSOCKET_STATUS_MAXIMUM_SIZE_EXCEEDED, MHD_WEBSOCKET_STATUS_OK, MHD_WEBSOCKET_STATUS_PARAMETER_ERROR, MHD_WEBSOCKET_STATUS_PROTOCOL_ERROR, MHD_WEBSOCKET_STATUS_STREAM_BROKEN, MHD_WEBSOCKET_STATUS_UTF8_ENCODING_ERROR, MHD_WebSocket_UTF8Result_Invalid, MHD_WEBSOCKET_VALIDITY_INVALID, MHD_WEBSOCKET_VALIDITY_ONLY_VALID_FOR_CONTROL_FRAMES, NULL, and SIZE_MAX.
|
static |
Definition at line 1328 of file mhd_websocket.c.
References MHD_HTTP_OK, MHD_WEBSOCKET_CLOSEREASON_MAXIMUM_ALLOWED_PAYLOAD_SIZE_EXCEEDED, MHD_WebSocket_DecodeStep_BrokenStream, MHD_WebSocket_DecodeStep_PayloadOfControlFrame, MHD_WebSocket_DecodeStep_PayloadOfDataFrame, MHD_websocket_encode_close(), MHD_WEBSOCKET_FLAG_GENERATE_CLOSE_FRAMES_ON_ERROR, MHD_WebSocket_Opcode_Binary, MHD_WebSocket_Opcode_Close, MHD_WebSocket_Opcode_Continuation, MHD_WebSocket_Opcode_Ping, MHD_WebSocket_Opcode_Pong, MHD_WebSocket_Opcode_Text, MHD_WEBSOCKET_STATUS_MAXIMUM_SIZE_EXCEEDED, MHD_WEBSOCKET_STATUS_MEMORY_ERROR, MHD_WEBSOCKET_STATUS_OK, MHD_WEBSOCKET_VALIDITY_INVALID, and NULL.
Referenced by MHD_websocket_decode().
|
static |
Definition at line 1431 of file mhd_websocket.c.
References MHD_HTTP_OK, MHD_WebSocket_DecodeStep_PayloadOfDataFrame, MHD_WebSocket_DecodeStep_Start, MHD_WEBSOCKET_FLAG_WANT_FRAGMENTS, MHD_WebSocket_Opcode_Continuation, MHD_WebSocket_Opcode_Text, MHD_WEBSOCKET_STATUS_MEMORY_ERROR, MHD_WEBSOCKET_STATUS_OK, MHD_WEBSOCKET_UTF8STEP_NORMAL, MHD_WEBSOCKET_UTF8STEP_UTF2TAIL_1OF1, MHD_WEBSOCKET_UTF8STEP_UTF3TAIL1_1OF2, MHD_WEBSOCKET_UTF8STEP_UTF3TAIL2_1OF2, MHD_WEBSOCKET_UTF8STEP_UTF3TAIL_1OF2, MHD_WEBSOCKET_UTF8STEP_UTF3TAIL_2OF2, MHD_WEBSOCKET_UTF8STEP_UTF4TAIL1_1OF3, MHD_WEBSOCKET_UTF8STEP_UTF4TAIL2_1OF3, MHD_WEBSOCKET_UTF8STEP_UTF4TAIL_1OF3, MHD_WEBSOCKET_UTF8STEP_UTF4TAIL_2OF3, MHD_WEBSOCKET_UTF8STEP_UTF4TAIL_3OF3, and NULL.
Referenced by MHD_websocket_decode().
_MHD_EXTERN enum MHD_WEBSOCKET_STATUS MHD_websocket_encode_binary | ( | struct MHD_WebSocketStream * | ws, |
const char * | payload, | ||
size_t | payload_len, | ||
int | fragmentation, | ||
char ** | frame, | ||
size_t * | frame_len | ||
) |
Encodes binary data into a websocket binary frame
Definition at line 1696 of file mhd_websocket.c.
References MHD_HTTP_OK, MHD_websocket_encode_data(), MHD_WEBSOCKET_FRAGMENTATION_LAST, MHD_WEBSOCKET_FRAGMENTATION_NONE, MHD_WebSocket_Opcode_Binary, MHD_WEBSOCKET_STATUS_MAXIMUM_SIZE_EXCEEDED, MHD_WEBSOCKET_STATUS_PARAMETER_ERROR, and NULL.
_MHD_EXTERN enum MHD_WEBSOCKET_STATUS MHD_websocket_encode_close | ( | struct MHD_WebSocketStream * | ws, |
unsigned short | reason_code, | ||
const char * | reason_utf8, | ||
size_t | reason_utf8_len, | ||
char ** | frame, | ||
size_t * | frame_len | ||
) |
Encodes a websocket close frame
Definition at line 1938 of file mhd_websocket.c.
References MHD_htons(), MHD_HTTP_OK, MHD_websocket_check_utf8(), MHD_WEBSOCKET_CLOSEREASON_NO_REASON, MHD_websocket_copy_payload(), MHD_websocket_encode_is_masked(), MHD_websocket_encode_overhead_size(), MHD_websocket_generate_mask(), MHD_WEBSOCKET_STATUS_MAXIMUM_SIZE_EXCEEDED, MHD_WEBSOCKET_STATUS_MEMORY_ERROR, MHD_WEBSOCKET_STATUS_OK, MHD_WEBSOCKET_STATUS_PARAMETER_ERROR, MHD_WEBSOCKET_STATUS_UTF8_ENCODING_ERROR, MHD_WebSocket_UTF8Result_Valid, and NULL.
Referenced by MHD_websocket_decode(), and MHD_websocket_decode_header_complete().
|
static |
Internal function for encoding text/binary data into a websocket frame
Definition at line 1740 of file mhd_websocket.c.
References MHD_htonll(), MHD_htons(), MHD_HTTP_OK, MHD_websocket_copy_payload(), MHD_websocket_encode_is_masked(), MHD_websocket_encode_overhead_size(), MHD_WEBSOCKET_FRAGMENTATION_FIRST, MHD_WEBSOCKET_FRAGMENTATION_FOLLOWING, MHD_WEBSOCKET_FRAGMENTATION_LAST, MHD_WEBSOCKET_FRAGMENTATION_NONE, MHD_websocket_generate_mask(), MHD_WebSocket_Opcode_Continuation, MHD_WEBSOCKET_STATUS_MEMORY_ERROR, MHD_WEBSOCKET_STATUS_OK, and NULL.
Referenced by MHD_websocket_encode_binary(), and MHD_websocket_encode_text().
Returns the 0x80 prefix for masked data, 0x00 otherwise
Definition at line 2043 of file mhd_websocket.c.
References MHD_HTTP_OK, MHD_WEBSOCKET_FLAG_CLIENT, and MHD_WEBSOCKET_FLAG_MASK_SERVERCLIENT.
Referenced by MHD_websocket_encode_close(), MHD_websocket_encode_data(), MHD_websocket_encode_overhead_size(), and MHD_websocket_encode_ping_pong().
|
static |
Calculates the size of the overhead in bytes
Definition at line 2054 of file mhd_websocket.c.
References MHD_HTTP_OK, and MHD_websocket_encode_is_masked().
Referenced by MHD_websocket_encode_close(), MHD_websocket_encode_data(), and MHD_websocket_encode_ping_pong().
_MHD_EXTERN enum MHD_WEBSOCKET_STATUS MHD_websocket_encode_ping | ( | struct MHD_WebSocketStream * | ws, |
const char * | payload, | ||
size_t | payload_len, | ||
char ** | frame, | ||
size_t * | frame_len | ||
) |
Encodes a websocket ping frame
Definition at line 1825 of file mhd_websocket.c.
References MHD_HTTP_OK, MHD_websocket_encode_ping_pong(), and MHD_WebSocket_Opcode_Ping.
|
static |
Internal function for encoding ping/pong frames
Definition at line 1865 of file mhd_websocket.c.
References MHD_HTTP_OK, MHD_websocket_copy_payload(), MHD_websocket_encode_is_masked(), MHD_websocket_encode_overhead_size(), MHD_websocket_generate_mask(), MHD_WEBSOCKET_STATUS_MAXIMUM_SIZE_EXCEEDED, MHD_WEBSOCKET_STATUS_MEMORY_ERROR, MHD_WEBSOCKET_STATUS_OK, MHD_WEBSOCKET_STATUS_PARAMETER_ERROR, and NULL.
Referenced by MHD_websocket_encode_ping(), and MHD_websocket_encode_pong().
_MHD_EXTERN enum MHD_WEBSOCKET_STATUS MHD_websocket_encode_pong | ( | struct MHD_WebSocketStream * | ws, |
const char * | payload, | ||
size_t | payload_len, | ||
char ** | frame, | ||
size_t * | frame_len | ||
) |
Encodes a websocket pong frame
Definition at line 1845 of file mhd_websocket.c.
References MHD_HTTP_OK, MHD_websocket_encode_ping_pong(), and MHD_WebSocket_Opcode_Pong.
_MHD_EXTERN enum MHD_WEBSOCKET_STATUS MHD_websocket_encode_text | ( | struct MHD_WebSocketStream * | ws, |
const char * | payload_utf8, | ||
size_t | payload_utf8_len, | ||
int | fragmentation, | ||
char ** | frame, | ||
size_t * | frame_len, | ||
int * | utf8_step | ||
) |
Encodes a text into a websocket text frame
Definition at line 1629 of file mhd_websocket.c.
References MHD_HTTP_OK, MHD_websocket_check_utf8(), MHD_websocket_encode_data(), MHD_WEBSOCKET_FRAGMENTATION_FIRST, MHD_WEBSOCKET_FRAGMENTATION_LAST, MHD_WEBSOCKET_FRAGMENTATION_NONE, MHD_WebSocket_Opcode_Text, MHD_WEBSOCKET_STATUS_MAXIMUM_SIZE_EXCEEDED, MHD_WEBSOCKET_STATUS_PARAMETER_ERROR, MHD_WEBSOCKET_STATUS_UTF8_ENCODING_ERROR, MHD_WebSocket_UTF8Result_Incomplete, MHD_WebSocket_UTF8Result_Invalid, MHD_WEBSOCKET_UTF8STEP_NORMAL, and NULL.
_MHD_EXTERN int MHD_websocket_free | ( | struct MHD_WebSocketStream * | ws, |
void * | buf | ||
) |
Calls the free function associated with the websocket steam
Definition at line 2378 of file mhd_websocket.c.
References MHD_HTTP_OK, MHD_WEBSOCKET_STATUS_OK, MHD_WEBSOCKET_STATUS_PARAMETER_ERROR, and NULL.
Generates a mask for masking by calling a random number generator.
Definition at line 2314 of file mhd_websocket.c.
References MHD_HTTP_OK, NULL, and offset.
Referenced by MHD_websocket_encode_close(), MHD_websocket_encode_data(), and MHD_websocket_encode_ping_pong().
_MHD_EXTERN void * MHD_websocket_malloc | ( | struct MHD_WebSocketStream * | ws, |
size_t | buf_len | ||
) |
Calls the malloc function associated with the websocket steam
Definition at line 2345 of file mhd_websocket.c.
References MHD_HTTP_OK, and NULL.
_MHD_EXTERN void * MHD_websocket_realloc | ( | struct MHD_WebSocketStream * | ws, |
void * | buf, | ||
size_t | new_buf_len | ||
) |
Calls the realloc function associated with the websocket steam
Definition at line 2361 of file mhd_websocket.c.
References MHD_HTTP_OK, and NULL.
_MHD_EXTERN enum MHD_WEBSOCKET_STATUS MHD_websocket_split_close_reason | ( | const char * | payload, |
size_t | payload_len, | ||
unsigned short * | reason_code, | ||
const char ** | reason_utf8, | ||
size_t * | reason_utf8_len | ||
) |
Splits the received close reason
Definition at line 1571 of file mhd_websocket.c.
References MHD_htons(), MHD_HTTP_OK, MHD_WEBSOCKET_CLOSEREASON_NO_REASON, MHD_WEBSOCKET_STATUS_MAXIMUM_SIZE_EXCEEDED, MHD_WEBSOCKET_STATUS_OK, MHD_WEBSOCKET_STATUS_PARAMETER_ERROR, MHD_WEBSOCKET_STATUS_PROTOCOL_ERROR, and NULL.
_MHD_EXTERN enum MHD_WEBSOCKET_STATUS MHD_websocket_stream_free | ( | struct MHD_WebSocketStream * | ws | ) |
Frees a previously allocated websocket stream
Definition at line 612 of file mhd_websocket.c.
References MHD_HTTP_OK, MHD_WEBSOCKET_STATUS_OK, MHD_WEBSOCKET_STATUS_PARAMETER_ERROR, and NULL.
_MHD_EXTERN enum MHD_WEBSOCKET_STATUS MHD_websocket_stream_init | ( | struct MHD_WebSocketStream ** | ws, |
int | flags, | ||
size_t | max_payload_size | ||
) |
Initializes a new websocket stream
Definition at line 538 of file mhd_websocket.c.
References MHD_HTTP_OK, MHD_websocket_stream_init2(), and NULL.
_MHD_EXTERN enum MHD_WEBSOCKET_STATUS MHD_websocket_stream_init2 | ( | struct MHD_WebSocketStream ** | ws, |
int | flags, | ||
size_t | max_payload_size, | ||
MHD_WebSocketMallocCallback | callback_malloc, | ||
MHD_WebSocketReallocCallback | callback_realloc, | ||
MHD_WebSocketFreeCallback | callback_free, | ||
void * | cls_rng, | ||
MHD_WebSocketRandomNumberGenerator | callback_rng | ||
) |
Initializes a new websocket stream with additional parameters for allocation functions
Definition at line 558 of file mhd_websocket.c.
References MHD_HTTP_OK, MHD_WEBSOCKET_FLAG_CLIENT, MHD_WEBSOCKET_FLAG_MASK_ALL, MHD_WEBSOCKET_STATUS_MEMORY_ERROR, MHD_WEBSOCKET_STATUS_OK, MHD_WEBSOCKET_STATUS_PARAMETER_ERROR, MHD_WEBSOCKET_VALIDITY_VALID, and NULL.
Referenced by MHD_websocket_stream_init().
_MHD_EXTERN enum MHD_WEBSOCKET_STATUS MHD_websocket_stream_invalidate | ( | struct MHD_WebSocketStream * | ws | ) |
Invalidates a websocket stream (no more decoding possible)
Definition at line 635 of file mhd_websocket.c.
References MHD_HTTP_OK, MHD_WEBSOCKET_STATUS_OK, MHD_WEBSOCKET_STATUS_PARAMETER_ERROR, MHD_WEBSOCKET_VALIDITY_INVALID, and NULL.
_MHD_EXTERN enum MHD_WEBSOCKET_VALIDITY MHD_websocket_stream_is_valid | ( | struct MHD_WebSocketStream * | ws | ) |
Returns whether a websocket stream is valid
Definition at line 652 of file mhd_websocket.c.
References MHD_HTTP_OK, MHD_WEBSOCKET_VALIDITY_INVALID, and NULL.