annotate seobeo/docs/web_socket_client.md @ 279:b3b547563ec7

Add Google connector service and agent wiki Implement the C/Seobeo Google Drive and Gmail connector with encrypted OAuth storage, Zenbu authentication, browser testing, AI tool discovery, chunked HTTP decoding, and Bazel coverage. Consolidate repository guidance into progressive wiki documentation and enforce arena-first allocation for new first-party C code. Co-authored-by: Copilot <[email protected]> Copilot-Session: 84c338fd-0939-4bb3-b7f3-1062eb213e5d
author MrJuneJune <me@mrjunejune.com>
date Mon, 17 Aug 2026 22:22:36 -0700
parents cbbf78b17cfa
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
120
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
1 # Seobeo WebSocket Client - Usage Guide
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
2
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
3 A clean, easy-to-use WebSocket client library following RFC 6455.
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
4
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
5 ## Features
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
6
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
7 1. **WebSocket Protocol Support**: Full RFC 6455 WebSocket implementation
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
8 2. **Text and Binary Messages**: Send/receive both text and binary data
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
9 3. **Automatic Ping/Pong**: Automatic pong responses to ping frames
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
10 4. **Message Fragmentation**: Handles fragmented messages automatically
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
11 5. **Secure WebSocket**: Supports both `ws://` and `wss://` (WebSocket over TLS)
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
12 6. **Clean API**: Simple, intuitive API following seobeo coding standards
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
13
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
14 ## API Overview
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
15
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
16 ### Core Functions
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
17
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
18 ```c
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
19 // Connect to WebSocket server
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
20 Seobeo_WebSocket *Seobeo_WebSocket_Connect(const char *url);
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
21
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
22 // Send messages
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
23 int32 Seobeo_WebSocket_Send_Text(Seobeo_WebSocket *p_ws, const char *text);
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
24 int32 Seobeo_WebSocket_Send_Binary(Seobeo_WebSocket *p_ws, const uint8 *data, size_t length);
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
25
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
26 // Send control frames
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
27 int32 Seobeo_WebSocket_Send_Ping(Seobeo_WebSocket *p_ws, const char *payload);
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
28 int32 Seobeo_WebSocket_Send_Pong(Seobeo_WebSocket *p_ws, const char *payload);
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
29
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
30 // Receive messages
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
31 Seobeo_WebSocket_Message *Seobeo_WebSocket_Receive(Seobeo_WebSocket *p_ws);
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
32
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
33 // Close connection
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
34 int32 Seobeo_WebSocket_Close(Seobeo_WebSocket *p_ws, uint16 code, const char *reason);
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
35
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
36 // Clean up
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
37 void Seobeo_WebSocket_Message_Destroy(Seobeo_WebSocket_Message *p_msg);
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
38 void Seobeo_WebSocket_Destroy(Seobeo_WebSocket *p_ws);
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
39 ```
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
40
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
41 ### Message Opcodes
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
42
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
43 ```c
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
44 typedef enum {
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
45 SEOBEO_WS_OPCODE_CONTINUATION = 0x0, // Continuation frame
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
46 SEOBEO_WS_OPCODE_TEXT = 0x1, // Text message
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
47 SEOBEO_WS_OPCODE_BINARY = 0x2, // Binary message
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
48 SEOBEO_WS_OPCODE_CLOSE = 0x8, // Close connection
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
49 SEOBEO_WS_OPCODE_PING = 0x9, // Ping frame
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
50 SEOBEO_WS_OPCODE_PONG = 0xA // Pong frame
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
51 } Seobeo_WebSocket_Opcode;
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
52 ```
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
53
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
54 ### Connection States
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
55
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
56 ```c
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
57 typedef enum {
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
58 SEOBEO_WS_STATE_CONNECTING = 0, // Handshake in progress
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
59 SEOBEO_WS_STATE_OPEN, // Connection established
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
60 SEOBEO_WS_STATE_CLOSING, // Close handshake initiated
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
61 SEOBEO_WS_STATE_CLOSED // Connection closed
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
62 } Seobeo_WebSocket_State;
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
63 ```
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
64
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
65 ## Examples
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
66
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
67 ### 1. Simple Text Echo
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
68
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
69 ```c
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
70 // Connect to WebSocket server
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
71 Seobeo_WebSocket *p_ws = Seobeo_WebSocket_Connect("wss://echo.websocket.org");
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
72 if (!p_ws)
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
73 {
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
74 printf("Failed to connect\n");
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
75 return;
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
76 }
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
77
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
78 // Send text message
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
79 const char *message = "Hello, WebSocket!";
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
80 Seobeo_WebSocket_Send_Text(p_ws, message);
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
81
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
82 // Receive echo response
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
83 Seobeo_WebSocket_Message *p_msg = Seobeo_WebSocket_Receive(p_ws);
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
84 if (p_msg && p_msg->opcode == SEOBEO_WS_OPCODE_TEXT)
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
85 {
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
86 printf("Received: %.*s\n", (int)p_msg->length, (char*)p_msg->data);
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
87 Seobeo_WebSocket_Message_Destroy(p_msg);
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
88 }
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
89
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
90 // Close connection
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
91 Seobeo_WebSocket_Close(p_ws, 1000, "Normal closure");
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
92 Seobeo_WebSocket_Destroy(p_ws);
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
93 ```
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
94
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
95 ### 2. Binary Data Transfer
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
96
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
97 ```c
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
98 Seobeo_WebSocket *p_ws = Seobeo_WebSocket_Connect("wss://example.com/data");
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
99
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
100 // Send binary data
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
101 uint8 data[] = {0x01, 0x02, 0x03, 0xAA, 0xBB, 0xCC};
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
102 Seobeo_WebSocket_Send_Binary(p_ws, data, sizeof(data));
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
103
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
104 // Receive binary response
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
105 Seobeo_WebSocket_Message *p_msg = Seobeo_WebSocket_Receive(p_ws);
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
106 if (p_msg && p_msg->opcode == SEOBEO_WS_OPCODE_BINARY)
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
107 {
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
108 printf("Received %zu bytes\n", p_msg->length);
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
109 // Process binary data...
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
110 Seobeo_WebSocket_Message_Destroy(p_msg);
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
111 }
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
112
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
113 Seobeo_WebSocket_Destroy(p_ws);
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
114 ```
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
115
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
116 ### 3. Chat Application
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
117
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
118 ```c
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
119 Seobeo_WebSocket *p_ws = Seobeo_WebSocket_Connect("wss://chat.example.com");
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
120
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
121 // Send chat message
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
122 Seobeo_WebSocket_Send_Text(p_ws, "Hello everyone!");
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
123
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
124 // Continuous receive loop
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
125 while (1)
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
126 {
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
127 Seobeo_WebSocket_Message *p_msg = Seobeo_WebSocket_Receive(p_ws);
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
128 if (p_msg)
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
129 {
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
130 if (p_msg->opcode == SEOBEO_WS_OPCODE_TEXT)
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
131 {
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
132 printf("Chat: %.*s\n", (int)p_msg->length, (char*)p_msg->data);
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
133 }
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
134 Seobeo_WebSocket_Message_Destroy(p_msg);
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
135 }
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
136
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
137 usleep(10000); // 10ms sleep to avoid busy waiting
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
138 }
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
139
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
140 Seobeo_WebSocket_Destroy(p_ws);
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
141 ```
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
142
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
143 ### 4. Ping/Pong Keep-Alive
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
144
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
145 ```c
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
146 Seobeo_WebSocket *p_ws = Seobeo_WebSocket_Connect("wss://api.example.com");
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
147
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
148 // Send ping to keep connection alive
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
149 Seobeo_WebSocket_Send_Ping(p_ws, "keep-alive");
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
150
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
151 // Server will automatically receive pong responses
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
152 // (pong responses are handled internally)
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
153
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
154 Seobeo_WebSocket_Destroy(p_ws);
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
155 ```
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
156
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
157 ### 5. Handling Different Message Types
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
158
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
159 ```c
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
160 Seobeo_WebSocket *p_ws = Seobeo_WebSocket_Connect("wss://example.com");
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
161
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
162 while (1)
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
163 {
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
164 Seobeo_WebSocket_Message *p_msg = Seobeo_WebSocket_Receive(p_ws);
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
165 if (p_msg)
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
166 {
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
167 switch (p_msg->opcode)
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
168 {
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
169 case SEOBEO_WS_OPCODE_TEXT:
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
170 printf("Text: %.*s\n", (int)p_msg->length, (char*)p_msg->data);
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
171 break;
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
172
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
173 case SEOBEO_WS_OPCODE_BINARY:
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
174 printf("Binary: %zu bytes\n", p_msg->length);
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
175 break;
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
176
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
177 default:
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
178 printf("Unknown opcode: 0x%X\n", p_msg->opcode);
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
179 break;
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
180 }
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
181
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
182 Seobeo_WebSocket_Message_Destroy(p_msg);
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
183 }
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
184
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
185 usleep(10000);
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
186 }
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
187
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
188 Seobeo_WebSocket_Destroy(p_ws);
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
189 ```
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
190
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
191 ### 6. Graceful Shutdown
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
192
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
193 ```c
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
194 Seobeo_WebSocket *p_ws = Seobeo_WebSocket_Connect("wss://example.com");
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
195
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
196 // Do work...
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
197
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
198 // Close with custom status code and reason
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
199 Seobeo_WebSocket_Close(p_ws, 1000, "Client shutting down");
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
200 Seobeo_WebSocket_Destroy(p_ws);
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
201 ```
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
202
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
203 ## WebSocket Close Codes
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
204
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
205 Common close status codes (RFC 6455):
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
206
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
207 - **1000**: Normal closure
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
208 - **1001**: Going away (e.g., server shutdown, browser navigation)
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
209 - **1002**: Protocol error
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
210 - **1003**: Unsupported data type
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
211 - **1006**: Abnormal closure (no close frame received)
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
212 - **1007**: Invalid frame payload data
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
213 - **1008**: Policy violation
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
214 - **1009**: Message too big
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
215 - **1010**: Mandatory extension missing
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
216 - **1011**: Internal server error
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
217
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
218 ## Building
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
219
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
220 ### Build the library:
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
221 ```bash
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
222 bazel build //seobeo:seobeo_client
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
223 ```
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
224
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
225 ### Build and run the WebSocket test:
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
226 ```bash
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
227 bazel test //seobeo:seobeo_websocket_test
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
228 ```
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
229
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
230 ## Message Structure
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
231
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
232 ```c
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
233 typedef struct {
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
234 Seobeo_WebSocket_Opcode opcode; // Message type
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
235 uint8 *data; // Message payload
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
236 size_t length; // Payload length
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
237 boolean is_final; // Final fragment flag
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
238 } Seobeo_WebSocket_Message;
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
239 ```
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
240
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
241 ## Protocol Details
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
242
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
243 The implementation follows RFC 6455:
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
244
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
245 1. **Handshake**: HTTP Upgrade request with `Sec-WebSocket-Key`
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
246 2. **Frame Format**: Proper FIN, opcode, mask, and payload length handling
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
247 3. **Masking**: All client-to-server frames are masked (required by RFC)
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
248 4. **Fragmentation**: Handles fragmented messages across multiple frames
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
249 5. **Control Frames**: Proper handling of ping, pong, and close frames
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
250 6. **TLS Support**: Supports secure WebSocket (wss://) via OpenSSL
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
251
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
252 ## Coding Standards
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
253
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
254 The implementation follows your specified coding standards:
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
255 - Naming: `Seobeo_WebSocket_Connect`, `Seobeo_WebSocket_Send_Text`
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
256 - Two spaces for indentation
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
257 - New line before `{` unless it's a struct
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
258 - Single statement: no need for `{}`
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
259
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
260 ## Features
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
261
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
262 ✅ WebSocket handshake (HTTP Upgrade)
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
263 ✅ Text and binary message support
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
264 ✅ Automatic masking for client frames
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
265 ✅ Message fragmentation handling
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
266 ✅ Ping/Pong frames
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
267 ✅ Close handshake
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
268 ✅ TLS/SSL support (wss://)
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
269 ✅ Non-blocking receive
cbbf78b17cfa [Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
270 ✅ Proper memory management with arenas