comparison seobeo/seobeo_internal.h @ 121:7b1719fa918c

[Seobeo] Added web socket server.
author June Park <parkjune1995@gmail.com>
date Thu, 08 Jan 2026 06:45:10 -0800
parents cbbf78b17cfa
children f236c895604e
comparison
equal deleted inserted replaced
120:cbbf78b17cfa 121:7b1719fa918c
8 #define SSL_TYPE SSL 8 #define SSL_TYPE SSL
9 #else 9 #else
10 #define SSL_CTX_TYPE void 10 #define SSL_CTX_TYPE void
11 #define SSL_TYPE void 11 #define SSL_TYPE void
12 #endif 12 #endif
13
14 // For web socket usages as body length are determine this...
15 #define MAX_INT_16 65536
16 #define MAX_FRAGMENT_SIZE 1024 * 1024
13 17
14 #include "dowa/dowa.h" 18 #include "dowa/dowa.h"
15 #include <stdatomic.h> 19 #include <stdatomic.h>
16 20
17 typedef enum { 21 typedef enum {
181 Seobeo_WebSocket_Opcode fragment_opcode; 185 Seobeo_WebSocket_Opcode fragment_opcode;
182 186
183 Dowa_Arena *p_arena; 187 Dowa_Arena *p_arena;
184 } Seobeo_WebSocket; 188 } Seobeo_WebSocket;
185 189
186 // --- WebSocket Functions --- // 190 // --- WebSocket Client Functions --- //
187 extern Seobeo_WebSocket *Seobeo_WebSocket_Connect(const char *url); 191 extern Seobeo_WebSocket *Seobeo_WebSocket_Connect(const char *url);
188 extern int32 Seobeo_WebSocket_Send_Text(Seobeo_WebSocket *p_ws, const char *text); 192 extern int32 Seobeo_WebSocket_Send_Text(Seobeo_WebSocket *p_ws, const char *text);
189 extern int32 Seobeo_WebSocket_Send_Binary(Seobeo_WebSocket *p_ws, const uint8 *data, size_t length); 193 extern int32 Seobeo_WebSocket_Send_Binary(Seobeo_WebSocket *p_ws, const uint8 *data, size_t length);
190 extern int32 Seobeo_WebSocket_Send_Ping(Seobeo_WebSocket *p_ws, const char *payload); 194 extern int32 Seobeo_WebSocket_Send_Ping(Seobeo_WebSocket *p_ws, const char *payload);
191 extern int32 Seobeo_WebSocket_Send_Pong(Seobeo_WebSocket *p_ws, const char *payload); 195 extern int32 Seobeo_WebSocket_Send_Pong(Seobeo_WebSocket *p_ws, const char *payload);
192 extern Seobeo_WebSocket_Message *Seobeo_WebSocket_Receive(Seobeo_WebSocket *p_ws); 196 extern Seobeo_WebSocket_Message *Seobeo_WebSocket_Receive(Seobeo_WebSocket *p_ws);
193 extern void Seobeo_WebSocket_Message_Destroy(Seobeo_WebSocket_Message *p_msg); 197 extern void Seobeo_WebSocket_Message_Destroy(Seobeo_WebSocket_Message *p_msg);
194 extern int32 Seobeo_WebSocket_Close(Seobeo_WebSocket *p_ws, uint16 code, const char *reason); 198 extern int32 Seobeo_WebSocket_Close(Seobeo_WebSocket *p_ws, uint16 code, const char *reason);
195 extern void Seobeo_WebSocket_Destroy(Seobeo_WebSocket *p_ws); 199 extern void Seobeo_WebSocket_Destroy(Seobeo_WebSocket *p_ws);
196 200
201 // --- WebSocket Server Types --- //
202 typedef struct Seobeo_WebSocket_Server_Connection_Struct Seobeo_WebSocket_Server_Connection;
203
204 struct Seobeo_WebSocket_Server_Connection_Struct {
205 Seobeo_Handle *p_handle;
206 char *client_id;
207 boolean is_active;
208
209 uint8 *fragment_buffer;
210 size_t fragment_length;
211 size_t fragment_capacity;
212 Seobeo_WebSocket_Opcode fragment_opcode;
213
214 Seobeo_WebSocket_Server_Connection *next;
215 };
216
217 typedef void (*Seobeo_WebSocket_Server_Handler)(
218 Seobeo_WebSocket_Server_Connection *p_conn,
219 Seobeo_WebSocket_Message *p_msg,
220 void *p_user_data
221 );
222
223 typedef struct {
224 char *path;
225 Seobeo_WebSocket_Server_Handler handler;
226 void *p_user_data;
227 } Seobeo_WebSocket_Server_Route;
228
229 // --- WebSocket Server Functions --- //
230 extern void Seobeo_WebSocket_Server_Init();
231 extern void Seobeo_WebSocket_Server_Register(const char *path, Seobeo_WebSocket_Server_Handler handler, void *p_user_data);
232 extern boolean Seobeo_WebSocket_Server_Handle_Upgrade(Seobeo_Handle *p_handle, Seobeo_Request_Entry *p_req_map, const char *path);
233 extern void Seobeo_WebSocket_Server_Handle_Connection(Seobeo_WebSocket_Server_Connection *p_conn);
234 extern int32 Seobeo_WebSocket_Server_Send_Text(Seobeo_WebSocket_Server_Connection *p_conn, const char *text);
235 extern int32 Seobeo_WebSocket_Server_Send_Binary(Seobeo_WebSocket_Server_Connection *p_conn, const uint8 *data, size_t length);
236 extern void Seobeo_WebSocket_Server_Broadcast_Text(const char *text);
237 extern void Seobeo_WebSocket_Server_Broadcast_Binary(const uint8 *data, size_t length);
238 extern void Seobeo_WebSocket_Server_Connection_Close(Seobeo_WebSocket_Server_Connection *p_conn, uint16 code, const char *reason);
239 extern void Seobeo_WebSocket_Server_Connection_Destroy(Seobeo_WebSocket_Server_Connection *p_conn);
240
197 #endif 241 #endif