GNU libmicrohttpd  0.9.76
microhttpd_ws.h
Go to the documentation of this file.
1 /*
2  This file is part of libmicrohttpd
3  Copyright (C) 2021 Christian Grothoff (and other contributing authors)
4 
5  This library is free software; you can redistribute it and/or
6  modify it under the terms of the GNU Lesser General Public
7  License as published by the Free Software Foundation; either
8  version 2.1 of the License, or (at your option) any later version.
9 
10  This library is distributed in the hope that it will be useful,
11  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13  Lesser General Public License for more details.
14 
15  You should have received a copy of the GNU Lesser General Public
16  License along with this library; if not, write to the Free Software
17  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18 */
24 /*
25  * *** WARNING! ***
26  * * The websockets interface is currenly in "experimental" stage. *
27  * * It does not work on architectures with endianness different from *
28  * * big endian and little endian and may have some portability issues.*
29  * * API and ABI are not yet stable. *
30  */
31 #ifndef MHD_MICROHTTPD_WS_H
32 #define MHD_MICROHTTPD_WS_H
33 
34 
35 #ifdef __cplusplus
36 extern "C"
37 {
38 #if 0 /* keep Emacsens' auto-indent happy */
39 }
40 #endif
41 #endif
42 
43 
49 struct MHD_WebSocketStream;
50 
59 {
112 };
113 
121 {
151 };
152 
160 {
353 };
354 
372 {
432 };
433 
447 {
510 };
511 
521 {
541 };
557 typedef void *
558 (*MHD_WebSocketMallocCallback) (size_t buf_len);
575 typedef void *
576 (*MHD_WebSocketReallocCallback) (void *buf, size_t new_buf_len);
591 typedef void
592 (*MHD_WebSocketFreeCallback) (void *buf);
609 typedef size_t
610 (*MHD_WebSocketRandomNumberGenerator) (void *cls, void *buf, size_t buf_len);
611 
625 MHD_websocket_check_http_version (const char *http_version);
626 
644 MHD_websocket_check_connection_header (const char *connection_header);
645 
663 MHD_websocket_check_upgrade_header (const char *upgrade_header);
664 
683 MHD_websocket_check_version_header (const char *version_header);
684 
705 MHD_websocket_create_accept_header (const char *sec_websocket_key,
706  char *sec_websocket_accept);
707 
721 MHD_websocket_stream_init (struct MHD_WebSocketStream **ws,
722  int flags,
723  size_t max_payload_size);
724 
756 MHD_websocket_stream_init2 (struct MHD_WebSocketStream **ws,
757  int flags,
758  size_t max_payload_size,
759  MHD_WebSocketMallocCallback callback_malloc,
760  MHD_WebSocketReallocCallback callback_realloc,
761  MHD_WebSocketFreeCallback callback_free,
762  void *cls_rng,
764 
774 MHD_websocket_stream_free (struct MHD_WebSocketStream *ws);
775 
787 MHD_websocket_stream_invalidate (struct MHD_WebSocketStream *ws);
788 
799 MHD_websocket_stream_is_valid (struct MHD_WebSocketStream *ws);
800 
846 MHD_websocket_decode (struct MHD_WebSocketStream *ws,
847  const char *streambuf,
848  size_t streambuf_len,
849  size_t *streambuf_read_len,
850  char **payload,
851  size_t *payload_len);
852 
881 MHD_websocket_split_close_reason (const char *payload,
882  size_t payload_len,
883  unsigned short *reason_code,
884  const char **reason_utf8,
885  size_t *reason_utf8_len);
886 
923 MHD_websocket_encode_text (struct MHD_WebSocketStream *ws,
924  const char *payload_utf8,
925  size_t payload_utf8_len,
926  int fragmentation,
927  char **frame,
928  size_t *frame_len,
929  int *utf8_step);
930 
958 MHD_websocket_encode_binary (struct MHD_WebSocketStream *ws,
959  const char *payload,
960  size_t payload_len,
961  int fragmentation,
962  char **frame,
963  size_t *frame_len);
964 
987 MHD_websocket_encode_ping (struct MHD_WebSocketStream *ws,
988  const char *payload,
989  size_t payload_len,
990  char **frame,
991  size_t *frame_len);
992 
1020 MHD_websocket_encode_pong (struct MHD_WebSocketStream *ws,
1021  const char *payload,
1022  size_t payload_len,
1023  char **frame,
1024  size_t *frame_len);
1025 
1062 MHD_websocket_encode_close (struct MHD_WebSocketStream *ws,
1063  unsigned short reason_code,
1064  const char *reason_utf8,
1065  size_t reason_utf8_len,
1066  char **frame,
1067  size_t *frame_len);
1068 
1079 _MHD_EXTERN void *
1080 MHD_websocket_malloc (struct MHD_WebSocketStream *ws,
1081  size_t buf_len);
1082 
1096 _MHD_EXTERN void *
1097 MHD_websocket_realloc (struct MHD_WebSocketStream *ws,
1098  void *buf,
1099  size_t new_buf_len);
1100 
1113 _MHD_EXTERN int
1114 MHD_websocket_free (struct MHD_WebSocketStream *ws,
1115  void *buf);
1116 
1117 #if 0 /* keep Emacsens' auto-indent happy */
1118 {
1119 #endif
1120 #ifdef __cplusplus
1121 }
1122 #endif
1123 
1124 #endif
#define _MHD_EXTERN
Definition: mhd_options.h:50
_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)
void *(* MHD_WebSocketReallocCallback)(void *buf, size_t new_buf_len)
size_t(* MHD_WebSocketRandomNumberGenerator)(void *cls, void *buf, size_t buf_len)
_MHD_EXTERN enum MHD_WEBSOCKET_STATUS MHD_websocket_check_http_version(const char *http_version)
_MHD_EXTERN enum MHD_WEBSOCKET_VALIDITY MHD_websocket_stream_is_valid(struct MHD_WebSocketStream *ws)
MHD_WEBSOCKET_STATUS
Enum of the return value for almost every MHD_websocket function. Errors are negative and values equa...
@ MHD_WEBSOCKET_STATUS_MAXIMUM_SIZE_EXCEEDED
@ MHD_WEBSOCKET_STATUS_TEXT_NEXT_FRAGMENT
@ MHD_WEBSOCKET_STATUS_BINARY_FRAME
@ MHD_WEBSOCKET_STATUS_TEXT_LAST_FRAGMENT
@ MHD_WEBSOCKET_STATUS_STREAM_BROKEN
@ MHD_WEBSOCKET_STATUS_PARAMETER_ERROR
@ MHD_WEBSOCKET_STATUS_CLOSE_FRAME
@ MHD_WEBSOCKET_STATUS_OK
@ MHD_WEBSOCKET_STATUS_PING_FRAME
@ MHD_WEBSOCKET_STATUS_TEXT_FRAME
@ MHD_WEBSOCKET_STATUS_UTF8_ENCODING_ERROR
@ MHD_WEBSOCKET_STATUS_TEXT_FIRST_FRAGMENT
@ MHD_WEBSOCKET_STATUS_BINARY_FIRST_FRAGMENT
@ MHD_WEBSOCKET_STATUS_NO_WEBSOCKET_HANDSHAKE_HEADER
@ MHD_WEBSOCKET_STATUS_BINARY_NEXT_FRAGMENT
@ MHD_WEBSOCKET_STATUS_PONG_FRAME
@ MHD_WEBSOCKET_STATUS_PROTOCOL_ERROR
@ MHD_WEBSOCKET_STATUS_BINARY_LAST_FRAGMENT
@ MHD_WEBSOCKET_STATUS_MEMORY_ERROR
MHD_WEBSOCKET_FLAG
Flags for the initialization of a websocket stream struct MHD_WebSocketStream used by MHD_websocket_s...
Definition: microhttpd_ws.h:59
@ MHD_WEBSOCKET_FLAG_SERVER
Definition: microhttpd_ws.h:66
@ MHD_WEBSOCKET_FLAG_WANT_FRAGMENTS
Definition: microhttpd_ws.h:99
@ MHD_WEBSOCKET_FLAG_NO_FRAGMENTS
Definition: microhttpd_ws.h:88
@ MHD_WEBSOCKET_FLAG_CLIENT
Definition: microhttpd_ws.h:79
@ MHD_WEBSOCKET_FLAG_GENERATE_CLOSE_FRAMES_ON_ERROR
_MHD_EXTERN enum MHD_WEBSOCKET_STATUS MHD_websocket_stream_free(struct MHD_WebSocketStream *ws)
_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)
MHD_WEBSOCKET_VALIDITY
Enumeration of validity values.
@ MHD_WEBSOCKET_VALIDITY_INVALID
@ MHD_WEBSOCKET_VALIDITY_ONLY_VALID_FOR_CONTROL_FRAMES
@ MHD_WEBSOCKET_VALIDITY_VALID
MHD_WEBSOCKET_UTF8STEP
Enumeration of possible UTF-8 check steps.
@ MHD_WEBSOCKET_UTF8STEP_UTF2TAIL_1OF1
@ MHD_WEBSOCKET_UTF8STEP_NORMAL
@ MHD_WEBSOCKET_UTF8STEP_UTF4TAIL1_1OF3
@ MHD_WEBSOCKET_UTF8STEP_UTF4TAIL_3OF3
@ MHD_WEBSOCKET_UTF8STEP_UTF4TAIL_2OF3
@ MHD_WEBSOCKET_UTF8STEP_UTF3TAIL_1OF2
@ MHD_WEBSOCKET_UTF8STEP_UTF4TAIL_1OF3
@ MHD_WEBSOCKET_UTF8STEP_UTF3TAIL2_1OF2
@ MHD_WEBSOCKET_UTF8STEP_UTF3TAIL_2OF2
@ MHD_WEBSOCKET_UTF8STEP_UTF3TAIL1_1OF2
@ MHD_WEBSOCKET_UTF8STEP_UTF4TAIL2_1OF3
_MHD_EXTERN int MHD_websocket_free(struct MHD_WebSocketStream *ws, void *buf)
_MHD_EXTERN enum MHD_WEBSOCKET_STATUS MHD_websocket_stream_init(struct MHD_WebSocketStream **ws, int flags, size_t max_payload_size)
_MHD_EXTERN void * MHD_websocket_malloc(struct MHD_WebSocketStream *ws, size_t buf_len)
_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)
_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)
_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)
_MHD_EXTERN enum MHD_WEBSOCKET_STATUS MHD_websocket_check_connection_header(const char *connection_header)
_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)
_MHD_EXTERN enum MHD_WEBSOCKET_STATUS MHD_websocket_create_accept_header(const char *sec_websocket_key, char *sec_websocket_accept)
_MHD_EXTERN enum MHD_WEBSOCKET_STATUS MHD_websocket_stream_invalidate(struct MHD_WebSocketStream *ws)
_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)
MHD_WEBSOCKET_CLOSEREASON
Enumeration of possible close reasons for close frames.
@ MHD_WEBSOCKET_CLOSEREASON_MAXIMUM_ALLOWED_PAYLOAD_SIZE_EXCEEDED
@ MHD_WEBSOCKET_CLOSEREASON_GOING_AWAY
@ MHD_WEBSOCKET_CLOSEREASON_MALFORMED_UTF8
@ MHD_WEBSOCKET_CLOSEREASON_MISSING_EXTENSION
@ MHD_WEBSOCKET_CLOSEREASON_UNEXPECTED_CONDITION
@ MHD_WEBSOCKET_CLOSEREASON_UNSUPPORTED_DATATYPE
@ MHD_WEBSOCKET_CLOSEREASON_REGULAR
@ MHD_WEBSOCKET_CLOSEREASON_POLICY_VIOLATED
@ MHD_WEBSOCKET_CLOSEREASON_PROTOCOL_ERROR
@ MHD_WEBSOCKET_CLOSEREASON_NO_REASON
MHD_WEBSOCKET_FRAGMENTATION
Enum to specify the fragmenting behavior while encoding with MHD_websocket_encode_text() or MHD_webso...
@ MHD_WEBSOCKET_FRAGMENTATION_FIRST
@ MHD_WEBSOCKET_FRAGMENTATION_LAST
@ MHD_WEBSOCKET_FRAGMENTATION_FOLLOWING
@ MHD_WEBSOCKET_FRAGMENTATION_NONE
_MHD_EXTERN void * MHD_websocket_realloc(struct MHD_WebSocketStream *ws, void *buf, size_t new_buf_len)
_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)
_MHD_EXTERN enum MHD_WEBSOCKET_STATUS MHD_websocket_check_version_header(const char *version_header)
void(* MHD_WebSocketFreeCallback)(void *buf)
void *(* MHD_WebSocketMallocCallback)(size_t buf_len)
_MHD_EXTERN enum MHD_WEBSOCKET_STATUS MHD_websocket_check_upgrade_header(const char *upgrade_header)