master
h 61 lines 2.73 KB
Raw
1 // SPDX-License-Identifier: GPL-3.0-or-later
2
3 #ifndef NETDATA_WEBSOCKET_COMPRESSION_H
4 #define NETDATA_WEBSOCKET_COMPRESSION_H
5
6 #include "websocket-internal.h"
7
8 // WebSocket compression constants
9 #define WS_COMPRESS_WINDOW_BITS 15 // Default window bits (RFC 7692)
10 #define WS_COMPRESS_MEMLEVEL 8 // Default memory level for zlib
11 #define WS_COMPRESS_DEFAULT_LEVEL Z_DEFAULT_COMPRESSION // Default compression level
12 #define WS_COMPRESS_MIN_SIZE 64 // Don't compress payloads smaller than this
13
14 // WebSocket compression extension types
15 typedef enum {
16 WS_COMPRESS_NONE = 0, // No compression
17 WS_COMPRESS_DEFLATE = 1 // permessage-deflate extension
18 } WEBSOCKET_COMPRESSION_TYPE;
19
20 // WebSocket compression context structure
21 typedef struct websocket_compression_context {
22 WEBSOCKET_COMPRESSION_TYPE type; // Compression type
23 bool enabled; // Whether compression is enabled
24 bool client_context_takeover; // Client context takeover
25 bool server_context_takeover; // Server context takeover
26 int client_max_window_bits; // Max window bits for client-to-server messages (8-15)
27 int server_max_window_bits; // Max window bits for server-to-client messages (8-15)
28 int compression_level; // Compression level
29 z_stream *deflate_stream; // Deflate context for outgoing messages (server-to-client)
30 z_stream *inflate_stream; // Inflate context for incoming messages (client-to-server)
31 } WEBSOCKET_COMPRESSION_CTX;
32
33 #define WEBSOCKET_COMPRESSION_DEFAULTS (WEBSOCKET_COMPRESSION_CTX){ \
34 .type = WS_COMPRESS_NONE, \
35 .enabled = false, \
36 .client_context_takeover = true, \
37 .server_context_takeover = true, \
38 .client_max_window_bits = WS_COMPRESS_WINDOW_BITS, \
39 .server_max_window_bits = WS_COMPRESS_WINDOW_BITS, \
40 .compression_level = WS_COMPRESS_DEFAULT_LEVEL, \
41 .deflate_stream = NULL, \
42 .inflate_stream = NULL, \
43 }
44
45 // Forward declaration
46 struct websocket_server_client;
47
48 // Function declarations
49 bool websocket_compression_init(struct websocket_server_client *wsc);
50 void websocket_compression_cleanup(struct websocket_server_client *wsc);
51 bool websocket_compression_reset(struct websocket_server_client *wsc);
52
53 // Decompression-specific functions
54 bool websocket_decompression_init(struct websocket_server_client *wsc);
55 void websocket_decompression_cleanup(struct websocket_server_client *wsc);
56 bool websocket_decompression_reset(struct websocket_server_client *wsc);
57
58 // Compression function for outbound messages
59 bool websocket_client_compress_message(struct websocket_server_client *wsc, const char *data, size_t length);
60
61 #endif // NETDATA_WEBSOCKET_COMPRESSION_H