Mercurial
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 |