KEEL 1.0.0
Minimal C11 HTTP client/server library built on epoll/kqueue/io_uring/poll
Loading...
Searching...
No Matches
websocket_server.h
Go to the documentation of this file.
1
9#ifndef KEEL_WEBSOCKET_SERVER_H
10#define KEEL_WEBSOCKET_SERVER_H
11
12#include <keel/websocket.h>
13#include <keel/drain.h>
14
15/* ── Forward declarations ────────────────────────────────────────── */
16
18typedef struct KlConn KlConn;
19
20/* ── Callbacks ───────────────────────────────────────────────────── */
21
22typedef struct {
23 void (*on_open)(KlWsServerConn *ws, void *user_data);
24 void (*on_message)(KlWsServerConn *ws, const char *data, size_t len,
25 int is_binary, void *user_data);
26 void (*on_close)(KlWsServerConn *ws, uint16_t code, const char *reason,
27 size_t reason_len, void *user_data);
28 void (*on_ping)(KlWsServerConn *ws, const char *data, size_t len,
29 void *user_data);
31
32/* ── Per-route config ────────────────────────────────────────────── */
33
43
44/* ── Per-connection WebSocket state ──────────────────────────────── */
45
64
65/* ── Public API ──────────────────────────────────────────────────── */
66
69
71int kl_ws_server_send_text(KlWsServerConn *ws, const char *data, size_t len);
72
74int kl_ws_server_send_binary(KlWsServerConn *ws, const char *data, size_t len);
75
77int kl_ws_server_send_ping(KlWsServerConn *ws, const char *data, size_t len);
78
80int kl_ws_server_close(KlWsServerConn *ws, uint16_t code, const char *reason,
81 size_t reason_len);
82
84int kl_ws_server_enable_drain(KlWsServerConn *ws, size_t max_size);
85
86/* ── Internal (used by connection.c / server.c) ──────────────────── */
87
88int kl_ws_server_upgrade(KlConn *c, const char *leftover, size_t leftover_len);
94int kl_ws_server_check_close_timeout(const KlConn *c, uint64_t now);
95int kl_ws_server_auto_ping(KlConn *c, uint64_t now);
96int kl_ws_server_on_readable_data(KlConn *c, uint8_t *data, size_t len);
97
98#endif
Bring-your-own allocator vtable.
Definition allocator.h:12
Definition connection.h:34
KlWsServerConn * ws
Definition connection.h:63
Backpressure write buffer.
Definition drain.h:33
Definition websocket.h:48
Definition websocket_server.h:22
Definition websocket_server.h:34
int ping_interval_ms
Definition websocket_server.h:40
KlWsServerCallbacks callbacks
Definition websocket_server.h:35
size_t max_message_size
Definition websocket_server.h:37
void * user_data
Definition websocket_server.h:36
int close_timeout_ms
Definition websocket_server.h:39
size_t max_frame_size
Definition websocket_server.h:38
Definition websocket_server.h:46
size_t msg_cap
Definition websocket_server.h:51
KlAllocator * alloc
Definition websocket_server.h:60
int drain_enabled
Definition websocket_server.h:62
KlWsFrameParser frame
Definition websocket_server.h:48
int msg_opcode
Definition websocket_server.h:52
uint32_t utf8_state
Definition websocket_server.h:53
KlWsServerConfig * config
Definition websocket_server.h:47
int close_received
Definition websocket_server.h:55
int close_sent
Definition websocket_server.h:54
KlConn * conn
Definition websocket_server.h:59
size_t msg_len
Definition websocket_server.h:50
KlDrain drain
Definition websocket_server.h:61
char * msg_buf
Definition websocket_server.h:49
uint64_t next_ping_ms
Definition websocket_server.h:58
uint64_t close_deadline_ms
Definition websocket_server.h:57
uint16_t close_code
Definition websocket_server.h:56
Shared WebSocket protocol constants and frame parser.
int kl_ws_server_auto_ping(KlConn *c, uint64_t now)
int kl_ws_server_drain_pending(const KlConn *c)
int kl_ws_server_check_close_timeout(const KlConn *c, uint64_t now)
void kl_ws_server_cleanup(KlConn *c)
int kl_ws_server_on_writable(KlConn *c)
int kl_ws_server_send_ping(KlWsServerConn *ws, const char *data, size_t len)
Send a ping frame.
int kl_ws_server_on_readable_data(KlConn *c, uint8_t *data, size_t len)
int kl_ws_server_upgrade(KlConn *c, const char *leftover, size_t leftover_len)
int kl_ws_server_close(KlWsServerConn *ws, uint16_t code, const char *reason, size_t reason_len)
Initiate close handshake.
void kl_ws_server_drain_close(KlConn *c)
int kl_ws_server_enable_drain(KlWsServerConn *ws, size_t max_size)
Enable drain-based backpressure for WebSocket writes.
int kl_ws_server_send_binary(KlWsServerConn *ws, const char *data, size_t len)
Send a binary frame.
int kl_ws_server_on_readable(KlConn *c)
int kl_ws_server_send_text(KlWsServerConn *ws, const char *data, size_t len)
Send a text frame.
void kl_ws_server_config_init(KlWsServerConfig *config)
Initialize a KlWsServerConfig with safe defaults.