KEEL 1.0.0
Minimal C11 HTTP client/server library built on epoll/kqueue/io_uring/poll
Loading...
Searching...
No Matches
Data Structures | Macros | Enumerations | Functions
websocket.h File Reference

Shared WebSocket protocol constants and frame parser. More...

#include <keel/allocator.h>
#include <stddef.h>
#include <stdint.h>
Include dependency graph for websocket.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  KlWsFrameParser
 

Macros

#define KL_WS_NORMAL_CLOSE   1000
 
#define KL_WS_GOING_AWAY   1001
 
#define KL_WS_PROTOCOL_ERROR   1002
 
#define KL_WS_TOO_BIG   1009
 
#define KL_WS_OP_CONTINUATION   0x0
 
#define KL_WS_OP_TEXT   0x1
 
#define KL_WS_OP_BINARY   0x2
 
#define KL_WS_OP_CLOSE   0x8
 
#define KL_WS_OP_PING   0x9
 
#define KL_WS_OP_PONG   0xA
 
#define KL_WS_FIN_BIT   0x80
 
#define KL_WS_MASK_BIT   0x80
 
#define KL_WS_OPCODE_MASK   0x0F
 
#define KL_WS_MASK_KEY_LEN   4
 
#define KL_WS_FRAME_HEADER_MAX   14
 
#define KL_WS_MAGIC_GUID   "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"
 RFC 6455 magic GUID for WebSocket handshake.
 

Enumerations

enum  KlWsFrameParseState { KL_WS_FRAME_HEADER , KL_WS_FRAME_PAYLOAD , KL_WS_FRAME_COMPLETE }
 

Functions

void kl_ws_frame_init (KlWsFrameParser *fp)
 Initialize/reset frame parser state.
 
int kl_ws_frame_parse (KlWsFrameParser *fp, const uint8_t *data, size_t len, size_t *consumed)
 Parse a WebSocket frame from raw data.
 

Detailed Description

Shared WebSocket protocol constants and frame parser.

Contains frame parser, opcodes, and status codes shared by both server (websocket_server.h) and client (websocket_client.h).

Macro Definition Documentation

◆ KL_WS_NORMAL_CLOSE

#define KL_WS_NORMAL_CLOSE   1000

Normal closure (1000)

◆ KL_WS_GOING_AWAY

#define KL_WS_GOING_AWAY   1001

Going away (1001)

◆ KL_WS_PROTOCOL_ERROR

#define KL_WS_PROTOCOL_ERROR   1002

Protocol error (1002)

◆ KL_WS_TOO_BIG

#define KL_WS_TOO_BIG   1009

Message too big (1009)

◆ KL_WS_OP_CONTINUATION

#define KL_WS_OP_CONTINUATION   0x0

Continuation frame

◆ KL_WS_OP_TEXT

#define KL_WS_OP_TEXT   0x1

Text frame

◆ KL_WS_OP_BINARY

#define KL_WS_OP_BINARY   0x2

Binary frame

◆ KL_WS_OP_CLOSE

#define KL_WS_OP_CLOSE   0x8

Close frame

◆ KL_WS_OP_PING

#define KL_WS_OP_PING   0x9

Ping frame

◆ KL_WS_OP_PONG

#define KL_WS_OP_PONG   0xA

Pong frame

◆ KL_WS_FIN_BIT

#define KL_WS_FIN_BIT   0x80

FIN bit mask

◆ KL_WS_MASK_BIT

#define KL_WS_MASK_BIT   0x80

MASK bit mask

◆ KL_WS_OPCODE_MASK

#define KL_WS_OPCODE_MASK   0x0F

Opcode mask

◆ KL_WS_MASK_KEY_LEN

#define KL_WS_MASK_KEY_LEN   4

Masking key length

◆ KL_WS_FRAME_HEADER_MAX

#define KL_WS_FRAME_HEADER_MAX   14

2 + 8(ext len) + 4(mask key)

◆ KL_WS_MAGIC_GUID

#define KL_WS_MAGIC_GUID   "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"

RFC 6455 magic GUID for WebSocket handshake.

Enumeration Type Documentation

◆ KlWsFrameParseState

Enumerator
KL_WS_FRAME_HEADER 

Parsing frame header bytes

KL_WS_FRAME_PAYLOAD 

Reading payload data

KL_WS_FRAME_COMPLETE 

Frame fully parsed

Function Documentation

◆ kl_ws_frame_init()

void kl_ws_frame_init ( KlWsFrameParser fp)

Initialize/reset frame parser state.

◆ kl_ws_frame_parse()

int kl_ws_frame_parse ( KlWsFrameParser fp,
const uint8_t *  data,
size_t  len,
size_t *  consumed 
)

Parse a WebSocket frame from raw data.