KEEL 1.0.0
Minimal C11 HTTP client/server library built on epoll/kqueue/io_uring/poll
Loading...
Searching...
No Matches
websocket.h
Go to the documentation of this file.
1
9#ifndef KEEL_WEBSOCKET_H
10#define KEEL_WEBSOCKET_H
11
12#include <keel/allocator.h>
13#include <stddef.h>
14#include <stdint.h>
15
16/* ── Status codes (RFC 6455 Section 7.4.1) ──────────────────────── */
17
18#define KL_WS_NORMAL_CLOSE 1000
19#define KL_WS_GOING_AWAY 1001
20#define KL_WS_PROTOCOL_ERROR 1002
21#define KL_WS_TOO_BIG 1009
23/* ── Opcodes (RFC 6455 Section 5.2) ─────────────────────────────── */
24
25#define KL_WS_OP_CONTINUATION 0x0
26#define KL_WS_OP_TEXT 0x1
27#define KL_WS_OP_BINARY 0x2
28#define KL_WS_OP_CLOSE 0x8
29#define KL_WS_OP_PING 0x9
30#define KL_WS_OP_PONG 0xA
32/* ── Frame constants ────────────────────────────────────────────── */
33
34#define KL_WS_FIN_BIT 0x80
35#define KL_WS_MASK_BIT 0x80
36#define KL_WS_OPCODE_MASK 0x0F
37#define KL_WS_MASK_KEY_LEN 4
38#define KL_WS_FRAME_HEADER_MAX 14
40/* ── Internal frame parser state ────────────────────────────────── */
41
47
48typedef struct {
50 uint8_t header_buf[KL_WS_FRAME_HEADER_MAX];
51 size_t header_len;
52 size_t header_need;
53 int fin, opcode, masked;
54 uint8_t mask_key[KL_WS_MASK_KEY_LEN];
55 size_t payload_len;
56 size_t payload_read;
58
59/* ── Frame parser API (shared by server and client) ──────────────── */
60
63
65int kl_ws_frame_parse(KlWsFrameParser *fp, const uint8_t *data,
66 size_t len, size_t *consumed);
67
68/* ── RFC 6455 magic GUID ─────────────────────────────────────────── */
69
71#define KL_WS_MAGIC_GUID "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"
72
73#endif
Definition websocket.h:48
size_t header_need
Definition websocket.h:52
KlWsFrameParseState state
Definition websocket.h:49
size_t header_len
Definition websocket.h:51
size_t payload_len
Definition websocket.h:55
int fin
Definition websocket.h:53
size_t payload_read
Definition websocket.h:56
#define KL_WS_FRAME_HEADER_MAX
Definition websocket.h:38
int kl_ws_frame_parse(KlWsFrameParser *fp, const uint8_t *data, size_t len, size_t *consumed)
Parse a WebSocket frame from raw data.
KlWsFrameParseState
Definition websocket.h:42
@ KL_WS_FRAME_HEADER
Definition websocket.h:43
@ KL_WS_FRAME_PAYLOAD
Definition websocket.h:44
@ KL_WS_FRAME_COMPLETE
Definition websocket.h:45
#define KL_WS_MASK_KEY_LEN
Definition websocket.h:37
void kl_ws_frame_init(KlWsFrameParser *fp)
Initialize/reset frame parser state.