Mercurial
annotate seobeo/s_web.c @ 253:fdf3816959cb
[ui] Add Sonner-like notification stack
Co-authored-by: Copilot <[email protected]>
| author | MrJuneJune <me@mrjunejune.com> |
|---|---|
| date | Tue, 04 Aug 2026 12:21:19 -0700 |
| parents | 117c4d53c9a4 |
| children | 609d3c6aff4e |
| rev | line source |
|---|---|
|
7
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
1 #include "seobeo/seobeo.h" |
|
184
8c74204fd362
[MD to HTML] Updated so it can be used through readme to html
MrJuneJune <me@mrjunejune.com>
parents:
183
diff
changeset
|
2 #include <strings.h> |
|
8c74204fd362
[MD to HTML] Updated so it can be used through readme to html
MrJuneJune <me@mrjunejune.com>
parents:
183
diff
changeset
|
3 #include <time.h> |
|
7
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
4 |
|
71
75de5903355c
Giagantic changes that update Dowa library to be more align with stb style array and hashmap. Updated Seobeo to be caching on server side instead of file level caching. Deleted bunch of things I don't really use.
June Park <parkjune1995@gmail.com>
parents:
67
diff
changeset
|
5 static char g_folder_path[512] = "."; |
|
75de5903355c
Giagantic changes that update Dowa library to be more align with stb style array and hashmap. Updated Seobeo to be caching on server side instead of file level caching. Deleted bunch of things I don't really use.
June Park <parkjune1995@gmail.com>
parents:
67
diff
changeset
|
6 |
|
251
117c4d53c9a4
[ui] Add HTML-first Web Component system
MrJuneJune <me@mrjunejune.com>
parents:
244
diff
changeset
|
7 static boolean Seobeo_Static_Path_Is_Safe(const char *path) |
|
117c4d53c9a4
[ui] Add HTML-first Web Component system
MrJuneJune <me@mrjunejune.com>
parents:
244
diff
changeset
|
8 { |
|
117c4d53c9a4
[ui] Add HTML-first Web Component system
MrJuneJune <me@mrjunejune.com>
parents:
244
diff
changeset
|
9 if (!path || strchr(path, '\\')) |
|
117c4d53c9a4
[ui] Add HTML-first Web Component system
MrJuneJune <me@mrjunejune.com>
parents:
244
diff
changeset
|
10 return FALSE; |
|
117c4d53c9a4
[ui] Add HTML-first Web Component system
MrJuneJune <me@mrjunejune.com>
parents:
244
diff
changeset
|
11 const char *segment = path; |
|
117c4d53c9a4
[ui] Add HTML-first Web Component system
MrJuneJune <me@mrjunejune.com>
parents:
244
diff
changeset
|
12 while (*segment) |
|
117c4d53c9a4
[ui] Add HTML-first Web Component system
MrJuneJune <me@mrjunejune.com>
parents:
244
diff
changeset
|
13 { |
|
117c4d53c9a4
[ui] Add HTML-first Web Component system
MrJuneJune <me@mrjunejune.com>
parents:
244
diff
changeset
|
14 while (*segment == '/') |
|
117c4d53c9a4
[ui] Add HTML-first Web Component system
MrJuneJune <me@mrjunejune.com>
parents:
244
diff
changeset
|
15 segment++; |
|
117c4d53c9a4
[ui] Add HTML-first Web Component system
MrJuneJune <me@mrjunejune.com>
parents:
244
diff
changeset
|
16 const char *end = segment; |
|
117c4d53c9a4
[ui] Add HTML-first Web Component system
MrJuneJune <me@mrjunejune.com>
parents:
244
diff
changeset
|
17 while (*end && *end != '/') |
|
117c4d53c9a4
[ui] Add HTML-first Web Component system
MrJuneJune <me@mrjunejune.com>
parents:
244
diff
changeset
|
18 end++; |
|
117c4d53c9a4
[ui] Add HTML-first Web Component system
MrJuneJune <me@mrjunejune.com>
parents:
244
diff
changeset
|
19 if ((size_t)(end - segment) == 2 && |
|
117c4d53c9a4
[ui] Add HTML-first Web Component system
MrJuneJune <me@mrjunejune.com>
parents:
244
diff
changeset
|
20 segment[0] == '.' && |
|
117c4d53c9a4
[ui] Add HTML-first Web Component system
MrJuneJune <me@mrjunejune.com>
parents:
244
diff
changeset
|
21 segment[1] == '.') |
|
117c4d53c9a4
[ui] Add HTML-first Web Component system
MrJuneJune <me@mrjunejune.com>
parents:
244
diff
changeset
|
22 return FALSE; |
|
117c4d53c9a4
[ui] Add HTML-first Web Component system
MrJuneJune <me@mrjunejune.com>
parents:
244
diff
changeset
|
23 segment = end; |
|
117c4d53c9a4
[ui] Add HTML-first Web Component system
MrJuneJune <me@mrjunejune.com>
parents:
244
diff
changeset
|
24 } |
|
117c4d53c9a4
[ui] Add HTML-first Web Component system
MrJuneJune <me@mrjunejune.com>
parents:
244
diff
changeset
|
25 return TRUE; |
|
117c4d53c9a4
[ui] Add HTML-first Web Component system
MrJuneJune <me@mrjunejune.com>
parents:
244
diff
changeset
|
26 } |
|
117c4d53c9a4
[ui] Add HTML-first Web Component system
MrJuneJune <me@mrjunejune.com>
parents:
244
diff
changeset
|
27 |
|
244
b8aa08503378
[tools] Add sandboxed online LaTeX editor
MrJuneJune <me@mrjunejune.com>
parents:
242
diff
changeset
|
28 static char *canonical_request_header(char *header) |
|
b8aa08503378
[tools] Add sandboxed online LaTeX editor
MrJuneJune <me@mrjunejune.com>
parents:
242
diff
changeset
|
29 { |
|
b8aa08503378
[tools] Add sandboxed online LaTeX editor
MrJuneJune <me@mrjunejune.com>
parents:
242
diff
changeset
|
30 if (strcasecmp(header, "content-length") == 0) return "Content-Length"; |
|
b8aa08503378
[tools] Add sandboxed online LaTeX editor
MrJuneJune <me@mrjunejune.com>
parents:
242
diff
changeset
|
31 if (strcasecmp(header, "content-type") == 0) return "Content-Type"; |
|
b8aa08503378
[tools] Add sandboxed online LaTeX editor
MrJuneJune <me@mrjunejune.com>
parents:
242
diff
changeset
|
32 if (strcasecmp(header, "connection") == 0) return "Connection"; |
|
b8aa08503378
[tools] Add sandboxed online LaTeX editor
MrJuneJune <me@mrjunejune.com>
parents:
242
diff
changeset
|
33 if (strcasecmp(header, "authorization") == 0) return "Authorization"; |
|
b8aa08503378
[tools] Add sandboxed online LaTeX editor
MrJuneJune <me@mrjunejune.com>
parents:
242
diff
changeset
|
34 if (strcasecmp(header, "host") == 0) return "Host"; |
|
b8aa08503378
[tools] Add sandboxed online LaTeX editor
MrJuneJune <me@mrjunejune.com>
parents:
242
diff
changeset
|
35 if (strcasecmp(header, "upgrade") == 0) return "Upgrade"; |
|
b8aa08503378
[tools] Add sandboxed online LaTeX editor
MrJuneJune <me@mrjunejune.com>
parents:
242
diff
changeset
|
36 if (strcasecmp(header, "x-real-ip") == 0) return "X-Real-IP"; |
|
b8aa08503378
[tools] Add sandboxed online LaTeX editor
MrJuneJune <me@mrjunejune.com>
parents:
242
diff
changeset
|
37 if (strcasecmp(header, "sec-websocket-key") == 0) return "Sec-WebSocket-Key"; |
|
b8aa08503378
[tools] Add sandboxed online LaTeX editor
MrJuneJune <me@mrjunejune.com>
parents:
242
diff
changeset
|
38 if (strcasecmp(header, "sec-websocket-version") == 0) return "Sec-WebSocket-Version"; |
|
b8aa08503378
[tools] Add sandboxed online LaTeX editor
MrJuneJune <me@mrjunejune.com>
parents:
242
diff
changeset
|
39 return header; |
|
b8aa08503378
[tools] Add sandboxed online LaTeX editor
MrJuneJune <me@mrjunejune.com>
parents:
242
diff
changeset
|
40 } |
|
b8aa08503378
[tools] Add sandboxed online LaTeX editor
MrJuneJune <me@mrjunejune.com>
parents:
242
diff
changeset
|
41 |
|
77
c348ac875294
[Seobeo] Server side rendering.
June Park <parkjune1995@gmail.com>
parents:
76
diff
changeset
|
42 char* Seobeo_Web_LoadFile(const char *file_path, size_t *p_file_size) |
|
71
75de5903355c
Giagantic changes that update Dowa library to be more align with stb style array and hashmap. Updated Seobeo to be caching on server side instead of file level caching. Deleted bunch of things I don't really use.
June Park <parkjune1995@gmail.com>
parents:
67
diff
changeset
|
43 { |
|
75de5903355c
Giagantic changes that update Dowa library to be more align with stb style array and hashmap. Updated Seobeo to be caching on server side instead of file level caching. Deleted bunch of things I don't really use.
June Park <parkjune1995@gmail.com>
parents:
67
diff
changeset
|
44 char full_path[1024]; |
|
75de5903355c
Giagantic changes that update Dowa library to be more align with stb style array and hashmap. Updated Seobeo to be caching on server side instead of file level caching. Deleted bunch of things I don't really use.
June Park <parkjune1995@gmail.com>
parents:
67
diff
changeset
|
45 snprintf(full_path, sizeof(full_path), "%s/%s", g_folder_path, file_path); |
|
75de5903355c
Giagantic changes that update Dowa library to be more align with stb style array and hashmap. Updated Seobeo to be caching on server side instead of file level caching. Deleted bunch of things I don't really use.
June Park <parkjune1995@gmail.com>
parents:
67
diff
changeset
|
46 |
|
75de5903355c
Giagantic changes that update Dowa library to be more align with stb style array and hashmap. Updated Seobeo to be caching on server side instead of file level caching. Deleted bunch of things I don't really use.
June Park <parkjune1995@gmail.com>
parents:
67
diff
changeset
|
47 FILE *p_file = fopen(full_path, "rb"); |
|
75de5903355c
Giagantic changes that update Dowa library to be more align with stb style array and hashmap. Updated Seobeo to be caching on server side instead of file level caching. Deleted bunch of things I don't really use.
June Park <parkjune1995@gmail.com>
parents:
67
diff
changeset
|
48 if (!p_file) |
|
75de5903355c
Giagantic changes that update Dowa library to be more align with stb style array and hashmap. Updated Seobeo to be caching on server side instead of file level caching. Deleted bunch of things I don't really use.
June Park <parkjune1995@gmail.com>
parents:
67
diff
changeset
|
49 return NULL; |
|
75de5903355c
Giagantic changes that update Dowa library to be more align with stb style array and hashmap. Updated Seobeo to be caching on server side instead of file level caching. Deleted bunch of things I don't really use.
June Park <parkjune1995@gmail.com>
parents:
67
diff
changeset
|
50 |
|
75de5903355c
Giagantic changes that update Dowa library to be more align with stb style array and hashmap. Updated Seobeo to be caching on server side instead of file level caching. Deleted bunch of things I don't really use.
June Park <parkjune1995@gmail.com>
parents:
67
diff
changeset
|
51 fseek(p_file, 0, SEEK_END); |
|
75de5903355c
Giagantic changes that update Dowa library to be more align with stb style array and hashmap. Updated Seobeo to be caching on server side instead of file level caching. Deleted bunch of things I don't really use.
June Park <parkjune1995@gmail.com>
parents:
67
diff
changeset
|
52 size_t file_size = ftell(p_file); |
|
75de5903355c
Giagantic changes that update Dowa library to be more align with stb style array and hashmap. Updated Seobeo to be caching on server side instead of file level caching. Deleted bunch of things I don't really use.
June Park <parkjune1995@gmail.com>
parents:
67
diff
changeset
|
53 fseek(p_file, 0, SEEK_SET); |
|
75de5903355c
Giagantic changes that update Dowa library to be more align with stb style array and hashmap. Updated Seobeo to be caching on server side instead of file level caching. Deleted bunch of things I don't really use.
June Park <parkjune1995@gmail.com>
parents:
67
diff
changeset
|
54 |
|
75de5903355c
Giagantic changes that update Dowa library to be more align with stb style array and hashmap. Updated Seobeo to be caching on server side instead of file level caching. Deleted bunch of things I don't really use.
June Park <parkjune1995@gmail.com>
parents:
67
diff
changeset
|
55 char *p_content = (char*)malloc(file_size + 1); |
|
75de5903355c
Giagantic changes that update Dowa library to be more align with stb style array and hashmap. Updated Seobeo to be caching on server side instead of file level caching. Deleted bunch of things I don't really use.
June Park <parkjune1995@gmail.com>
parents:
67
diff
changeset
|
56 if (!p_content) |
|
75de5903355c
Giagantic changes that update Dowa library to be more align with stb style array and hashmap. Updated Seobeo to be caching on server side instead of file level caching. Deleted bunch of things I don't really use.
June Park <parkjune1995@gmail.com>
parents:
67
diff
changeset
|
57 { |
|
75de5903355c
Giagantic changes that update Dowa library to be more align with stb style array and hashmap. Updated Seobeo to be caching on server side instead of file level caching. Deleted bunch of things I don't really use.
June Park <parkjune1995@gmail.com>
parents:
67
diff
changeset
|
58 fclose(p_file); |
|
75de5903355c
Giagantic changes that update Dowa library to be more align with stb style array and hashmap. Updated Seobeo to be caching on server side instead of file level caching. Deleted bunch of things I don't really use.
June Park <parkjune1995@gmail.com>
parents:
67
diff
changeset
|
59 return NULL; |
|
75de5903355c
Giagantic changes that update Dowa library to be more align with stb style array and hashmap. Updated Seobeo to be caching on server side instead of file level caching. Deleted bunch of things I don't really use.
June Park <parkjune1995@gmail.com>
parents:
67
diff
changeset
|
60 } |
|
75de5903355c
Giagantic changes that update Dowa library to be more align with stb style array and hashmap. Updated Seobeo to be caching on server side instead of file level caching. Deleted bunch of things I don't really use.
June Park <parkjune1995@gmail.com>
parents:
67
diff
changeset
|
61 |
|
75de5903355c
Giagantic changes that update Dowa library to be more align with stb style array and hashmap. Updated Seobeo to be caching on server side instead of file level caching. Deleted bunch of things I don't really use.
June Park <parkjune1995@gmail.com>
parents:
67
diff
changeset
|
62 fread(p_content, 1, file_size, p_file); |
|
75de5903355c
Giagantic changes that update Dowa library to be more align with stb style array and hashmap. Updated Seobeo to be caching on server side instead of file level caching. Deleted bunch of things I don't really use.
June Park <parkjune1995@gmail.com>
parents:
67
diff
changeset
|
63 p_content[file_size] = '\0'; |
|
75de5903355c
Giagantic changes that update Dowa library to be more align with stb style array and hashmap. Updated Seobeo to be caching on server side instead of file level caching. Deleted bunch of things I don't really use.
June Park <parkjune1995@gmail.com>
parents:
67
diff
changeset
|
64 fclose(p_file); |
|
75de5903355c
Giagantic changes that update Dowa library to be more align with stb style array and hashmap. Updated Seobeo to be caching on server side instead of file level caching. Deleted bunch of things I don't really use.
June Park <parkjune1995@gmail.com>
parents:
67
diff
changeset
|
65 |
|
75de5903355c
Giagantic changes that update Dowa library to be more align with stb style array and hashmap. Updated Seobeo to be caching on server side instead of file level caching. Deleted bunch of things I don't really use.
June Park <parkjune1995@gmail.com>
parents:
67
diff
changeset
|
66 if (p_file_size) |
|
75de5903355c
Giagantic changes that update Dowa library to be more align with stb style array and hashmap. Updated Seobeo to be caching on server side instead of file level caching. Deleted bunch of things I don't really use.
June Park <parkjune1995@gmail.com>
parents:
67
diff
changeset
|
67 *p_file_size = file_size; |
|
75de5903355c
Giagantic changes that update Dowa library to be more align with stb style array and hashmap. Updated Seobeo to be caching on server side instead of file level caching. Deleted bunch of things I don't really use.
June Park <parkjune1995@gmail.com>
parents:
67
diff
changeset
|
68 |
|
75de5903355c
Giagantic changes that update Dowa library to be more align with stb style array and hashmap. Updated Seobeo to be caching on server side instead of file level caching. Deleted bunch of things I don't really use.
June Park <parkjune1995@gmail.com>
parents:
67
diff
changeset
|
69 return p_content; |
|
75de5903355c
Giagantic changes that update Dowa library to be more align with stb style array and hashmap. Updated Seobeo to be caching on server side instead of file level caching. Deleted bunch of things I don't really use.
June Park <parkjune1995@gmail.com>
parents:
67
diff
changeset
|
70 } |
|
75de5903355c
Giagantic changes that update Dowa library to be more align with stb style array and hashmap. Updated Seobeo to be caching on server side instead of file level caching. Deleted bunch of things I don't really use.
June Park <parkjune1995@gmail.com>
parents:
67
diff
changeset
|
71 |
|
76
35b1abc37969
Updating my website to use seobeo library.
June Park <parkjune1995@gmail.com>
parents:
72
diff
changeset
|
72 void Seobeo_Web_Header_Generate( |
|
35b1abc37969
Updating my website to use seobeo library.
June Park <parkjune1995@gmail.com>
parents:
72
diff
changeset
|
73 void *buffer, int status, |
|
35b1abc37969
Updating my website to use seobeo library.
June Park <parkjune1995@gmail.com>
parents:
72
diff
changeset
|
74 const char *content_type, const int content_length) |
|
7
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
75 { |
|
183
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
76 Seobeo_Web_Header_Generate_KeepAlive(buffer, status, content_type, content_length, FALSE); |
|
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
77 } |
|
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
78 |
|
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
79 void Seobeo_Web_Header_Generate_KeepAlive( |
|
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
80 void *buffer, int status, |
|
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
81 const char *content_type, const int content_length, |
|
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
82 boolean keep_alive) |
|
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
83 { |
|
7
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
84 const char *status_text; |
|
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
85 switch(status) |
|
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
86 { |
|
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
87 case HTTP_OK: status_text = "OK"; break; |
|
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
88 case HTTP_CREATED: status_text = "Created"; break; |
|
223
0e7b9464248d
[hg-web] Add browser route regression coverage
MrJuneJune <me@mrjunejune.com>
parents:
221
diff
changeset
|
89 case HTTP_NO_CONTENT: status_text = "No Content"; break; |
|
7
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
90 case HTTP_MOVED_PERMANENTLY: status_text = "Moved Permanently"; break; |
|
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
91 case HTTP_FOUND: status_text = "Found"; break; |
|
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
92 case HTTP_BAD_REQUEST: status_text = "Bad Request"; break; |
|
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
93 case HTTP_UNAUTHORIZED: status_text = "Unauthorized"; break; |
|
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
94 case HTTP_FORBIDDEN: status_text = "Forbidden"; break; |
|
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
95 case HTTP_NOT_FOUND: status_text = "Not Found"; break; |
|
244
b8aa08503378
[tools] Add sandboxed online LaTeX editor
MrJuneJune <me@mrjunejune.com>
parents:
242
diff
changeset
|
96 case HTTP_PAYLOAD_TOO_LARGE: status_text = "Content Too Large"; break; |
|
b8aa08503378
[tools] Add sandboxed online LaTeX editor
MrJuneJune <me@mrjunejune.com>
parents:
242
diff
changeset
|
97 case HTTP_UNPROCESSABLE_CONTENT: status_text = "Unprocessable Content"; break; |
|
b8aa08503378
[tools] Add sandboxed online LaTeX editor
MrJuneJune <me@mrjunejune.com>
parents:
242
diff
changeset
|
98 case HTTP_TOO_MANY_REQUESTS: status_text = "Too Many Requests"; break; |
|
7
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
99 case HTTP_INTERNAL_ERROR: status_text = "Internal Server Error"; break; |
|
244
b8aa08503378
[tools] Add sandboxed online LaTeX editor
MrJuneJune <me@mrjunejune.com>
parents:
242
diff
changeset
|
100 case HTTP_SERVICE_UNAVAILABLE: status_text = "Service Unavailable"; break; |
|
221
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
187
diff
changeset
|
101 case 502: status_text = "Bad Gateway"; break; |
|
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
187
diff
changeset
|
102 case 504: status_text = "Gateway Timeout"; break; |
|
7
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
103 default: status_text = "Unknown"; break; |
|
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
104 } |
|
183
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
105 |
|
221
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
187
diff
changeset
|
106 snprintf( |
|
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
187
diff
changeset
|
107 (char*)buffer, 1024, |
|
18
fa2b8af609d9
[Seobeo] Fixed a bug with pathing. Support SSL.
June Park <parkjune1995@gmail.com>
parents:
17
diff
changeset
|
108 "HTTP/1.1 %d %s\r\n" |
|
7
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
109 "Content-Type: %s\r\n" |
|
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
110 "Content-Length: %d\r\n" |
|
183
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
111 "Connection: %s\r\n" |
|
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
112 "\r\n", |
|
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
113 status, status_text, content_type, content_length, |
|
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
114 keep_alive ? "keep-alive" : "close" |
|
7
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
115 ); |
|
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
116 } |
|
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
117 |
|
183
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
118 // Default arena size (5MB) - will allocate more if Content-Length requires it |
|
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
119 #define DEFAULT_ARENA_SIZE (5 * 1024 * 1024) |
|
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
120 |
|
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
121 // Helper to check if Connection header contains a specific value (case-insensitive) |
|
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
122 static boolean connection_header_contains(const char *header_value, const char *target) |
|
7
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
123 { |
|
183
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
124 if (!header_value || !target) return FALSE; |
|
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
125 |
|
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
126 // Make a copy to tokenize |
|
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
127 char *copy = strdup(header_value); |
|
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
128 if (!copy) return FALSE; |
|
7
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
129 |
|
183
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
130 boolean found = FALSE; |
|
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
131 char *token = strtok(copy, ", \t"); |
|
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
132 while (token) { |
|
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
133 if (strcasecmp(token, target) == 0) { |
|
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
134 found = TRUE; |
|
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
135 break; |
|
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
136 } |
|
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
137 token = strtok(NULL, ", \t"); |
|
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
138 } |
|
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
139 free(copy); |
|
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
140 return found; |
|
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
141 } |
|
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
142 |
|
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
143 // Returns TRUE if connection should be kept alive, FALSE if it should be closed |
|
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
144 boolean Seobeo_Web_ClientHandle_Request(Seobeo_Handle *p_cli_handle, |
|
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
145 Seobeo_Cache_Entry *p_html_cache, |
|
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
146 boolean use_keep_alive) |
|
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
147 { |
|
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
148 boolean should_keep_alive = FALSE; |
|
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
149 |
|
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
150 // Start with default arena size (5MB) |
|
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
151 size_t arena_size = DEFAULT_ARENA_SIZE; |
|
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
152 |
|
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
153 // We'll peek at Content-Length to potentially allocate larger arena |
|
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
154 // For now, start with default and handle body reading separately |
|
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
155 Dowa_Arena *p_request_arena = Dowa_Arena_Create(arena_size); |
|
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
156 if (!p_request_arena) { perror("Dowa_Arena_Create request"); return FALSE; } |
|
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
157 |
|
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
158 Dowa_Arena *p_response_arena = Dowa_Arena_Create(arena_size); |
|
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
159 if (!p_response_arena) { perror("Dowa_Arena_Create response"); Dowa_Arena_Free(p_request_arena); return FALSE; } |
|
7
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
160 |
|
124
dbf14f84d51c
Refactor Seobeo and mrjunejune build files so it works.
June Park <parkjune1995@gmail.com>
parents:
121
diff
changeset
|
161 void *p_response_header = Dowa_Arena_Allocate(p_response_arena, 1024*5); // 5Kb |
|
183
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
162 if (!p_response_header) { perror("Dowa_Arena_Allocate"); goto clean_up_arenas; } |
|
7
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
163 |
|
71
75de5903355c
Giagantic changes that update Dowa library to be more align with stb style array and hashmap. Updated Seobeo to be caching on server side instead of file level caching. Deleted bunch of things I don't really use.
June Park <parkjune1995@gmail.com>
parents:
67
diff
changeset
|
164 Seobeo_Request_Entry *p_req_map = NULL; |
|
92
655ea0b661fd
[Seobeo] Added few endpoints for handling files. [Dowa] Added few functions for random number and generating uuids
June Park <parkjune1995@gmail.com>
parents:
91
diff
changeset
|
165 int parse_result = Seobeo_Web_Header_Parse(p_cli_handle, &p_req_map, p_request_arena); |
|
655ea0b661fd
[Seobeo] Added few endpoints for handling files. [Dowa] Added few functions for random number and generating uuids
June Park <parkjune1995@gmail.com>
parents:
91
diff
changeset
|
166 |
|
183
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
167 // Handle parse errors |
|
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
168 if (parse_result < 0) { |
|
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
169 // Fatal error or connection closed |
|
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
170 Seobeo_Log(SEOBEO_DEBUG, "Seobeo_Web_Header_Parse failed with code %d\n", parse_result); |
|
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
171 if (parse_result == -2) { |
|
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
172 // Connection closed by client - don't send error response |
|
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
173 goto clean_up_arenas; |
|
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
174 } |
|
19
875bb6e10db7
[Seobeo] Chaning Function naming to be easily readable.
June Park <parkjune1995@gmail.com>
parents:
18
diff
changeset
|
175 Seobeo_Web_Header_Generate(p_response_header, |
|
22
947b81010aba
[Dowa & Seobeo] Updated so that Dowa hashmaps can use arena and not be broken. Split up web so taht it can handle different paths. Also fixes issues with hash collisions which was pain in the ass.
June Park <parkjune1995@gmail.com>
parents:
21
diff
changeset
|
176 HTTP_BAD_REQUEST, |
|
947b81010aba
[Dowa & Seobeo] Updated so that Dowa hashmaps can use arena and not be broken. Split up web so taht it can handle different paths. Also fixes issues with hash collisions which was pain in the ass.
June Park <parkjune1995@gmail.com>
parents:
21
diff
changeset
|
177 "text/plain", 0); |
|
7
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
178 Seobeo_Handle_Queue(p_cli_handle, |
|
22
947b81010aba
[Dowa & Seobeo] Updated so that Dowa hashmaps can use arena and not be broken. Split up web so taht it can handle different paths. Also fixes issues with hash collisions which was pain in the ass.
June Park <parkjune1995@gmail.com>
parents:
21
diff
changeset
|
179 (const uint8*)p_response_header, |
|
947b81010aba
[Dowa & Seobeo] Updated so that Dowa hashmaps can use arena and not be broken. Split up web so taht it can handle different paths. Also fixes issues with hash collisions which was pain in the ass.
June Park <parkjune1995@gmail.com>
parents:
21
diff
changeset
|
180 (uint32)strlen(p_response_header)); |
|
947b81010aba
[Dowa & Seobeo] Updated so that Dowa hashmaps can use arena and not be broken. Split up web so taht it can handle different paths. Also fixes issues with hash collisions which was pain in the ass.
June Park <parkjune1995@gmail.com>
parents:
21
diff
changeset
|
181 Seobeo_Handle_Flush(p_cli_handle); |
|
183
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
182 goto clean_up_arenas; |
|
22
947b81010aba
[Dowa & Seobeo] Updated so that Dowa hashmaps can use arena and not be broken. Split up web so taht it can handle different paths. Also fixes issues with hash collisions which was pain in the ass.
June Park <parkjune1995@gmail.com>
parents:
21
diff
changeset
|
183 } |
|
947b81010aba
[Dowa & Seobeo] Updated so that Dowa hashmaps can use arena and not be broken. Split up web so taht it can handle different paths. Also fixes issues with hash collisions which was pain in the ass.
June Park <parkjune1995@gmail.com>
parents:
21
diff
changeset
|
184 |
|
183
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
185 // Determine keep-alive based on HTTP version and Connection header |
|
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
186 // HTTP/1.1: keep-alive by default unless "Connection: close" |
|
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
187 // HTTP/1.0: close by default unless "Connection: keep-alive" |
|
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
188 |
|
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
189 void *p_ver_kv = Dowa_HashMap_Get_Ptr(p_req_map, "Version"); |
|
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
190 const char *http_version = p_ver_kv ? ((Seobeo_Request_Entry*)p_ver_kv)->value : "HTTP/1.0"; |
|
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
191 boolean is_http11 = (strstr(http_version, "1.1") != NULL); |
|
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
192 |
|
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
193 void *p_conn_kv = Dowa_HashMap_Get_Ptr(p_req_map, "Connection"); |
|
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
194 const char *conn_header = p_conn_kv ? ((Seobeo_Request_Entry*)p_conn_kv)->value : NULL; |
|
101
3468e2fe8d88
[Seobeo] log ngnix proxy values (for myself). took out unneeded stuff fflush.
June Park <parkjune1995@gmail.com>
parents:
100
diff
changeset
|
195 |
|
3468e2fe8d88
[Seobeo] log ngnix proxy values (for myself). took out unneeded stuff fflush.
June Park <parkjune1995@gmail.com>
parents:
100
diff
changeset
|
196 void *p_real_ip_kv = Dowa_HashMap_Get_Ptr(p_req_map, "X-Real-IP"); |
|
3468e2fe8d88
[Seobeo] log ngnix proxy values (for myself). took out unneeded stuff fflush.
June Park <parkjune1995@gmail.com>
parents:
100
diff
changeset
|
197 const char *real_ip = p_real_ip_kv ? ((Seobeo_Request_Entry*)p_real_ip_kv)->value : NULL; |
|
3468e2fe8d88
[Seobeo] log ngnix proxy values (for myself). took out unneeded stuff fflush.
June Park <parkjune1995@gmail.com>
parents:
100
diff
changeset
|
198 if (!real_ip) |
|
3468e2fe8d88
[Seobeo] log ngnix proxy values (for myself). took out unneeded stuff fflush.
June Park <parkjune1995@gmail.com>
parents:
100
diff
changeset
|
199 real_ip = p_cli_handle->host; |
|
92
655ea0b661fd
[Seobeo] Added few endpoints for handling files. [Dowa] Added few functions for random number and generating uuids
June Park <parkjune1995@gmail.com>
parents:
91
diff
changeset
|
200 |
|
184
8c74204fd362
[MD to HTML] Updated so it can be used through readme to html
MrJuneJune <me@mrjunejune.com>
parents:
183
diff
changeset
|
201 if (conn_header) |
|
8c74204fd362
[MD to HTML] Updated so it can be used through readme to html
MrJuneJune <me@mrjunejune.com>
parents:
183
diff
changeset
|
202 { |
|
8c74204fd362
[MD to HTML] Updated so it can be used through readme to html
MrJuneJune <me@mrjunejune.com>
parents:
183
diff
changeset
|
203 if (connection_header_contains(conn_header, "close")) |
|
183
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
204 should_keep_alive = FALSE; |
|
184
8c74204fd362
[MD to HTML] Updated so it can be used through readme to html
MrJuneJune <me@mrjunejune.com>
parents:
183
diff
changeset
|
205 else if (connection_header_contains(conn_header, "keep-alive")) |
|
183
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
206 should_keep_alive = use_keep_alive; |
|
184
8c74204fd362
[MD to HTML] Updated so it can be used through readme to html
MrJuneJune <me@mrjunejune.com>
parents:
183
diff
changeset
|
207 else |
|
8c74204fd362
[MD to HTML] Updated so it can be used through readme to html
MrJuneJune <me@mrjunejune.com>
parents:
183
diff
changeset
|
208 should_keep_alive = is_http11 && use_keep_alive; // Unknown value, use version default |
|
8c74204fd362
[MD to HTML] Updated so it can be used through readme to html
MrJuneJune <me@mrjunejune.com>
parents:
183
diff
changeset
|
209 } |
|
8c74204fd362
[MD to HTML] Updated so it can be used through readme to html
MrJuneJune <me@mrjunejune.com>
parents:
183
diff
changeset
|
210 else |
|
183
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
211 should_keep_alive = is_http11 && use_keep_alive; |
|
92
655ea0b661fd
[Seobeo] Added few endpoints for handling files. [Dowa] Added few functions for random number and generating uuids
June Park <parkjune1995@gmail.com>
parents:
91
diff
changeset
|
212 |
|
71
75de5903355c
Giagantic changes that update Dowa library to be more align with stb style array and hashmap. Updated Seobeo to be caching on server side instead of file level caching. Deleted bunch of things I don't really use.
June Park <parkjune1995@gmail.com>
parents:
67
diff
changeset
|
213 void *p_method_kv = Dowa_HashMap_Get_Ptr(p_req_map, "HTTP_Method"); |
|
75de5903355c
Giagantic changes that update Dowa library to be more align with stb style array and hashmap. Updated Seobeo to be caching on server side instead of file level caching. Deleted bunch of things I don't really use.
June Park <parkjune1995@gmail.com>
parents:
67
diff
changeset
|
214 const char *method = p_method_kv ? ((Seobeo_Request_Entry*)p_method_kv)->value : NULL; |
|
22
947b81010aba
[Dowa & Seobeo] Updated so that Dowa hashmaps can use arena and not be broken. Split up web so taht it can handle different paths. Also fixes issues with hash collisions which was pain in the ass.
June Park <parkjune1995@gmail.com>
parents:
21
diff
changeset
|
215 |
|
183
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
216 void *p_path_kv = Dowa_HashMap_Get_Ptr(p_req_map, "Path"); |
|
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
217 const char *path = p_path_kv ? ((Seobeo_Request_Entry*)p_path_kv)->value : "/"; |
|
92
655ea0b661fd
[Seobeo] Added few endpoints for handling files. [Dowa] Added few functions for random number and generating uuids
June Park <parkjune1995@gmail.com>
parents:
91
diff
changeset
|
218 |
|
22
947b81010aba
[Dowa & Seobeo] Updated so that Dowa hashmaps can use arena and not be broken. Split up web so taht it can handle different paths. Also fixes issues with hash collisions which was pain in the ass.
June Park <parkjune1995@gmail.com>
parents:
21
diff
changeset
|
219 if (!method) |
|
947b81010aba
[Dowa & Seobeo] Updated so that Dowa hashmaps can use arena and not be broken. Split up web so taht it can handle different paths. Also fixes issues with hash collisions which was pain in the ass.
June Park <parkjune1995@gmail.com>
parents:
21
diff
changeset
|
220 { |
|
183
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
221 Seobeo_Log(SEOBEO_DEBUG, "No HTTP method found in request\n"); |
|
22
947b81010aba
[Dowa & Seobeo] Updated so that Dowa hashmaps can use arena and not be broken. Split up web so taht it can handle different paths. Also fixes issues with hash collisions which was pain in the ass.
June Park <parkjune1995@gmail.com>
parents:
21
diff
changeset
|
222 Seobeo_Web_Header_Generate(p_response_header, |
|
947b81010aba
[Dowa & Seobeo] Updated so that Dowa hashmaps can use arena and not be broken. Split up web so taht it can handle different paths. Also fixes issues with hash collisions which was pain in the ass.
June Park <parkjune1995@gmail.com>
parents:
21
diff
changeset
|
223 HTTP_BAD_REQUEST, |
|
947b81010aba
[Dowa & Seobeo] Updated so that Dowa hashmaps can use arena and not be broken. Split up web so taht it can handle different paths. Also fixes issues with hash collisions which was pain in the ass.
June Park <parkjune1995@gmail.com>
parents:
21
diff
changeset
|
224 "text/plain", 0); |
|
947b81010aba
[Dowa & Seobeo] Updated so that Dowa hashmaps can use arena and not be broken. Split up web so taht it can handle different paths. Also fixes issues with hash collisions which was pain in the ass.
June Park <parkjune1995@gmail.com>
parents:
21
diff
changeset
|
225 Seobeo_Handle_Queue(p_cli_handle, |
|
947b81010aba
[Dowa & Seobeo] Updated so that Dowa hashmaps can use arena and not be broken. Split up web so taht it can handle different paths. Also fixes issues with hash collisions which was pain in the ass.
June Park <parkjune1995@gmail.com>
parents:
21
diff
changeset
|
226 (const uint8*)p_response_header, |
|
947b81010aba
[Dowa & Seobeo] Updated so that Dowa hashmaps can use arena and not be broken. Split up web so taht it can handle different paths. Also fixes issues with hash collisions which was pain in the ass.
June Park <parkjune1995@gmail.com>
parents:
21
diff
changeset
|
227 (uint32)strlen(p_response_header)); |
|
7
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
228 Seobeo_Handle_Flush(p_cli_handle); |
|
183
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
229 should_keep_alive = FALSE; |
|
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
230 goto clean_up_arenas; |
|
7
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
231 } |
|
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
232 |
|
121
7b1719fa918c
[Seobeo] Added web socket server.
June Park <parkjune1995@gmail.com>
parents:
119
diff
changeset
|
233 // --- Check for WebSocket upgrade request --- |
|
124
dbf14f84d51c
Refactor Seobeo and mrjunejune build files so it works.
June Park <parkjune1995@gmail.com>
parents:
121
diff
changeset
|
234 #ifdef SEOBEO_WEBSOCKET_SERVER |
|
175
71ad34a8bc9a
[HgWeb] Can stream hg response now. Added react page for hg web since we use json anyway.
MrJuneJune <me@mrjunejune.com>
parents:
173
diff
changeset
|
235 Seobeo_Log(SEOBEO_DEBUG, "Web socket path \n"); |
|
121
7b1719fa918c
[Seobeo] Added web socket server.
June Park <parkjune1995@gmail.com>
parents:
119
diff
changeset
|
236 if (Seobeo_WebSocket_Server_Handle_Upgrade(p_cli_handle, p_req_map, path)) |
|
7b1719fa918c
[Seobeo] Added web socket server.
June Park <parkjune1995@gmail.com>
parents:
119
diff
changeset
|
237 { |
|
7b1719fa918c
[Seobeo] Added web socket server.
June Park <parkjune1995@gmail.com>
parents:
119
diff
changeset
|
238 Seobeo_Log(SEOBEO_INFO, "WebSocket connection established\n"); |
|
183
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
239 Dowa_Arena_Free(p_request_arena); |
|
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
240 Dowa_Arena_Free(p_response_arena); |
|
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
241 return FALSE; // WebSocket takes over, don't keep-alive in HTTP sense |
|
121
7b1719fa918c
[Seobeo] Added web socket server.
June Park <parkjune1995@gmail.com>
parents:
119
diff
changeset
|
242 } |
|
124
dbf14f84d51c
Refactor Seobeo and mrjunejune build files so it works.
June Park <parkjune1995@gmail.com>
parents:
121
diff
changeset
|
243 #endif |
|
121
7b1719fa918c
[Seobeo] Added web socket server.
June Park <parkjune1995@gmail.com>
parents:
119
diff
changeset
|
244 |
|
175
71ad34a8bc9a
[HgWeb] Can stream hg response now. Added react page for hg web since we use json anyway.
MrJuneJune <me@mrjunejune.com>
parents:
173
diff
changeset
|
245 // --- Try to match streaming route first --- |
|
71ad34a8bc9a
[HgWeb] Can stream hg response now. Added react page for hg web since we use json anyway.
MrJuneJune <me@mrjunejune.com>
parents:
173
diff
changeset
|
246 Seobeo_Stream_Handler stream_handler = Seobeo_Router_Find_Stream_Handler(method, path, &p_req_map, p_request_arena); |
|
71ad34a8bc9a
[HgWeb] Can stream hg response now. Added react page for hg web since we use json anyway.
MrJuneJune <me@mrjunejune.com>
parents:
173
diff
changeset
|
247 if (stream_handler != NULL) |
|
71ad34a8bc9a
[HgWeb] Can stream hg response now. Added react page for hg web since we use json anyway.
MrJuneJune <me@mrjunejune.com>
parents:
173
diff
changeset
|
248 { |
|
71ad34a8bc9a
[HgWeb] Can stream hg response now. Added react page for hg web since we use json anyway.
MrJuneJune <me@mrjunejune.com>
parents:
173
diff
changeset
|
249 stream_handler(p_cli_handle, p_req_map, p_response_arena); |
| 187 | 250 goto clean_up_arenas; |
|
175
71ad34a8bc9a
[HgWeb] Can stream hg response now. Added react page for hg web since we use json anyway.
MrJuneJune <me@mrjunejune.com>
parents:
173
diff
changeset
|
251 } |
|
71ad34a8bc9a
[HgWeb] Can stream hg response now. Added react page for hg web since we use json anyway.
MrJuneJune <me@mrjunejune.com>
parents:
173
diff
changeset
|
252 |
|
71ad34a8bc9a
[HgWeb] Can stream hg response now. Added react page for hg web since we use json anyway.
MrJuneJune <me@mrjunejune.com>
parents:
173
diff
changeset
|
253 // --- Try to match API route --- |
|
72
4532ce6d9eb8
[Seobeo] Added router to the server logic. Few dowa string manipulation logics.
June Park <parkjune1995@gmail.com>
parents:
71
diff
changeset
|
254 Seobeo_Route_Handler handler = Seobeo_Router_Find_Handler(method, path, &p_req_map, p_request_arena); |
|
4532ce6d9eb8
[Seobeo] Added router to the server logic. Few dowa string manipulation logics.
June Park <parkjune1995@gmail.com>
parents:
71
diff
changeset
|
255 if (handler != NULL) |
|
4532ce6d9eb8
[Seobeo] Added router to the server logic. Few dowa string manipulation logics.
June Park <parkjune1995@gmail.com>
parents:
71
diff
changeset
|
256 { |
|
4532ce6d9eb8
[Seobeo] Added router to the server logic. Few dowa string manipulation logics.
June Park <parkjune1995@gmail.com>
parents:
71
diff
changeset
|
257 Seobeo_Request_Entry *p_response_map = handler(p_req_map, p_response_arena); |
|
183
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
258 Seobeo_Router_Send_Response_KeepAlive(p_cli_handle, p_response_map, p_response_arena, should_keep_alive); |
|
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
259 goto clean_up_arenas; |
|
72
4532ce6d9eb8
[Seobeo] Added router to the server logic. Few dowa string manipulation logics.
June Park <parkjune1995@gmail.com>
parents:
71
diff
changeset
|
260 } |
|
4532ce6d9eb8
[Seobeo] Added router to the server logic. Few dowa string manipulation logics.
June Park <parkjune1995@gmail.com>
parents:
71
diff
changeset
|
261 |
|
183
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
262 // --- Static files fallback for GET (use original large arena logic) --- |
|
22
947b81010aba
[Dowa & Seobeo] Updated so that Dowa hashmaps can use arena and not be broken. Split up web so taht it can handle different paths. Also fixes issues with hash collisions which was pain in the ass.
June Park <parkjune1995@gmail.com>
parents:
21
diff
changeset
|
263 if (strcmp(method, "GET") == 0) |
|
947b81010aba
[Dowa & Seobeo] Updated so that Dowa hashmaps can use arena and not be broken. Split up web so taht it can handle different paths. Also fixes issues with hash collisions which was pain in the ass.
June Park <parkjune1995@gmail.com>
parents:
21
diff
changeset
|
264 { |
|
251
117c4d53c9a4
[ui] Add HTML-first Web Component system
MrJuneJune <me@mrjunejune.com>
parents:
244
diff
changeset
|
265 if (!Seobeo_Static_Path_Is_Safe(path)) |
|
117c4d53c9a4
[ui] Add HTML-first Web Component system
MrJuneJune <me@mrjunejune.com>
parents:
244
diff
changeset
|
266 { |
|
117c4d53c9a4
[ui] Add HTML-first Web Component system
MrJuneJune <me@mrjunejune.com>
parents:
244
diff
changeset
|
267 Seobeo_Web_Header_Generate_KeepAlive( |
|
117c4d53c9a4
[ui] Add HTML-first Web Component system
MrJuneJune <me@mrjunejune.com>
parents:
244
diff
changeset
|
268 p_response_header, |
|
117c4d53c9a4
[ui] Add HTML-first Web Component system
MrJuneJune <me@mrjunejune.com>
parents:
244
diff
changeset
|
269 HTTP_BAD_REQUEST, |
|
117c4d53c9a4
[ui] Add HTML-first Web Component system
MrJuneJune <me@mrjunejune.com>
parents:
244
diff
changeset
|
270 "text/plain", |
|
117c4d53c9a4
[ui] Add HTML-first Web Component system
MrJuneJune <me@mrjunejune.com>
parents:
244
diff
changeset
|
271 0, |
|
117c4d53c9a4
[ui] Add HTML-first Web Component system
MrJuneJune <me@mrjunejune.com>
parents:
244
diff
changeset
|
272 should_keep_alive); |
|
117c4d53c9a4
[ui] Add HTML-first Web Component system
MrJuneJune <me@mrjunejune.com>
parents:
244
diff
changeset
|
273 Seobeo_Handle_Queue( |
|
117c4d53c9a4
[ui] Add HTML-first Web Component system
MrJuneJune <me@mrjunejune.com>
parents:
244
diff
changeset
|
274 p_cli_handle, |
|
117c4d53c9a4
[ui] Add HTML-first Web Component system
MrJuneJune <me@mrjunejune.com>
parents:
244
diff
changeset
|
275 (const uint8 *)p_response_header, |
|
117c4d53c9a4
[ui] Add HTML-first Web Component system
MrJuneJune <me@mrjunejune.com>
parents:
244
diff
changeset
|
276 (uint32)strlen(p_response_header)); |
|
117c4d53c9a4
[ui] Add HTML-first Web Component system
MrJuneJune <me@mrjunejune.com>
parents:
244
diff
changeset
|
277 Seobeo_Handle_Flush(p_cli_handle); |
|
117c4d53c9a4
[ui] Add HTML-first Web Component system
MrJuneJune <me@mrjunejune.com>
parents:
244
diff
changeset
|
278 goto clean_up_arenas; |
|
117c4d53c9a4
[ui] Add HTML-first Web Component system
MrJuneJune <me@mrjunejune.com>
parents:
244
diff
changeset
|
279 } |
|
117c4d53c9a4
[ui] Add HTML-first Web Component system
MrJuneJune <me@mrjunejune.com>
parents:
244
diff
changeset
|
280 |
|
183
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
281 char *file_path = Dowa_Arena_Allocate(p_response_arena, (size_t)5 * 1024); |
|
7
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
282 |
|
22
947b81010aba
[Dowa & Seobeo] Updated so that Dowa hashmaps can use arena and not be broken. Split up web so taht it can handle different paths. Also fixes issues with hash collisions which was pain in the ass.
June Park <parkjune1995@gmail.com>
parents:
21
diff
changeset
|
283 if (!path || strcmp(path, "/") == 0) |
|
947b81010aba
[Dowa & Seobeo] Updated so that Dowa hashmaps can use arena and not be broken. Split up web so taht it can handle different paths. Also fixes issues with hash collisions which was pain in the ass.
June Park <parkjune1995@gmail.com>
parents:
21
diff
changeset
|
284 { |
|
947b81010aba
[Dowa & Seobeo] Updated so that Dowa hashmaps can use arena and not be broken. Split up web so taht it can handle different paths. Also fixes issues with hash collisions which was pain in the ass.
June Park <parkjune1995@gmail.com>
parents:
21
diff
changeset
|
285 strcpy(file_path, "index.html"); |
|
947b81010aba
[Dowa & Seobeo] Updated so that Dowa hashmaps can use arena and not be broken. Split up web so taht it can handle different paths. Also fixes issues with hash collisions which was pain in the ass.
June Park <parkjune1995@gmail.com>
parents:
21
diff
changeset
|
286 } |
|
947b81010aba
[Dowa & Seobeo] Updated so that Dowa hashmaps can use arena and not be broken. Split up web so taht it can handle different paths. Also fixes issues with hash collisions which was pain in the ass.
June Park <parkjune1995@gmail.com>
parents:
21
diff
changeset
|
287 else |
|
947b81010aba
[Dowa & Seobeo] Updated so that Dowa hashmaps can use arena and not be broken. Split up web so taht it can handle different paths. Also fixes issues with hash collisions which was pain in the ass.
June Park <parkjune1995@gmail.com>
parents:
21
diff
changeset
|
288 { |
|
947b81010aba
[Dowa & Seobeo] Updated so that Dowa hashmaps can use arena and not be broken. Split up web so taht it can handle different paths. Also fixes issues with hash collisions which was pain in the ass.
June Park <parkjune1995@gmail.com>
parents:
21
diff
changeset
|
289 size_t L = strlen(path); |
|
947b81010aba
[Dowa & Seobeo] Updated so that Dowa hashmaps can use arena and not be broken. Split up web so taht it can handle different paths. Also fixes issues with hash collisions which was pain in the ass.
June Park <parkjune1995@gmail.com>
parents:
21
diff
changeset
|
290 if (path[0] == '/') |
|
947b81010aba
[Dowa & Seobeo] Updated so that Dowa hashmaps can use arena and not be broken. Split up web so taht it can handle different paths. Also fixes issues with hash collisions which was pain in the ass.
June Park <parkjune1995@gmail.com>
parents:
21
diff
changeset
|
291 { |
|
947b81010aba
[Dowa & Seobeo] Updated so that Dowa hashmaps can use arena and not be broken. Split up web so taht it can handle different paths. Also fixes issues with hash collisions which was pain in the ass.
June Park <parkjune1995@gmail.com>
parents:
21
diff
changeset
|
292 if (strchr(path, '.') == NULL) |
|
947b81010aba
[Dowa & Seobeo] Updated so that Dowa hashmaps can use arena and not be broken. Split up web so taht it can handle different paths. Also fixes issues with hash collisions which was pain in the ass.
June Park <parkjune1995@gmail.com>
parents:
21
diff
changeset
|
293 snprintf(file_path, 512, "%.*s/index.html", (int)(L-1), path+1); |
|
947b81010aba
[Dowa & Seobeo] Updated so that Dowa hashmaps can use arena and not be broken. Split up web so taht it can handle different paths. Also fixes issues with hash collisions which was pain in the ass.
June Park <parkjune1995@gmail.com>
parents:
21
diff
changeset
|
294 else |
|
947b81010aba
[Dowa & Seobeo] Updated so that Dowa hashmaps can use arena and not be broken. Split up web so taht it can handle different paths. Also fixes issues with hash collisions which was pain in the ass.
June Park <parkjune1995@gmail.com>
parents:
21
diff
changeset
|
295 snprintf(file_path, 512, "%.*s", (int)(L-1), path+1); |
|
947b81010aba
[Dowa & Seobeo] Updated so that Dowa hashmaps can use arena and not be broken. Split up web so taht it can handle different paths. Also fixes issues with hash collisions which was pain in the ass.
June Park <parkjune1995@gmail.com>
parents:
21
diff
changeset
|
296 } |
|
947b81010aba
[Dowa & Seobeo] Updated so that Dowa hashmaps can use arena and not be broken. Split up web so taht it can handle different paths. Also fixes issues with hash collisions which was pain in the ass.
June Park <parkjune1995@gmail.com>
parents:
21
diff
changeset
|
297 else |
|
947b81010aba
[Dowa & Seobeo] Updated so that Dowa hashmaps can use arena and not be broken. Split up web so taht it can handle different paths. Also fixes issues with hash collisions which was pain in the ass.
June Park <parkjune1995@gmail.com>
parents:
21
diff
changeset
|
298 strcpy(file_path, path); |
|
947b81010aba
[Dowa & Seobeo] Updated so that Dowa hashmaps can use arena and not be broken. Split up web so taht it can handle different paths. Also fixes issues with hash collisions which was pain in the ass.
June Park <parkjune1995@gmail.com>
parents:
21
diff
changeset
|
299 } |
|
947b81010aba
[Dowa & Seobeo] Updated so that Dowa hashmaps can use arena and not be broken. Split up web so taht it can handle different paths. Also fixes issues with hash collisions which was pain in the ass.
June Park <parkjune1995@gmail.com>
parents:
21
diff
changeset
|
300 |
|
251
117c4d53c9a4
[ui] Add HTML-first Web Component system
MrJuneJune <me@mrjunejune.com>
parents:
244
diff
changeset
|
301 char *file_content = NULL; |
|
71
75de5903355c
Giagantic changes that update Dowa library to be more align with stb style array and hashmap. Updated Seobeo to be caching on server side instead of file level caching. Deleted bunch of things I don't really use.
June Park <parkjune1995@gmail.com>
parents:
67
diff
changeset
|
302 size_t body_size = 0; |
|
251
117c4d53c9a4
[ui] Add HTML-first Web Component system
MrJuneJune <me@mrjunejune.com>
parents:
244
diff
changeset
|
303 (void)p_html_cache; |
|
117c4d53c9a4
[ui] Add HTML-first Web Component system
MrJuneJune <me@mrjunejune.com>
parents:
244
diff
changeset
|
304 file_content = Seobeo_Web_LoadFile(file_path, &body_size); |
|
22
947b81010aba
[Dowa & Seobeo] Updated so that Dowa hashmaps can use arena and not be broken. Split up web so taht it can handle different paths. Also fixes issues with hash collisions which was pain in the ass.
June Park <parkjune1995@gmail.com>
parents:
21
diff
changeset
|
305 |
|
71
75de5903355c
Giagantic changes that update Dowa library to be more align with stb style array and hashmap. Updated Seobeo to be caching on server side instead of file level caching. Deleted bunch of things I don't really use.
June Park <parkjune1995@gmail.com>
parents:
67
diff
changeset
|
306 if (!file_content) |
|
22
947b81010aba
[Dowa & Seobeo] Updated so that Dowa hashmaps can use arena and not be broken. Split up web so taht it can handle different paths. Also fixes issues with hash collisions which was pain in the ass.
June Park <parkjune1995@gmail.com>
parents:
21
diff
changeset
|
307 { |
|
183
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
308 Seobeo_Web_Header_Generate_KeepAlive(p_response_header, |
|
22
947b81010aba
[Dowa & Seobeo] Updated so that Dowa hashmaps can use arena and not be broken. Split up web so taht it can handle different paths. Also fixes issues with hash collisions which was pain in the ass.
June Park <parkjune1995@gmail.com>
parents:
21
diff
changeset
|
309 HTTP_NOT_FOUND, |
|
183
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
310 "text/html", 0, should_keep_alive); |
|
18
fa2b8af609d9
[Seobeo] Fixed a bug with pathing. Support SSL.
June Park <parkjune1995@gmail.com>
parents:
17
diff
changeset
|
311 Seobeo_Handle_Queue(p_cli_handle, |
|
22
947b81010aba
[Dowa & Seobeo] Updated so that Dowa hashmaps can use arena and not be broken. Split up web so taht it can handle different paths. Also fixes issues with hash collisions which was pain in the ass.
June Park <parkjune1995@gmail.com>
parents:
21
diff
changeset
|
312 (const uint8*)p_response_header, |
|
947b81010aba
[Dowa & Seobeo] Updated so that Dowa hashmaps can use arena and not be broken. Split up web so taht it can handle different paths. Also fixes issues with hash collisions which was pain in the ass.
June Park <parkjune1995@gmail.com>
parents:
21
diff
changeset
|
313 (uint32)strlen(p_response_header)); |
|
18
fa2b8af609d9
[Seobeo] Fixed a bug with pathing. Support SSL.
June Park <parkjune1995@gmail.com>
parents:
17
diff
changeset
|
314 Seobeo_Handle_Flush(p_cli_handle); |
|
183
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
315 goto clean_up_arenas; |
|
18
fa2b8af609d9
[Seobeo] Fixed a bug with pathing. Support SSL.
June Park <parkjune1995@gmail.com>
parents:
17
diff
changeset
|
316 } |
|
7
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
317 |
|
22
947b81010aba
[Dowa & Seobeo] Updated so that Dowa hashmaps can use arena and not be broken. Split up web so taht it can handle different paths. Also fixes issues with hash collisions which was pain in the ass.
June Park <parkjune1995@gmail.com>
parents:
21
diff
changeset
|
318 const char *mime = "application/octet-stream"; |
|
947b81010aba
[Dowa & Seobeo] Updated so that Dowa hashmaps can use arena and not be broken. Split up web so taht it can handle different paths. Also fixes issues with hash collisions which was pain in the ass.
June Park <parkjune1995@gmail.com>
parents:
21
diff
changeset
|
319 if (strstr(file_path, ".html")) mime = "text/html; charset=utf-8"; |
|
947b81010aba
[Dowa & Seobeo] Updated so that Dowa hashmaps can use arena and not be broken. Split up web so taht it can handle different paths. Also fixes issues with hash collisions which was pain in the ass.
June Park <parkjune1995@gmail.com>
parents:
21
diff
changeset
|
320 else if (strstr(file_path, ".css")) mime = "text/css"; |
|
947b81010aba
[Dowa & Seobeo] Updated so that Dowa hashmaps can use arena and not be broken. Split up web so taht it can handle different paths. Also fixes issues with hash collisions which was pain in the ass.
June Park <parkjune1995@gmail.com>
parents:
21
diff
changeset
|
321 else if (strstr(file_path, ".js")) mime = "application/javascript"; |
|
947b81010aba
[Dowa & Seobeo] Updated so that Dowa hashmaps can use arena and not be broken. Split up web so taht it can handle different paths. Also fixes issues with hash collisions which was pain in the ass.
June Park <parkjune1995@gmail.com>
parents:
21
diff
changeset
|
322 else if (strstr(file_path, ".png")) mime = "image/png"; |
|
947b81010aba
[Dowa & Seobeo] Updated so that Dowa hashmaps can use arena and not be broken. Split up web so taht it can handle different paths. Also fixes issues with hash collisions which was pain in the ass.
June Park <parkjune1995@gmail.com>
parents:
21
diff
changeset
|
323 else if (strstr(file_path, ".jpg") || strstr(file_path, ".jpeg")) mime = "image/jpeg"; |
|
184
8c74204fd362
[MD to HTML] Updated so it can be used through readme to html
MrJuneJune <me@mrjunejune.com>
parents:
183
diff
changeset
|
324 else if (strstr(file_path, ".gif")) mime = "image/gif"; |
|
8c74204fd362
[MD to HTML] Updated so it can be used through readme to html
MrJuneJune <me@mrjunejune.com>
parents:
183
diff
changeset
|
325 else if (strstr(file_path, ".svg")) mime = "image/svg+xml"; |
|
8c74204fd362
[MD to HTML] Updated so it can be used through readme to html
MrJuneJune <me@mrjunejune.com>
parents:
183
diff
changeset
|
326 else if (strstr(file_path, ".ico")) mime = "image/x-icon"; |
|
8c74204fd362
[MD to HTML] Updated so it can be used through readme to html
MrJuneJune <me@mrjunejune.com>
parents:
183
diff
changeset
|
327 else if (strstr(file_path, ".webp")) mime = "image/webp"; |
|
22
947b81010aba
[Dowa & Seobeo] Updated so that Dowa hashmaps can use arena and not be broken. Split up web so taht it can handle different paths. Also fixes issues with hash collisions which was pain in the ass.
June Park <parkjune1995@gmail.com>
parents:
21
diff
changeset
|
328 else if (strstr(file_path, ".json")) mime = "application/json"; |
|
184
8c74204fd362
[MD to HTML] Updated so it can be used through readme to html
MrJuneJune <me@mrjunejune.com>
parents:
183
diff
changeset
|
329 else if (strstr(file_path, ".wasm")) mime = "application/wasm"; |
|
8c74204fd362
[MD to HTML] Updated so it can be used through readme to html
MrJuneJune <me@mrjunejune.com>
parents:
183
diff
changeset
|
330 else if (strstr(file_path, ".xml")) mime = "application/xml"; |
|
8c74204fd362
[MD to HTML] Updated so it can be used through readme to html
MrJuneJune <me@mrjunejune.com>
parents:
183
diff
changeset
|
331 else if (strstr(file_path, ".pdf")) mime = "application/pdf"; |
|
8c74204fd362
[MD to HTML] Updated so it can be used through readme to html
MrJuneJune <me@mrjunejune.com>
parents:
183
diff
changeset
|
332 else if (strstr(file_path, ".txt")) mime = "text/plain"; |
|
242
543df0fe7168
[tools] Add full HLS player support
MrJuneJune <me@mrjunejune.com>
parents:
223
diff
changeset
|
333 else if (strstr(file_path, ".m3u8")) mime = "application/vnd.apple.mpegurl"; |
|
543df0fe7168
[tools] Add full HLS player support
MrJuneJune <me@mrjunejune.com>
parents:
223
diff
changeset
|
334 else if (strstr(file_path, ".m4s")) mime = "video/iso.segment"; |
|
543df0fe7168
[tools] Add full HLS player support
MrJuneJune <me@mrjunejune.com>
parents:
223
diff
changeset
|
335 else if (strstr(file_path, ".ts")) mime = "video/mp2t"; |
|
184
8c74204fd362
[MD to HTML] Updated so it can be used through readme to html
MrJuneJune <me@mrjunejune.com>
parents:
183
diff
changeset
|
336 else if (strstr(file_path, ".mp4")) mime = "video/mp4"; |
|
8c74204fd362
[MD to HTML] Updated so it can be used through readme to html
MrJuneJune <me@mrjunejune.com>
parents:
183
diff
changeset
|
337 else if (strstr(file_path, ".webm")) mime = "video/webm"; |
|
8c74204fd362
[MD to HTML] Updated so it can be used through readme to html
MrJuneJune <me@mrjunejune.com>
parents:
183
diff
changeset
|
338 else if (strstr(file_path, ".mp3")) mime = "audio/mpeg"; |
|
8c74204fd362
[MD to HTML] Updated so it can be used through readme to html
MrJuneJune <me@mrjunejune.com>
parents:
183
diff
changeset
|
339 else if (strstr(file_path, ".woff2")) mime = "font/woff2"; |
|
8c74204fd362
[MD to HTML] Updated so it can be used through readme to html
MrJuneJune <me@mrjunejune.com>
parents:
183
diff
changeset
|
340 else if (strstr(file_path, ".woff")) mime = "font/woff"; |
|
8c74204fd362
[MD to HTML] Updated so it can be used through readme to html
MrJuneJune <me@mrjunejune.com>
parents:
183
diff
changeset
|
341 else if (strstr(file_path, ".ttf")) mime = "font/ttf"; |
|
8c74204fd362
[MD to HTML] Updated so it can be used through readme to html
MrJuneJune <me@mrjunejune.com>
parents:
183
diff
changeset
|
342 else if (strstr(file_path, ".webp")) mime = "image/webp"; |
|
8c74204fd362
[MD to HTML] Updated so it can be used through readme to html
MrJuneJune <me@mrjunejune.com>
parents:
183
diff
changeset
|
343 else if (strstr(file_path, ".glb")) mime = "model/gltf-binary"; |
|
8c74204fd362
[MD to HTML] Updated so it can be used through readme to html
MrJuneJune <me@mrjunejune.com>
parents:
183
diff
changeset
|
344 else if (strstr(file_path, ".gltf")) mime = "model/gltf+json"; |
|
8c74204fd362
[MD to HTML] Updated so it can be used through readme to html
MrJuneJune <me@mrjunejune.com>
parents:
183
diff
changeset
|
345 |
|
7
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
346 |
|
183
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
347 Seobeo_Web_Header_Generate_KeepAlive(p_response_header, |
|
22
947b81010aba
[Dowa & Seobeo] Updated so that Dowa hashmaps can use arena and not be broken. Split up web so taht it can handle different paths. Also fixes issues with hash collisions which was pain in the ass.
June Park <parkjune1995@gmail.com>
parents:
21
diff
changeset
|
348 HTTP_OK, |
|
947b81010aba
[Dowa & Seobeo] Updated so that Dowa hashmaps can use arena and not be broken. Split up web so taht it can handle different paths. Also fixes issues with hash collisions which was pain in the ass.
June Park <parkjune1995@gmail.com>
parents:
21
diff
changeset
|
349 mime, |
|
183
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
350 body_size, should_keep_alive); |
|
7
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
351 |
|
22
947b81010aba
[Dowa & Seobeo] Updated so that Dowa hashmaps can use arena and not be broken. Split up web so taht it can handle different paths. Also fixes issues with hash collisions which was pain in the ass.
June Park <parkjune1995@gmail.com>
parents:
21
diff
changeset
|
352 Seobeo_Handle_Queue(p_cli_handle, |
|
947b81010aba
[Dowa & Seobeo] Updated so that Dowa hashmaps can use arena and not be broken. Split up web so taht it can handle different paths. Also fixes issues with hash collisions which was pain in the ass.
June Park <parkjune1995@gmail.com>
parents:
21
diff
changeset
|
353 (const uint8*)p_response_header, |
|
947b81010aba
[Dowa & Seobeo] Updated so that Dowa hashmaps can use arena and not be broken. Split up web so taht it can handle different paths. Also fixes issues with hash collisions which was pain in the ass.
June Park <parkjune1995@gmail.com>
parents:
21
diff
changeset
|
354 (uint32)strlen(p_response_header)); |
|
947b81010aba
[Dowa & Seobeo] Updated so that Dowa hashmaps can use arena and not be broken. Split up web so taht it can handle different paths. Also fixes issues with hash collisions which was pain in the ass.
June Park <parkjune1995@gmail.com>
parents:
21
diff
changeset
|
355 Seobeo_Handle_Queue(p_cli_handle, |
|
71
75de5903355c
Giagantic changes that update Dowa library to be more align with stb style array and hashmap. Updated Seobeo to be caching on server side instead of file level caching. Deleted bunch of things I don't really use.
June Park <parkjune1995@gmail.com>
parents:
67
diff
changeset
|
356 (const uint8*)file_content, |
|
22
947b81010aba
[Dowa & Seobeo] Updated so that Dowa hashmaps can use arena and not be broken. Split up web so taht it can handle different paths. Also fixes issues with hash collisions which was pain in the ass.
June Park <parkjune1995@gmail.com>
parents:
21
diff
changeset
|
357 (uint32)body_size); |
|
947b81010aba
[Dowa & Seobeo] Updated so that Dowa hashmaps can use arena and not be broken. Split up web so taht it can handle different paths. Also fixes issues with hash collisions which was pain in the ass.
June Park <parkjune1995@gmail.com>
parents:
21
diff
changeset
|
358 Seobeo_Handle_Flush(p_cli_handle); |
|
251
117c4d53c9a4
[ui] Add HTML-first Web Component system
MrJuneJune <me@mrjunejune.com>
parents:
244
diff
changeset
|
359 free(file_content); |
|
22
947b81010aba
[Dowa & Seobeo] Updated so that Dowa hashmaps can use arena and not be broken. Split up web so taht it can handle different paths. Also fixes issues with hash collisions which was pain in the ass.
June Park <parkjune1995@gmail.com>
parents:
21
diff
changeset
|
360 } |
|
947b81010aba
[Dowa & Seobeo] Updated so that Dowa hashmaps can use arena and not be broken. Split up web so taht it can handle different paths. Also fixes issues with hash collisions which was pain in the ass.
June Park <parkjune1995@gmail.com>
parents:
21
diff
changeset
|
361 else |
|
947b81010aba
[Dowa & Seobeo] Updated so that Dowa hashmaps can use arena and not be broken. Split up web so taht it can handle different paths. Also fixes issues with hash collisions which was pain in the ass.
June Park <parkjune1995@gmail.com>
parents:
21
diff
changeset
|
362 { |
|
183
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
363 Seobeo_Web_Header_Generate_KeepAlive(p_response_header, |
|
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
364 HTTP_NOT_FOUND, |
|
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
365 "text/plain", 0, should_keep_alive); |
|
22
947b81010aba
[Dowa & Seobeo] Updated so that Dowa hashmaps can use arena and not be broken. Split up web so taht it can handle different paths. Also fixes issues with hash collisions which was pain in the ass.
June Park <parkjune1995@gmail.com>
parents:
21
diff
changeset
|
366 Seobeo_Handle_Queue(p_cli_handle, |
|
947b81010aba
[Dowa & Seobeo] Updated so that Dowa hashmaps can use arena and not be broken. Split up web so taht it can handle different paths. Also fixes issues with hash collisions which was pain in the ass.
June Park <parkjune1995@gmail.com>
parents:
21
diff
changeset
|
367 (const uint8*)p_response_header, |
|
947b81010aba
[Dowa & Seobeo] Updated so that Dowa hashmaps can use arena and not be broken. Split up web so taht it can handle different paths. Also fixes issues with hash collisions which was pain in the ass.
June Park <parkjune1995@gmail.com>
parents:
21
diff
changeset
|
368 (uint32)strlen(p_response_header)); |
|
947b81010aba
[Dowa & Seobeo] Updated so that Dowa hashmaps can use arena and not be broken. Split up web so taht it can handle different paths. Also fixes issues with hash collisions which was pain in the ass.
June Park <parkjune1995@gmail.com>
parents:
21
diff
changeset
|
369 Seobeo_Handle_Flush(p_cli_handle); |
|
947b81010aba
[Dowa & Seobeo] Updated so that Dowa hashmaps can use arena and not be broken. Split up web so taht it can handle different paths. Also fixes issues with hash collisions which was pain in the ass.
June Park <parkjune1995@gmail.com>
parents:
21
diff
changeset
|
370 } |
|
7
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
371 |
|
183
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
372 clean_up_arenas: |
|
71
75de5903355c
Giagantic changes that update Dowa library to be more align with stb style array and hashmap. Updated Seobeo to be caching on server side instead of file level caching. Deleted bunch of things I don't really use.
June Park <parkjune1995@gmail.com>
parents:
67
diff
changeset
|
373 if (p_request_arena) |
|
72
4532ce6d9eb8
[Seobeo] Added router to the server logic. Few dowa string manipulation logics.
June Park <parkjune1995@gmail.com>
parents:
71
diff
changeset
|
374 Dowa_Arena_Free(p_request_arena); |
|
62
ea9ef388ab97
[Seobeo] Fixed issues with epoll or kqeue in different threads. Initizlied the event looop inside of the thread itself.
June Park <parkjune1995@gmail.com>
parents:
36
diff
changeset
|
375 if (p_response_arena) |
|
72
4532ce6d9eb8
[Seobeo] Added router to the server logic. Few dowa string manipulation logics.
June Park <parkjune1995@gmail.com>
parents:
71
diff
changeset
|
376 Dowa_Arena_Free(p_response_arena); |
|
183
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
377 return should_keep_alive; |
|
7
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
378 } |
|
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
379 |
|
71
75de5903355c
Giagantic changes that update Dowa library to be more align with stb style array and hashmap. Updated Seobeo to be caching on server side instead of file level caching. Deleted bunch of things I don't really use.
June Park <parkjune1995@gmail.com>
parents:
67
diff
changeset
|
380 int Seobeo_Web_Header_Parse(Seobeo_Handle *p_handle, Seobeo_Request_Entry **pp_map, Dowa_Arena *p_arena) |
|
7
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
381 { |
|
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
382 while (1) |
|
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
383 { |
|
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
384 int r = Seobeo_Handle_Read(p_handle); |
|
71
75de5903355c
Giagantic changes that update Dowa library to be more align with stb style array and hashmap. Updated Seobeo to be caching on server side instead of file level caching. Deleted bunch of things I don't really use.
June Park <parkjune1995@gmail.com>
parents:
67
diff
changeset
|
385 if (r < 0) |
|
75de5903355c
Giagantic changes that update Dowa library to be more align with stb style array and hashmap. Updated Seobeo to be caching on server side instead of file level caching. Deleted bunch of things I don't really use.
June Park <parkjune1995@gmail.com>
parents:
67
diff
changeset
|
386 return -1; // fatal error |
|
75de5903355c
Giagantic changes that update Dowa library to be more align with stb style array and hashmap. Updated Seobeo to be caching on server side instead of file level caching. Deleted bunch of things I don't really use.
June Park <parkjune1995@gmail.com>
parents:
67
diff
changeset
|
387 if (r == -2) |
|
75de5903355c
Giagantic changes that update Dowa library to be more align with stb style array and hashmap. Updated Seobeo to be caching on server side instead of file level caching. Deleted bunch of things I don't really use.
June Park <parkjune1995@gmail.com>
parents:
67
diff
changeset
|
388 return -2; // connection closed TODO: Add this as part of Handle struct. |
|
7
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
389 |
|
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
390 if (p_handle->read_buffer_len >= 4 && |
|
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
391 strstr((char*)p_handle->read_buffer, "\r\n\r\n") != NULL) |
|
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
392 break; |
|
110
99c4530e4629
[Seobeo] Small Syntax fixes.
June Park <parkjune1995@gmail.com>
parents:
101
diff
changeset
|
393 |
|
71
75de5903355c
Giagantic changes that update Dowa library to be more align with stb style array and hashmap. Updated Seobeo to be caching on server side instead of file level caching. Deleted bunch of things I don't really use.
June Park <parkjune1995@gmail.com>
parents:
67
diff
changeset
|
394 if (r == 0) |
|
175
71ad34a8bc9a
[HgWeb] Can stream hg response now. Added react page for hg web since we use json anyway.
MrJuneJune <me@mrjunejune.com>
parents:
173
diff
changeset
|
395 { |
|
71ad34a8bc9a
[HgWeb] Can stream hg response now. Added react page for hg web since we use json anyway.
MrJuneJune <me@mrjunejune.com>
parents:
173
diff
changeset
|
396 Seobeo_Log(SEOBEO_INFO, "Waiting?\n"); |
|
71ad34a8bc9a
[HgWeb] Can stream hg response now. Added react page for hg web since we use json anyway.
MrJuneJune <me@mrjunejune.com>
parents:
173
diff
changeset
|
397 continue; // EAGAIN, try again later TODO: Add this as part of Handle struct. |
|
71ad34a8bc9a
[HgWeb] Can stream hg response now. Added react page for hg web since we use json anyway.
MrJuneJune <me@mrjunejune.com>
parents:
173
diff
changeset
|
398 } |
|
7
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
399 } |
|
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
400 |
|
110
99c4530e4629
[Seobeo] Small Syntax fixes.
June Park <parkjune1995@gmail.com>
parents:
101
diff
changeset
|
401 // "METHOD SP PATH SP VERSION CRLF" |
|
7
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
402 char *buf = (char*)p_handle->read_buffer; |
|
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
403 char *hdr_end = strstr(buf, "\r\n\r\n"); |
|
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
404 size_t hdr_len = hdr_end - buf + 4; |
|
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
405 |
|
92
655ea0b661fd
[Seobeo] Added few endpoints for handling files. [Dowa] Added few functions for random number and generating uuids
June Park <parkjune1995@gmail.com>
parents:
91
diff
changeset
|
406 // Debug: Print the first line of the request |
|
655ea0b661fd
[Seobeo] Added few endpoints for handling files. [Dowa] Added few functions for random number and generating uuids
June Park <parkjune1995@gmail.com>
parents:
91
diff
changeset
|
407 char *first_line_end = strstr(buf, "\r\n"); |
|
655ea0b661fd
[Seobeo] Added few endpoints for handling files. [Dowa] Added few functions for random number and generating uuids
June Park <parkjune1995@gmail.com>
parents:
91
diff
changeset
|
408 if (first_line_end) |
|
655ea0b661fd
[Seobeo] Added few endpoints for handling files. [Dowa] Added few functions for random number and generating uuids
June Park <parkjune1995@gmail.com>
parents:
91
diff
changeset
|
409 { |
|
655ea0b661fd
[Seobeo] Added few endpoints for handling files. [Dowa] Added few functions for random number and generating uuids
June Park <parkjune1995@gmail.com>
parents:
91
diff
changeset
|
410 size_t first_line_len = first_line_end - buf; |
| 96 | 411 Seobeo_Log(SEOBEO_DEBUG, "Request line (first %zu bytes)\n", first_line_len > 200 ? 200 : first_line_len); |
|
92
655ea0b661fd
[Seobeo] Added few endpoints for handling files. [Dowa] Added few functions for random number and generating uuids
June Park <parkjune1995@gmail.com>
parents:
91
diff
changeset
|
412 } |
|
655ea0b661fd
[Seobeo] Added few endpoints for handling files. [Dowa] Added few functions for random number and generating uuids
June Park <parkjune1995@gmail.com>
parents:
91
diff
changeset
|
413 |
|
22
947b81010aba
[Dowa & Seobeo] Updated so that Dowa hashmaps can use arena and not be broken. Split up web so taht it can handle different paths. Also fixes issues with hash collisions which was pain in the ass.
June Park <parkjune1995@gmail.com>
parents:
21
diff
changeset
|
414 // This seems kinda bad ? |
|
7
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
415 char method[16], path[256], version[16]; |
|
92
655ea0b661fd
[Seobeo] Added few endpoints for handling files. [Dowa] Added few functions for random number and generating uuids
June Park <parkjune1995@gmail.com>
parents:
91
diff
changeset
|
416 int scan_result = sscanf(buf, "%15s %255s %15s", method, path, version); |
| 96 | 417 Seobeo_Log(SEOBEO_DEBUG, "sscanf returned %d (method='%s', path='%s', version='%s')\n", |
|
92
655ea0b661fd
[Seobeo] Added few endpoints for handling files. [Dowa] Added few functions for random number and generating uuids
June Park <parkjune1995@gmail.com>
parents:
91
diff
changeset
|
418 scan_result, |
|
655ea0b661fd
[Seobeo] Added few endpoints for handling files. [Dowa] Added few functions for random number and generating uuids
June Park <parkjune1995@gmail.com>
parents:
91
diff
changeset
|
419 scan_result >= 1 ? method : "N/A", |
|
655ea0b661fd
[Seobeo] Added few endpoints for handling files. [Dowa] Added few functions for random number and generating uuids
June Park <parkjune1995@gmail.com>
parents:
91
diff
changeset
|
420 scan_result >= 2 ? path : "N/A", |
|
655ea0b661fd
[Seobeo] Added few endpoints for handling files. [Dowa] Added few functions for random number and generating uuids
June Park <parkjune1995@gmail.com>
parents:
91
diff
changeset
|
421 scan_result >= 3 ? version : "N/A"); |
|
655ea0b661fd
[Seobeo] Added few endpoints for handling files. [Dowa] Added few functions for random number and generating uuids
June Park <parkjune1995@gmail.com>
parents:
91
diff
changeset
|
422 |
|
655ea0b661fd
[Seobeo] Added few endpoints for handling files. [Dowa] Added few functions for random number and generating uuids
June Park <parkjune1995@gmail.com>
parents:
91
diff
changeset
|
423 if (scan_result != 3) |
|
7
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
424 { |
| 96 | 425 Seobeo_Log(SEOBEO_ERROR, "Failed to parse request line\n"); |
|
7
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
426 return -1; |
|
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
427 } |
|
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
428 |
| 96 | 429 Seobeo_Log(SEOBEO_DEBUG, "Allocating method_copy\n"); |
|
71
75de5903355c
Giagantic changes that update Dowa library to be more align with stb style array and hashmap. Updated Seobeo to be caching on server side instead of file level caching. Deleted bunch of things I don't really use.
June Park <parkjune1995@gmail.com>
parents:
67
diff
changeset
|
430 char *method_copy = Dowa_Arena_Allocate(p_arena, strlen(method) + 1); |
| 96 | 431 if (!method_copy) { Seobeo_Log(SEOBEO_ERROR, "Failed to allocate method_copy\n"); return -1; } |
|
71
75de5903355c
Giagantic changes that update Dowa library to be more align with stb style array and hashmap. Updated Seobeo to be caching on server side instead of file level caching. Deleted bunch of things I don't really use.
June Park <parkjune1995@gmail.com>
parents:
67
diff
changeset
|
432 strcpy(method_copy, method); |
|
75de5903355c
Giagantic changes that update Dowa library to be more align with stb style array and hashmap. Updated Seobeo to be caching on server side instead of file level caching. Deleted bunch of things I don't really use.
June Park <parkjune1995@gmail.com>
parents:
67
diff
changeset
|
433 |
| 96 | 434 Seobeo_Log(SEOBEO_DEBUG, "Allocating version_copy\n"); |
|
71
75de5903355c
Giagantic changes that update Dowa library to be more align with stb style array and hashmap. Updated Seobeo to be caching on server side instead of file level caching. Deleted bunch of things I don't really use.
June Park <parkjune1995@gmail.com>
parents:
67
diff
changeset
|
435 char *version_copy = Dowa_Arena_Allocate(p_arena, strlen(version) + 1); |
| 96 | 436 if (!version_copy) { Seobeo_Log(SEOBEO_ERROR, "Failed to allocate version_copy\n"); return -1; } |
|
71
75de5903355c
Giagantic changes that update Dowa library to be more align with stb style array and hashmap. Updated Seobeo to be caching on server side instead of file level caching. Deleted bunch of things I don't really use.
June Park <parkjune1995@gmail.com>
parents:
67
diff
changeset
|
437 strcpy(version_copy, version); |
|
75de5903355c
Giagantic changes that update Dowa library to be more align with stb style array and hashmap. Updated Seobeo to be caching on server side instead of file level caching. Deleted bunch of things I don't really use.
June Park <parkjune1995@gmail.com>
parents:
67
diff
changeset
|
438 |
| 96 | 439 Seobeo_Log(SEOBEO_DEBUG, "Pushing HTTP_Method and Version to map\n"); |
|
71
75de5903355c
Giagantic changes that update Dowa library to be more align with stb style array and hashmap. Updated Seobeo to be caching on server side instead of file level caching. Deleted bunch of things I don't really use.
June Park <parkjune1995@gmail.com>
parents:
67
diff
changeset
|
440 Dowa_HashMap_Push_Arena(*pp_map, "HTTP_Method", method_copy, p_arena); |
|
75de5903355c
Giagantic changes that update Dowa library to be more align with stb style array and hashmap. Updated Seobeo to be caching on server side instead of file level caching. Deleted bunch of things I don't really use.
June Park <parkjune1995@gmail.com>
parents:
67
diff
changeset
|
441 Dowa_HashMap_Push_Arena(*pp_map, "Version", version_copy, p_arena); |
| 96 | 442 Seobeo_Log(SEOBEO_DEBUG, "Map now has %zu entries\n", Dowa_Array_Length(*pp_map)); |
|
7
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
443 |
|
22
947b81010aba
[Dowa & Seobeo] Updated so that Dowa hashmaps can use arena and not be broken. Split up web so taht it can handle different paths. Also fixes issues with hash collisions which was pain in the ass.
June Park <parkjune1995@gmail.com>
parents:
21
diff
changeset
|
444 char *raw_path = path; |
|
947b81010aba
[Dowa & Seobeo] Updated so that Dowa hashmaps can use arena and not be broken. Split up web so taht it can handle different paths. Also fixes issues with hash collisions which was pain in the ass.
June Park <parkjune1995@gmail.com>
parents:
21
diff
changeset
|
445 char *query_start = strchr(raw_path, '?'); |
|
947b81010aba
[Dowa & Seobeo] Updated so that Dowa hashmaps can use arena and not be broken. Split up web so taht it can handle different paths. Also fixes issues with hash collisions which was pain in the ass.
June Park <parkjune1995@gmail.com>
parents:
21
diff
changeset
|
446 char *query_str = NULL; |
|
947b81010aba
[Dowa & Seobeo] Updated so that Dowa hashmaps can use arena and not be broken. Split up web so taht it can handle different paths. Also fixes issues with hash collisions which was pain in the ass.
June Park <parkjune1995@gmail.com>
parents:
21
diff
changeset
|
447 |
|
947b81010aba
[Dowa & Seobeo] Updated so that Dowa hashmaps can use arena and not be broken. Split up web so taht it can handle different paths. Also fixes issues with hash collisions which was pain in the ass.
June Park <parkjune1995@gmail.com>
parents:
21
diff
changeset
|
448 if (query_start) |
|
947b81010aba
[Dowa & Seobeo] Updated so that Dowa hashmaps can use arena and not be broken. Split up web so taht it can handle different paths. Also fixes issues with hash collisions which was pain in the ass.
June Park <parkjune1995@gmail.com>
parents:
21
diff
changeset
|
449 { |
|
947b81010aba
[Dowa & Seobeo] Updated so that Dowa hashmaps can use arena and not be broken. Split up web so taht it can handle different paths. Also fixes issues with hash collisions which was pain in the ass.
June Park <parkjune1995@gmail.com>
parents:
21
diff
changeset
|
450 *query_start = '\0'; // now raw_path ends before '?' |
|
947b81010aba
[Dowa & Seobeo] Updated so that Dowa hashmaps can use arena and not be broken. Split up web so taht it can handle different paths. Also fixes issues with hash collisions which was pain in the ass.
June Park <parkjune1995@gmail.com>
parents:
21
diff
changeset
|
451 query_str = query_start + 1; |
|
947b81010aba
[Dowa & Seobeo] Updated so that Dowa hashmaps can use arena and not be broken. Split up web so taht it can handle different paths. Also fixes issues with hash collisions which was pain in the ass.
June Park <parkjune1995@gmail.com>
parents:
21
diff
changeset
|
452 } |
|
947b81010aba
[Dowa & Seobeo] Updated so that Dowa hashmaps can use arena and not be broken. Split up web so taht it can handle different paths. Also fixes issues with hash collisions which was pain in the ass.
June Park <parkjune1995@gmail.com>
parents:
21
diff
changeset
|
453 |
|
71
75de5903355c
Giagantic changes that update Dowa library to be more align with stb style array and hashmap. Updated Seobeo to be caching on server side instead of file level caching. Deleted bunch of things I don't really use.
June Park <parkjune1995@gmail.com>
parents:
67
diff
changeset
|
454 char *path_copy = Dowa_Arena_Allocate(p_arena, strlen(raw_path) + 1); |
|
75de5903355c
Giagantic changes that update Dowa library to be more align with stb style array and hashmap. Updated Seobeo to be caching on server side instead of file level caching. Deleted bunch of things I don't really use.
June Park <parkjune1995@gmail.com>
parents:
67
diff
changeset
|
455 if (!path_copy) return -1; |
|
75de5903355c
Giagantic changes that update Dowa library to be more align with stb style array and hashmap. Updated Seobeo to be caching on server side instead of file level caching. Deleted bunch of things I don't really use.
June Park <parkjune1995@gmail.com>
parents:
67
diff
changeset
|
456 strcpy(path_copy, raw_path); |
|
75de5903355c
Giagantic changes that update Dowa library to be more align with stb style array and hashmap. Updated Seobeo to be caching on server side instead of file level caching. Deleted bunch of things I don't really use.
June Park <parkjune1995@gmail.com>
parents:
67
diff
changeset
|
457 Dowa_HashMap_Push_Arena(*pp_map, "Path", path_copy, p_arena); |
|
135
ffb764d2fcc5
[HgWeb] Updated hg web so it works
June Park <parkjune1995@gmail.com>
parents:
132
diff
changeset
|
458 |
|
ffb764d2fcc5
[HgWeb] Updated hg web so it works
June Park <parkjune1995@gmail.com>
parents:
132
diff
changeset
|
459 // Store full query string for proxying |
|
ffb764d2fcc5
[HgWeb] Updated hg web so it works
June Park <parkjune1995@gmail.com>
parents:
132
diff
changeset
|
460 if (query_str && *query_str) |
|
ffb764d2fcc5
[HgWeb] Updated hg web so it works
June Park <parkjune1995@gmail.com>
parents:
132
diff
changeset
|
461 { |
|
ffb764d2fcc5
[HgWeb] Updated hg web so it works
June Park <parkjune1995@gmail.com>
parents:
132
diff
changeset
|
462 char *qs_copy = Dowa_Arena_Allocate(p_arena, strlen(query_str) + 1); |
|
ffb764d2fcc5
[HgWeb] Updated hg web so it works
June Park <parkjune1995@gmail.com>
parents:
132
diff
changeset
|
463 if (qs_copy) |
|
ffb764d2fcc5
[HgWeb] Updated hg web so it works
June Park <parkjune1995@gmail.com>
parents:
132
diff
changeset
|
464 { |
|
ffb764d2fcc5
[HgWeb] Updated hg web so it works
June Park <parkjune1995@gmail.com>
parents:
132
diff
changeset
|
465 strcpy(qs_copy, query_str); |
|
ffb764d2fcc5
[HgWeb] Updated hg web so it works
June Park <parkjune1995@gmail.com>
parents:
132
diff
changeset
|
466 Dowa_HashMap_Push_Arena(*pp_map, "QueryString", qs_copy, p_arena); |
|
ffb764d2fcc5
[HgWeb] Updated hg web so it works
June Park <parkjune1995@gmail.com>
parents:
132
diff
changeset
|
467 } |
|
ffb764d2fcc5
[HgWeb] Updated hg web so it works
June Park <parkjune1995@gmail.com>
parents:
132
diff
changeset
|
468 } |
|
ffb764d2fcc5
[HgWeb] Updated hg web so it works
June Park <parkjune1995@gmail.com>
parents:
132
diff
changeset
|
469 |
|
110
99c4530e4629
[Seobeo] Small Syntax fixes.
June Park <parkjune1995@gmail.com>
parents:
101
diff
changeset
|
470 // GET Params |
|
22
947b81010aba
[Dowa & Seobeo] Updated so that Dowa hashmaps can use arena and not be broken. Split up web so taht it can handle different paths. Also fixes issues with hash collisions which was pain in the ass.
June Park <parkjune1995@gmail.com>
parents:
21
diff
changeset
|
471 if (query_str && *query_str) |
|
947b81010aba
[Dowa & Seobeo] Updated so that Dowa hashmaps can use arena and not be broken. Split up web so taht it can handle different paths. Also fixes issues with hash collisions which was pain in the ass.
June Park <parkjune1995@gmail.com>
parents:
21
diff
changeset
|
472 { |
|
947b81010aba
[Dowa & Seobeo] Updated so that Dowa hashmaps can use arena and not be broken. Split up web so taht it can handle different paths. Also fixes issues with hash collisions which was pain in the ass.
June Park <parkjune1995@gmail.com>
parents:
21
diff
changeset
|
473 char *cur = query_str; |
|
947b81010aba
[Dowa & Seobeo] Updated so that Dowa hashmaps can use arena and not be broken. Split up web so taht it can handle different paths. Also fixes issues with hash collisions which was pain in the ass.
June Park <parkjune1995@gmail.com>
parents:
21
diff
changeset
|
474 while (cur && *cur) |
|
947b81010aba
[Dowa & Seobeo] Updated so that Dowa hashmaps can use arena and not be broken. Split up web so taht it can handle different paths. Also fixes issues with hash collisions which was pain in the ass.
June Park <parkjune1995@gmail.com>
parents:
21
diff
changeset
|
475 { |
|
947b81010aba
[Dowa & Seobeo] Updated so that Dowa hashmaps can use arena and not be broken. Split up web so taht it can handle different paths. Also fixes issues with hash collisions which was pain in the ass.
June Park <parkjune1995@gmail.com>
parents:
21
diff
changeset
|
476 char *next_amp = strchr(cur, '&'); |
|
947b81010aba
[Dowa & Seobeo] Updated so that Dowa hashmaps can use arena and not be broken. Split up web so taht it can handle different paths. Also fixes issues with hash collisions which was pain in the ass.
June Park <parkjune1995@gmail.com>
parents:
21
diff
changeset
|
477 char *pair_end = next_amp ? next_amp : cur + strlen(cur); |
|
71
75de5903355c
Giagantic changes that update Dowa library to be more align with stb style array and hashmap. Updated Seobeo to be caching on server side instead of file level caching. Deleted bunch of things I don't really use.
June Park <parkjune1995@gmail.com>
parents:
67
diff
changeset
|
478 |
|
22
947b81010aba
[Dowa & Seobeo] Updated so that Dowa hashmaps can use arena and not be broken. Split up web so taht it can handle different paths. Also fixes issues with hash collisions which was pain in the ass.
June Park <parkjune1995@gmail.com>
parents:
21
diff
changeset
|
479 char *eq = memchr(cur, '=', pair_end - cur); |
|
71
75de5903355c
Giagantic changes that update Dowa library to be more align with stb style array and hashmap. Updated Seobeo to be caching on server side instead of file level caching. Deleted bunch of things I don't really use.
June Park <parkjune1995@gmail.com>
parents:
67
diff
changeset
|
480 if (eq) |
|
75de5903355c
Giagantic changes that update Dowa library to be more align with stb style array and hashmap. Updated Seobeo to be caching on server side instead of file level caching. Deleted bunch of things I don't really use.
June Park <parkjune1995@gmail.com>
parents:
67
diff
changeset
|
481 { |
|
22
947b81010aba
[Dowa & Seobeo] Updated so that Dowa hashmaps can use arena and not be broken. Split up web so taht it can handle different paths. Also fixes issues with hash collisions which was pain in the ass.
June Park <parkjune1995@gmail.com>
parents:
21
diff
changeset
|
482 size_t key_len = eq - cur; |
|
947b81010aba
[Dowa & Seobeo] Updated so that Dowa hashmaps can use arena and not be broken. Split up web so taht it can handle different paths. Also fixes issues with hash collisions which was pain in the ass.
June Park <parkjune1995@gmail.com>
parents:
21
diff
changeset
|
483 size_t val_len = pair_end - (eq + 1); |
|
71
75de5903355c
Giagantic changes that update Dowa library to be more align with stb style array and hashmap. Updated Seobeo to be caching on server side instead of file level caching. Deleted bunch of things I don't really use.
June Park <parkjune1995@gmail.com>
parents:
67
diff
changeset
|
484 |
|
75de5903355c
Giagantic changes that update Dowa library to be more align with stb style array and hashmap. Updated Seobeo to be caching on server side instead of file level caching. Deleted bunch of things I don't really use.
June Park <parkjune1995@gmail.com>
parents:
67
diff
changeset
|
485 char key_buf[256]; |
|
110
99c4530e4629
[Seobeo] Small Syntax fixes.
June Park <parkjune1995@gmail.com>
parents:
101
diff
changeset
|
486 // Adding query_ in front to separate GET params |
|
71
75de5903355c
Giagantic changes that update Dowa library to be more align with stb style array and hashmap. Updated Seobeo to be caching on server side instead of file level caching. Deleted bunch of things I don't really use.
June Park <parkjune1995@gmail.com>
parents:
67
diff
changeset
|
487 snprintf(key_buf, sizeof(key_buf), "query_%.*s", (int)key_len, cur); |
|
75de5903355c
Giagantic changes that update Dowa library to be more align with stb style array and hashmap. Updated Seobeo to be caching on server side instead of file level caching. Deleted bunch of things I don't really use.
June Park <parkjune1995@gmail.com>
parents:
67
diff
changeset
|
488 |
|
75de5903355c
Giagantic changes that update Dowa library to be more align with stb style array and hashmap. Updated Seobeo to be caching on server side instead of file level caching. Deleted bunch of things I don't really use.
June Park <parkjune1995@gmail.com>
parents:
67
diff
changeset
|
489 char *val_copy = Dowa_Arena_Allocate(p_arena, val_len + 1); |
|
75de5903355c
Giagantic changes that update Dowa library to be more align with stb style array and hashmap. Updated Seobeo to be caching on server side instead of file level caching. Deleted bunch of things I don't really use.
June Park <parkjune1995@gmail.com>
parents:
67
diff
changeset
|
490 if (!val_copy) return -1; |
|
75de5903355c
Giagantic changes that update Dowa library to be more align with stb style array and hashmap. Updated Seobeo to be caching on server side instead of file level caching. Deleted bunch of things I don't really use.
June Park <parkjune1995@gmail.com>
parents:
67
diff
changeset
|
491 memcpy(val_copy, eq + 1, val_len); |
|
75de5903355c
Giagantic changes that update Dowa library to be more align with stb style array and hashmap. Updated Seobeo to be caching on server side instead of file level caching. Deleted bunch of things I don't really use.
June Park <parkjune1995@gmail.com>
parents:
67
diff
changeset
|
492 val_copy[val_len] = '\0'; |
|
75de5903355c
Giagantic changes that update Dowa library to be more align with stb style array and hashmap. Updated Seobeo to be caching on server side instead of file level caching. Deleted bunch of things I don't really use.
June Park <parkjune1995@gmail.com>
parents:
67
diff
changeset
|
493 |
|
75de5903355c
Giagantic changes that update Dowa library to be more align with stb style array and hashmap. Updated Seobeo to be caching on server side instead of file level caching. Deleted bunch of things I don't really use.
June Park <parkjune1995@gmail.com>
parents:
67
diff
changeset
|
494 Dowa_HashMap_Push_Arena(*pp_map, key_buf, val_copy, p_arena); |
|
22
947b81010aba
[Dowa & Seobeo] Updated so that Dowa hashmaps can use arena and not be broken. Split up web so taht it can handle different paths. Also fixes issues with hash collisions which was pain in the ass.
June Park <parkjune1995@gmail.com>
parents:
21
diff
changeset
|
495 } |
|
71
75de5903355c
Giagantic changes that update Dowa library to be more align with stb style array and hashmap. Updated Seobeo to be caching on server side instead of file level caching. Deleted bunch of things I don't really use.
June Park <parkjune1995@gmail.com>
parents:
67
diff
changeset
|
496 |
|
22
947b81010aba
[Dowa & Seobeo] Updated so that Dowa hashmaps can use arena and not be broken. Split up web so taht it can handle different paths. Also fixes issues with hash collisions which was pain in the ass.
June Park <parkjune1995@gmail.com>
parents:
21
diff
changeset
|
497 cur = next_amp ? next_amp + 1 : NULL; |
|
947b81010aba
[Dowa & Seobeo] Updated so that Dowa hashmaps can use arena and not be broken. Split up web so taht it can handle different paths. Also fixes issues with hash collisions which was pain in the ass.
June Park <parkjune1995@gmail.com>
parents:
21
diff
changeset
|
498 } |
|
947b81010aba
[Dowa & Seobeo] Updated so that Dowa hashmaps can use arena and not be broken. Split up web so taht it can handle different paths. Also fixes issues with hash collisions which was pain in the ass.
June Park <parkjune1995@gmail.com>
parents:
21
diff
changeset
|
499 } |
|
947b81010aba
[Dowa & Seobeo] Updated so that Dowa hashmaps can use arena and not be broken. Split up web so taht it can handle different paths. Also fixes issues with hash collisions which was pain in the ass.
June Park <parkjune1995@gmail.com>
parents:
21
diff
changeset
|
500 |
|
947b81010aba
[Dowa & Seobeo] Updated so that Dowa hashmaps can use arena and not be broken. Split up web so taht it can handle different paths. Also fixes issues with hash collisions which was pain in the ass.
June Park <parkjune1995@gmail.com>
parents:
21
diff
changeset
|
501 // int qp = Dowa_HashMap_Get_Position(map, "QueryParams"); |
|
65
ecb6ee6a22c3
[Misc] I will no longer drink cool aids of capital P.
June Park <parkjune1995@gmail.com>
parents:
62
diff
changeset
|
502 // Dowa_HashEntry *p_qp_entry = map->entries[qp]; |
|
22
947b81010aba
[Dowa & Seobeo] Updated so that Dowa hashmaps can use arena and not be broken. Split up web so taht it can handle different paths. Also fixes issues with hash collisions which was pain in the ass.
June Park <parkjune1995@gmail.com>
parents:
21
diff
changeset
|
503 // printf("query param key: %s\n", p_qp_entry->key); |
|
947b81010aba
[Dowa & Seobeo] Updated so that Dowa hashmaps can use arena and not be broken. Split up web so taht it can handle different paths. Also fixes issues with hash collisions which was pain in the ass.
June Park <parkjune1995@gmail.com>
parents:
21
diff
changeset
|
504 // printf("query param value: %s\n",(char *)Dowa_HashMap_Get(p_qp_entry->buffer, "hello")); |
|
947b81010aba
[Dowa & Seobeo] Updated so that Dowa hashmaps can use arena and not be broken. Split up web so taht it can handle different paths. Also fixes issues with hash collisions which was pain in the ass.
June Park <parkjune1995@gmail.com>
parents:
21
diff
changeset
|
505 |
|
110
99c4530e4629
[Seobeo] Small Syntax fixes.
June Park <parkjune1995@gmail.com>
parents:
101
diff
changeset
|
506 // Parse headers |
|
7
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
507 char *line = buf + strlen(method) + 1 + strlen(path) + 1 + strlen(version) + 2; |
|
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
508 while (line < hdr_end) |
|
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
509 { |
|
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
510 char *next = strstr(line, "\r\n"); |
|
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
511 if (!next) break; |
|
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
512 |
|
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
513 char *colon = memchr(line, ':', next - line); |
|
22
947b81010aba
[Dowa & Seobeo] Updated so that Dowa hashmaps can use arena and not be broken. Split up web so taht it can handle different paths. Also fixes issues with hash collisions which was pain in the ass.
June Park <parkjune1995@gmail.com>
parents:
21
diff
changeset
|
514 if (colon) |
|
947b81010aba
[Dowa & Seobeo] Updated so that Dowa hashmaps can use arena and not be broken. Split up web so taht it can handle different paths. Also fixes issues with hash collisions which was pain in the ass.
June Park <parkjune1995@gmail.com>
parents:
21
diff
changeset
|
515 { |
|
7
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
516 size_t key_len = colon - line; |
|
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
517 size_t value_len = next - colon - 1; |
|
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
518 |
|
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
519 char *val_start = colon + 1; |
|
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
520 if (*val_start == ' ') |
|
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
521 { |
|
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
522 val_start++; |
|
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
523 value_len--; |
|
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
524 } |
|
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
525 |
|
71
75de5903355c
Giagantic changes that update Dowa library to be more align with stb style array and hashmap. Updated Seobeo to be caching on server side instead of file level caching. Deleted bunch of things I don't really use.
June Park <parkjune1995@gmail.com>
parents:
67
diff
changeset
|
526 char *key = Dowa_Arena_Allocate(p_arena, key_len + 1); |
|
75de5903355c
Giagantic changes that update Dowa library to be more align with stb style array and hashmap. Updated Seobeo to be caching on server side instead of file level caching. Deleted bunch of things I don't really use.
June Park <parkjune1995@gmail.com>
parents:
67
diff
changeset
|
527 if (!key) return -1; |
|
7
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
528 memcpy(key, line, key_len); |
|
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
529 key[key_len] = '\0'; |
|
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
530 |
|
71
75de5903355c
Giagantic changes that update Dowa library to be more align with stb style array and hashmap. Updated Seobeo to be caching on server side instead of file level caching. Deleted bunch of things I don't really use.
June Park <parkjune1995@gmail.com>
parents:
67
diff
changeset
|
531 char *val = Dowa_Arena_Allocate(p_arena, value_len + 1); |
|
75de5903355c
Giagantic changes that update Dowa library to be more align with stb style array and hashmap. Updated Seobeo to be caching on server side instead of file level caching. Deleted bunch of things I don't really use.
June Park <parkjune1995@gmail.com>
parents:
67
diff
changeset
|
532 if (!val) return -1; |
|
7
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
533 memcpy(val, val_start, value_len); |
|
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
534 val[value_len] = '\0'; |
|
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
535 |
|
244
b8aa08503378
[tools] Add sandboxed online LaTeX editor
MrJuneJune <me@mrjunejune.com>
parents:
242
diff
changeset
|
536 Dowa_HashMap_Push_Arena( |
|
b8aa08503378
[tools] Add sandboxed online LaTeX editor
MrJuneJune <me@mrjunejune.com>
parents:
242
diff
changeset
|
537 *pp_map, |
|
b8aa08503378
[tools] Add sandboxed online LaTeX editor
MrJuneJune <me@mrjunejune.com>
parents:
242
diff
changeset
|
538 canonical_request_header(key), |
|
b8aa08503378
[tools] Add sandboxed online LaTeX editor
MrJuneJune <me@mrjunejune.com>
parents:
242
diff
changeset
|
539 val, |
|
b8aa08503378
[tools] Add sandboxed online LaTeX editor
MrJuneJune <me@mrjunejune.com>
parents:
242
diff
changeset
|
540 p_arena); |
|
7
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
541 } |
|
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
542 |
|
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
543 line = next + 2; |
|
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
544 } |
|
71
75de5903355c
Giagantic changes that update Dowa library to be more align with stb style array and hashmap. Updated Seobeo to be caching on server side instead of file level caching. Deleted bunch of things I don't really use.
June Park <parkjune1995@gmail.com>
parents:
67
diff
changeset
|
545 |
|
7
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
546 Seobeo_Handle_Consume(p_handle, (uint32)hdr_len); |
|
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
547 |
|
110
99c4530e4629
[Seobeo] Small Syntax fixes.
June Park <parkjune1995@gmail.com>
parents:
101
diff
changeset
|
548 // Reading Body |
|
71
75de5903355c
Giagantic changes that update Dowa library to be more align with stb style array and hashmap. Updated Seobeo to be caching on server side instead of file level caching. Deleted bunch of things I don't really use.
June Park <parkjune1995@gmail.com>
parents:
67
diff
changeset
|
549 void *p_cl_kv = Dowa_HashMap_Get_Ptr(*pp_map, "Content-Length"); |
|
75de5903355c
Giagantic changes that update Dowa library to be more align with stb style array and hashmap. Updated Seobeo to be caching on server side instead of file level caching. Deleted bunch of things I don't really use.
June Park <parkjune1995@gmail.com>
parents:
67
diff
changeset
|
550 if (p_cl_kv) |
|
7
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
551 { |
|
71
75de5903355c
Giagantic changes that update Dowa library to be more align with stb style array and hashmap. Updated Seobeo to be caching on server side instead of file level caching. Deleted bunch of things I don't really use.
June Park <parkjune1995@gmail.com>
parents:
67
diff
changeset
|
552 const char *content_length_str = ((Seobeo_Request_Entry*)p_cl_kv)->value; |
|
75de5903355c
Giagantic changes that update Dowa library to be more align with stb style array and hashmap. Updated Seobeo to be caching on server side instead of file level caching. Deleted bunch of things I don't really use.
June Park <parkjune1995@gmail.com>
parents:
67
diff
changeset
|
553 size_t body_len = atoi(content_length_str); |
|
92
655ea0b661fd
[Seobeo] Added few endpoints for handling files. [Dowa] Added few functions for random number and generating uuids
June Park <parkjune1995@gmail.com>
parents:
91
diff
changeset
|
554 |
| 96 | 555 Seobeo_Log(SEOBEO_DEBUG, "Content-Length=%zu, reading body in chunks...\n", body_len); |
|
92
655ea0b661fd
[Seobeo] Added few endpoints for handling files. [Dowa] Added few functions for random number and generating uuids
June Park <parkjune1995@gmail.com>
parents:
91
diff
changeset
|
556 |
|
655ea0b661fd
[Seobeo] Added few endpoints for handling files. [Dowa] Added few functions for random number and generating uuids
June Park <parkjune1995@gmail.com>
parents:
91
diff
changeset
|
557 char *body = Dowa_Arena_Allocate(p_arena, body_len + 1); |
|
655ea0b661fd
[Seobeo] Added few endpoints for handling files. [Dowa] Added few functions for random number and generating uuids
June Park <parkjune1995@gmail.com>
parents:
91
diff
changeset
|
558 if (!body) |
|
7
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
559 { |
| 96 | 560 Seobeo_Log(SEOBEO_ERROR, "Failed to allocate %zu bytes for body\n", body_len); |
|
92
655ea0b661fd
[Seobeo] Added few endpoints for handling files. [Dowa] Added few functions for random number and generating uuids
June Park <parkjune1995@gmail.com>
parents:
91
diff
changeset
|
561 return -1; |
|
7
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
562 } |
|
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
563 |
|
92
655ea0b661fd
[Seobeo] Added few endpoints for handling files. [Dowa] Added few functions for random number and generating uuids
June Park <parkjune1995@gmail.com>
parents:
91
diff
changeset
|
564 size_t total_read = 0; |
|
655ea0b661fd
[Seobeo] Added few endpoints for handling files. [Dowa] Added few functions for random number and generating uuids
June Park <parkjune1995@gmail.com>
parents:
91
diff
changeset
|
565 |
|
655ea0b661fd
[Seobeo] Added few endpoints for handling files. [Dowa] Added few functions for random number and generating uuids
June Park <parkjune1995@gmail.com>
parents:
91
diff
changeset
|
566 while (total_read < body_len) |
|
655ea0b661fd
[Seobeo] Added few endpoints for handling files. [Dowa] Added few functions for random number and generating uuids
June Park <parkjune1995@gmail.com>
parents:
91
diff
changeset
|
567 { |
|
655ea0b661fd
[Seobeo] Added few endpoints for handling files. [Dowa] Added few functions for random number and generating uuids
June Park <parkjune1995@gmail.com>
parents:
91
diff
changeset
|
568 size_t available = p_handle->read_buffer_len; |
|
655ea0b661fd
[Seobeo] Added few endpoints for handling files. [Dowa] Added few functions for random number and generating uuids
June Park <parkjune1995@gmail.com>
parents:
91
diff
changeset
|
569 size_t to_copy = (body_len - total_read) < available ? (body_len - total_read) : available; |
|
655ea0b661fd
[Seobeo] Added few endpoints for handling files. [Dowa] Added few functions for random number and generating uuids
June Park <parkjune1995@gmail.com>
parents:
91
diff
changeset
|
570 |
|
655ea0b661fd
[Seobeo] Added few endpoints for handling files. [Dowa] Added few functions for random number and generating uuids
June Park <parkjune1995@gmail.com>
parents:
91
diff
changeset
|
571 if (to_copy > 0) |
|
655ea0b661fd
[Seobeo] Added few endpoints for handling files. [Dowa] Added few functions for random number and generating uuids
June Park <parkjune1995@gmail.com>
parents:
91
diff
changeset
|
572 { |
|
655ea0b661fd
[Seobeo] Added few endpoints for handling files. [Dowa] Added few functions for random number and generating uuids
June Park <parkjune1995@gmail.com>
parents:
91
diff
changeset
|
573 memcpy(body + total_read, p_handle->read_buffer, to_copy); |
|
655ea0b661fd
[Seobeo] Added few endpoints for handling files. [Dowa] Added few functions for random number and generating uuids
June Park <parkjune1995@gmail.com>
parents:
91
diff
changeset
|
574 total_read += to_copy; |
|
655ea0b661fd
[Seobeo] Added few endpoints for handling files. [Dowa] Added few functions for random number and generating uuids
June Park <parkjune1995@gmail.com>
parents:
91
diff
changeset
|
575 Seobeo_Handle_Consume(p_handle, (uint32)to_copy); |
|
655ea0b661fd
[Seobeo] Added few endpoints for handling files. [Dowa] Added few functions for random number and generating uuids
June Park <parkjune1995@gmail.com>
parents:
91
diff
changeset
|
576 |
| 96 | 577 Seobeo_Log(SEOBEO_DEBUG, "Copied %zu bytes, total %zu/%zu\n", to_copy, total_read, body_len); |
|
92
655ea0b661fd
[Seobeo] Added few endpoints for handling files. [Dowa] Added few functions for random number and generating uuids
June Park <parkjune1995@gmail.com>
parents:
91
diff
changeset
|
578 } |
|
655ea0b661fd
[Seobeo] Added few endpoints for handling files. [Dowa] Added few functions for random number and generating uuids
June Park <parkjune1995@gmail.com>
parents:
91
diff
changeset
|
579 |
|
655ea0b661fd
[Seobeo] Added few endpoints for handling files. [Dowa] Added few functions for random number and generating uuids
June Park <parkjune1995@gmail.com>
parents:
91
diff
changeset
|
580 if (total_read < body_len) |
|
655ea0b661fd
[Seobeo] Added few endpoints for handling files. [Dowa] Added few functions for random number and generating uuids
June Park <parkjune1995@gmail.com>
parents:
91
diff
changeset
|
581 { |
|
655ea0b661fd
[Seobeo] Added few endpoints for handling files. [Dowa] Added few functions for random number and generating uuids
June Park <parkjune1995@gmail.com>
parents:
91
diff
changeset
|
582 int r = Seobeo_Handle_Read(p_handle); |
|
655ea0b661fd
[Seobeo] Added few endpoints for handling files. [Dowa] Added few functions for random number and generating uuids
June Park <parkjune1995@gmail.com>
parents:
91
diff
changeset
|
583 if (r < 0) |
|
655ea0b661fd
[Seobeo] Added few endpoints for handling files. [Dowa] Added few functions for random number and generating uuids
June Park <parkjune1995@gmail.com>
parents:
91
diff
changeset
|
584 { |
| 96 | 585 Seobeo_Log(SEOBEO_ERROR, "Read failed with %d\n", r); |
|
92
655ea0b661fd
[Seobeo] Added few endpoints for handling files. [Dowa] Added few functions for random number and generating uuids
June Park <parkjune1995@gmail.com>
parents:
91
diff
changeset
|
586 return -1; |
|
655ea0b661fd
[Seobeo] Added few endpoints for handling files. [Dowa] Added few functions for random number and generating uuids
June Park <parkjune1995@gmail.com>
parents:
91
diff
changeset
|
587 } |
|
655ea0b661fd
[Seobeo] Added few endpoints for handling files. [Dowa] Added few functions for random number and generating uuids
June Park <parkjune1995@gmail.com>
parents:
91
diff
changeset
|
588 if (r == 0) |
|
655ea0b661fd
[Seobeo] Added few endpoints for handling files. [Dowa] Added few functions for random number and generating uuids
June Park <parkjune1995@gmail.com>
parents:
91
diff
changeset
|
589 { |
|
655ea0b661fd
[Seobeo] Added few endpoints for handling files. [Dowa] Added few functions for random number and generating uuids
June Park <parkjune1995@gmail.com>
parents:
91
diff
changeset
|
590 // No data available yet, continue waiting |
|
655ea0b661fd
[Seobeo] Added few endpoints for handling files. [Dowa] Added few functions for random number and generating uuids
June Park <parkjune1995@gmail.com>
parents:
91
diff
changeset
|
591 // printf("DEBUG: Waiting for more data... (have %zu/%zu bytes)\n", total_read, body_len); |
|
655ea0b661fd
[Seobeo] Added few endpoints for handling files. [Dowa] Added few functions for random number and generating uuids
June Park <parkjune1995@gmail.com>
parents:
91
diff
changeset
|
592 continue; |
|
655ea0b661fd
[Seobeo] Added few endpoints for handling files. [Dowa] Added few functions for random number and generating uuids
June Park <parkjune1995@gmail.com>
parents:
91
diff
changeset
|
593 } |
|
655ea0b661fd
[Seobeo] Added few endpoints for handling files. [Dowa] Added few functions for random number and generating uuids
June Park <parkjune1995@gmail.com>
parents:
91
diff
changeset
|
594 } |
|
655ea0b661fd
[Seobeo] Added few endpoints for handling files. [Dowa] Added few functions for random number and generating uuids
June Park <parkjune1995@gmail.com>
parents:
91
diff
changeset
|
595 } |
|
655ea0b661fd
[Seobeo] Added few endpoints for handling files. [Dowa] Added few functions for random number and generating uuids
June Park <parkjune1995@gmail.com>
parents:
91
diff
changeset
|
596 |
|
7
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
597 body[body_len] = '\0'; |
| 96 | 598 Seobeo_Log(SEOBEO_DEBUG, "Body fully received (%zu bytes)\n", body_len); |
|
7
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
599 |
|
71
75de5903355c
Giagantic changes that update Dowa library to be more align with stb style array and hashmap. Updated Seobeo to be caching on server side instead of file level caching. Deleted bunch of things I don't really use.
June Park <parkjune1995@gmail.com>
parents:
67
diff
changeset
|
600 Dowa_HashMap_Push_Arena(*pp_map, "Body", body, p_arena); |
|
7
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
601 } |
|
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
602 |
|
110
99c4530e4629
[Seobeo] Small Syntax fixes.
June Park <parkjune1995@gmail.com>
parents:
101
diff
changeset
|
603 return 0; |
|
7
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
604 } |
|
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
605 |
|
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
606 void SigchildHandler(int s) |
|
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
607 { |
|
110
99c4530e4629
[Seobeo] Small Syntax fixes.
June Park <parkjune1995@gmail.com>
parents:
101
diff
changeset
|
608 (void)s; |
|
7
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
609 |
|
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
610 // waitpid() might overwrite errno, so we save and restore it: |
|
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
611 int saved_errno = errno; |
|
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
612 |
|
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
613 while(waitpid(-1, NULL, WNOHANG) > 0); |
|
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
614 |
|
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
615 errno = saved_errno; |
|
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
616 } |
|
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
617 |
|
19
875bb6e10db7
[Seobeo] Chaning Function naming to be easily readable.
June Park <parkjune1995@gmail.com>
parents:
18
diff
changeset
|
618 int Seobeo_Web_Server_Start( |
|
7
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
619 const char *folder_path, |
|
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
620 const char *port, |
|
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
621 Seobeo_ServerMode mode, |
|
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
622 int thread_count) |
|
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
623 { |
|
251
117c4d53c9a4
[ui] Add HTML-first Web Component system
MrJuneJune <me@mrjunejune.com>
parents:
244
diff
changeset
|
624 return Seobeo_Web_Server_Start_On( |
|
117c4d53c9a4
[ui] Add HTML-first Web Component system
MrJuneJune <me@mrjunejune.com>
parents:
244
diff
changeset
|
625 NULL, |
|
117c4d53c9a4
[ui] Add HTML-first Web Component system
MrJuneJune <me@mrjunejune.com>
parents:
244
diff
changeset
|
626 folder_path, |
|
117c4d53c9a4
[ui] Add HTML-first Web Component system
MrJuneJune <me@mrjunejune.com>
parents:
244
diff
changeset
|
627 port, |
|
117c4d53c9a4
[ui] Add HTML-first Web Component system
MrJuneJune <me@mrjunejune.com>
parents:
244
diff
changeset
|
628 mode, |
|
117c4d53c9a4
[ui] Add HTML-first Web Component system
MrJuneJune <me@mrjunejune.com>
parents:
244
diff
changeset
|
629 thread_count); |
|
117c4d53c9a4
[ui] Add HTML-first Web Component system
MrJuneJune <me@mrjunejune.com>
parents:
244
diff
changeset
|
630 } |
|
117c4d53c9a4
[ui] Add HTML-first Web Component system
MrJuneJune <me@mrjunejune.com>
parents:
244
diff
changeset
|
631 |
|
117c4d53c9a4
[ui] Add HTML-first Web Component system
MrJuneJune <me@mrjunejune.com>
parents:
244
diff
changeset
|
632 int Seobeo_Web_Server_Start_On( |
|
117c4d53c9a4
[ui] Add HTML-first Web Component system
MrJuneJune <me@mrjunejune.com>
parents:
244
diff
changeset
|
633 const char *host, |
|
117c4d53c9a4
[ui] Add HTML-first Web Component system
MrJuneJune <me@mrjunejune.com>
parents:
244
diff
changeset
|
634 const char *folder_path, |
|
117c4d53c9a4
[ui] Add HTML-first Web Component system
MrJuneJune <me@mrjunejune.com>
parents:
244
diff
changeset
|
635 const char *port, |
|
117c4d53c9a4
[ui] Add HTML-first Web Component system
MrJuneJune <me@mrjunejune.com>
parents:
244
diff
changeset
|
636 Seobeo_ServerMode mode, |
|
117c4d53c9a4
[ui] Add HTML-first Web Component system
MrJuneJune <me@mrjunejune.com>
parents:
244
diff
changeset
|
637 int thread_count) |
|
117c4d53c9a4
[ui] Add HTML-first Web Component system
MrJuneJune <me@mrjunejune.com>
parents:
244
diff
changeset
|
638 { |
|
71
75de5903355c
Giagantic changes that update Dowa library to be more align with stb style array and hashmap. Updated Seobeo to be caching on server side instead of file level caching. Deleted bunch of things I don't really use.
June Park <parkjune1995@gmail.com>
parents:
67
diff
changeset
|
639 if (folder_path) |
|
75de5903355c
Giagantic changes that update Dowa library to be more align with stb style array and hashmap. Updated Seobeo to be caching on server side instead of file level caching. Deleted bunch of things I don't really use.
June Park <parkjune1995@gmail.com>
parents:
67
diff
changeset
|
640 strncpy(g_folder_path, folder_path, sizeof(g_folder_path) - 1); |
|
75de5903355c
Giagantic changes that update Dowa library to be more align with stb style array and hashmap. Updated Seobeo to be caching on server side instead of file level caching. Deleted bunch of things I don't really use.
June Park <parkjune1995@gmail.com>
parents:
67
diff
changeset
|
641 |
|
75de5903355c
Giagantic changes that update Dowa library to be more align with stb style array and hashmap. Updated Seobeo to be caching on server side instead of file level caching. Deleted bunch of things I don't really use.
June Park <parkjune1995@gmail.com>
parents:
67
diff
changeset
|
642 Seobeo_Cache_Entry *p_html_cache = NULL; |
|
7
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
643 |
|
66
a0f0ad5e42eb
[Misc] taking out capital P stuff.
June Park <parkjune1995@gmail.com>
parents:
65
diff
changeset
|
644 Seobeo_Handle *p_server_handle = |
|
251
117c4d53c9a4
[ui] Add HTML-first Web Component system
MrJuneJune <me@mrjunejune.com>
parents:
244
diff
changeset
|
645 Seobeo_Stream_Handle_Server_Create(host, port); |
|
117c4d53c9a4
[ui] Add HTML-first Web Component system
MrJuneJune <me@mrjunejune.com>
parents:
244
diff
changeset
|
646 if (!p_server_handle || p_server_handle->socket < 0) |
|
117c4d53c9a4
[ui] Add HTML-first Web Component system
MrJuneJune <me@mrjunejune.com>
parents:
244
diff
changeset
|
647 { |
|
117c4d53c9a4
[ui] Add HTML-first Web Component system
MrJuneJune <me@mrjunejune.com>
parents:
244
diff
changeset
|
648 if (p_server_handle) |
|
117c4d53c9a4
[ui] Add HTML-first Web Component system
MrJuneJune <me@mrjunejune.com>
parents:
244
diff
changeset
|
649 Seobeo_Handle_Destroy(p_server_handle); |
|
117c4d53c9a4
[ui] Add HTML-first Web Component system
MrJuneJune <me@mrjunejune.com>
parents:
244
diff
changeset
|
650 return 1; |
|
117c4d53c9a4
[ui] Add HTML-first Web Component system
MrJuneJune <me@mrjunejune.com>
parents:
244
diff
changeset
|
651 } |
|
18
fa2b8af609d9
[Seobeo] Fixed a bug with pathing. Support SSL.
June Park <parkjune1995@gmail.com>
parents:
17
diff
changeset
|
652 |
| 96 | 653 Seobeo_Log(SEOBEO_INFO, "Listening on port %s\n", port); |
|
7
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
654 |
|
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
655 if (mode == SEOBEO_MODE_FORK) |
|
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
656 { |
| 96 | 657 Seobeo_Log(SEOBEO_INFO, "Server mode: FORK\n"); |
|
7
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
658 struct sigaction sa; |
|
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
659 sa.sa_handler = SigchildHandler; |
|
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
660 sigemptyset(&sa.sa_mask); |
|
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
661 sa.sa_flags = SA_RESTART; |
|
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
662 sigaction(SIGCHLD, &sa, NULL); |
|
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
663 |
|
34
6c322f9c2cb9
[Birthday] I didn't have nay time to buy birhtday present so w/e/
MrJuneJune <me@mrjunejune.com>
parents:
33
diff
changeset
|
664 while (1) |
|
6c322f9c2cb9
[Birthday] I didn't have nay time to buy birhtday present so w/e/
MrJuneJune <me@mrjunejune.com>
parents:
33
diff
changeset
|
665 { |
|
66
a0f0ad5e42eb
[Misc] taking out capital P stuff.
June Park <parkjune1995@gmail.com>
parents:
65
diff
changeset
|
666 Seobeo_Handle *p_cli_handle = |
|
19
875bb6e10db7
[Seobeo] Chaning Function naming to be easily readable.
June Park <parkjune1995@gmail.com>
parents:
18
diff
changeset
|
667 Seobeo_Stream_Handle_Server_Accept(p_server_handle); |
|
36
84672efec192
[Zenbu] WIP fixing issues regarding to using edge only. I think there is a problem where socket closes before sending back the info.
MrJuneJune <me@mrjunejune.com>
parents:
34
diff
changeset
|
668 if (!p_cli_handle) continue; |
|
7
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
669 |
|
16
fb2cff495a60
[Seobeo] Fixed the problem with edge server.
June Park <parkjune1995@gmail.com>
parents:
7
diff
changeset
|
670 if (fork() == 0) |
|
fb2cff495a60
[Seobeo] Fixed the problem with edge server.
June Park <parkjune1995@gmail.com>
parents:
7
diff
changeset
|
671 { |
|
183
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
672 Seobeo_Web_ClientHandle_Request(p_cli_handle, p_html_cache, FALSE); |
|
7
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
673 _exit(0); |
|
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
674 } |
|
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
675 } |
|
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
676 } |
|
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
677 |
|
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
678 if (mode == SEOBEO_MODE_EDGE) |
|
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
679 { |
| 96 | 680 Seobeo_Log(SEOBEO_INFO, "Server mode: EDGE\n"); |
|
62
ea9ef388ab97
[Seobeo] Fixed issues with epoll or kqeue in different threads. Initizlied the event looop inside of the thread itself.
June Park <parkjune1995@gmail.com>
parents:
36
diff
changeset
|
681 Seobeo_Web_Edge(p_server_handle, thread_count, p_html_cache); |
|
7
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
682 } |
|
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
683 |
|
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
684 return -1; |
|
114cad94008f
[Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
685 } |
| 17 | 686 |
| 96 | 687 /* Router logic */ |
| 688 struct Seobeo_Route_Struct { | |
| 689 char *method; // "GET", "POST", "PUT", "DELETE" | |
| 690 char *path_pattern; // "/v1/users/:id/posts/:post_id" | |
| 691 Seobeo_Route_Handler handler; | |
|
175
71ad34a8bc9a
[HgWeb] Can stream hg response now. Added react page for hg web since we use json anyway.
MrJuneJune <me@mrjunejune.com>
parents:
173
diff
changeset
|
692 Seobeo_Stream_Handler stream_handler; // For streaming responses |
| 96 | 693 |
| 694 // Pre-parsed path segments for efficient matching | |
| 695 char **path_segments; // ["v1", "users", ":id", "posts", ":post_id"] | |
| 696 boolean *is_param; // [false, false, true, false, true] | |
| 697 size_t segment_count; | |
| 698 }; | |
| 699 | |
| 700 static Seobeo_Route *g_routes = NULL; | |
| 701 | |
| 702 void Seobeo_Router_Init() | |
| 703 { | |
| 704 Dowa_Array_Reserve(g_routes, 20); | |
| 705 } | |
| 706 | |
| 707 void Seobeo_Router_Register(const char *method, const char *path_pattern, Seobeo_Route_Handler handler) | |
| 708 { | |
| 709 Seobeo_Route route = {0}; | |
| 710 | |
| 711 route.method = strdup(method); | |
| 712 route.path_pattern = strdup(path_pattern); | |
| 713 route.handler = handler; | |
|
175
71ad34a8bc9a
[HgWeb] Can stream hg response now. Added react page for hg web since we use json anyway.
MrJuneJune <me@mrjunejune.com>
parents:
173
diff
changeset
|
714 route.stream_handler = NULL; |
|
71ad34a8bc9a
[HgWeb] Can stream hg response now. Added react page for hg web since we use json anyway.
MrJuneJune <me@mrjunejune.com>
parents:
173
diff
changeset
|
715 route.path_segments = Dowa_String_Split(path_pattern, "/", strlen(path_pattern), 1, NULL); |
|
71ad34a8bc9a
[HgWeb] Can stream hg response now. Added react page for hg web since we use json anyway.
MrJuneJune <me@mrjunejune.com>
parents:
173
diff
changeset
|
716 route.segment_count = Dowa_Array_Length(route.path_segments); |
|
71ad34a8bc9a
[HgWeb] Can stream hg response now. Added react page for hg web since we use json anyway.
MrJuneJune <me@mrjunejune.com>
parents:
173
diff
changeset
|
717 route.is_param = (boolean*)malloc(sizeof(boolean) * route.segment_count); |
|
71ad34a8bc9a
[HgWeb] Can stream hg response now. Added react page for hg web since we use json anyway.
MrJuneJune <me@mrjunejune.com>
parents:
173
diff
changeset
|
718 |
|
71ad34a8bc9a
[HgWeb] Can stream hg response now. Added react page for hg web since we use json anyway.
MrJuneJune <me@mrjunejune.com>
parents:
173
diff
changeset
|
719 for (size_t i = 0; i < route.segment_count; i++) |
|
71ad34a8bc9a
[HgWeb] Can stream hg response now. Added react page for hg web since we use json anyway.
MrJuneJune <me@mrjunejune.com>
parents:
173
diff
changeset
|
720 route.is_param[i] = (route.path_segments[i][0] == ':'); |
|
71ad34a8bc9a
[HgWeb] Can stream hg response now. Added react page for hg web since we use json anyway.
MrJuneJune <me@mrjunejune.com>
parents:
173
diff
changeset
|
721 |
|
71ad34a8bc9a
[HgWeb] Can stream hg response now. Added react page for hg web since we use json anyway.
MrJuneJune <me@mrjunejune.com>
parents:
173
diff
changeset
|
722 Dowa_Array_Push(g_routes, route); |
|
71ad34a8bc9a
[HgWeb] Can stream hg response now. Added react page for hg web since we use json anyway.
MrJuneJune <me@mrjunejune.com>
parents:
173
diff
changeset
|
723 } |
|
71ad34a8bc9a
[HgWeb] Can stream hg response now. Added react page for hg web since we use json anyway.
MrJuneJune <me@mrjunejune.com>
parents:
173
diff
changeset
|
724 |
|
71ad34a8bc9a
[HgWeb] Can stream hg response now. Added react page for hg web since we use json anyway.
MrJuneJune <me@mrjunejune.com>
parents:
173
diff
changeset
|
725 void Seobeo_Router_Register_Stream(const char *method, const char *path_pattern, Seobeo_Stream_Handler handler) |
|
71ad34a8bc9a
[HgWeb] Can stream hg response now. Added react page for hg web since we use json anyway.
MrJuneJune <me@mrjunejune.com>
parents:
173
diff
changeset
|
726 { |
|
71ad34a8bc9a
[HgWeb] Can stream hg response now. Added react page for hg web since we use json anyway.
MrJuneJune <me@mrjunejune.com>
parents:
173
diff
changeset
|
727 Seobeo_Route route = {0}; |
|
71ad34a8bc9a
[HgWeb] Can stream hg response now. Added react page for hg web since we use json anyway.
MrJuneJune <me@mrjunejune.com>
parents:
173
diff
changeset
|
728 |
|
71ad34a8bc9a
[HgWeb] Can stream hg response now. Added react page for hg web since we use json anyway.
MrJuneJune <me@mrjunejune.com>
parents:
173
diff
changeset
|
729 route.method = strdup(method); |
|
71ad34a8bc9a
[HgWeb] Can stream hg response now. Added react page for hg web since we use json anyway.
MrJuneJune <me@mrjunejune.com>
parents:
173
diff
changeset
|
730 route.path_pattern = strdup(path_pattern); |
|
71ad34a8bc9a
[HgWeb] Can stream hg response now. Added react page for hg web since we use json anyway.
MrJuneJune <me@mrjunejune.com>
parents:
173
diff
changeset
|
731 route.handler = NULL; |
|
71ad34a8bc9a
[HgWeb] Can stream hg response now. Added react page for hg web since we use json anyway.
MrJuneJune <me@mrjunejune.com>
parents:
173
diff
changeset
|
732 route.stream_handler = handler; |
| 96 | 733 route.path_segments = Dowa_String_Split(path_pattern, "/", strlen(path_pattern), 1, NULL); |
| 734 route.segment_count = Dowa_Array_Length(route.path_segments); | |
| 735 route.is_param = (boolean*)malloc(sizeof(boolean) * route.segment_count); | |
| 736 | |
| 737 for (size_t i = 0; i < route.segment_count; i++) | |
| 738 route.is_param[i] = (route.path_segments[i][0] == ':'); | |
| 739 | |
| 740 Dowa_Array_Push(g_routes, route); | |
| 741 } | |
| 742 | |
| 743 static boolean match_route_and_extract( | |
| 744 Seobeo_Route *route, | |
| 745 const char *request_path, | |
| 746 Seobeo_Request_Entry **pp_request_map, | |
| 747 Dowa_Arena *p_arena) | |
| 748 { | |
| 749 Dowa_Arena *p_temp_arena = Dowa_Arena_Create(1024); | |
| 750 char **request_segments = Dowa_String_Split(request_path, "/", strlen(request_path), 1, p_temp_arena); | |
| 751 size_t request_segment_count = Dowa_Array_Length(request_segments); | |
|
110
99c4530e4629
[Seobeo] Small Syntax fixes.
June Park <parkjune1995@gmail.com>
parents:
101
diff
changeset
|
752 |
| 96 | 753 // Check segment count matches |
| 754 if (request_segment_count != route->segment_count) | |
| 755 { | |
| 756 Dowa_Arena_Free(p_temp_arena); | |
| 757 return FALSE; | |
| 758 } | |
| 759 | |
| 760 for (size_t i = 0; i < route->segment_count; i++) | |
| 761 { | |
| 762 // parameters | |
| 763 if (route->is_param[i]) | |
| 764 { | |
| 765 char *param_name = route->path_segments[i]; // e.g., ":id" | |
| 766 char *param_value = request_segments[i]; // e.g., "123" | |
| 767 | |
| 768 // Should Copy to arena | |
| 769 char *key = Dowa_String_Copy_Arena(param_name, p_arena); | |
| 770 char *value = Dowa_String_Copy_Arena(param_value, p_arena); | |
| 771 Dowa_HashMap_Push_Arena(*pp_request_map, key, value, p_arena); | |
| 772 } | |
| 773 else | |
| 774 { | |
| 775 // Does not match. | |
| 776 if (strcmp(route->path_segments[i], request_segments[i]) != 0) | |
| 777 { | |
| 778 Dowa_Arena_Free(p_temp_arena); | |
| 779 return FALSE; | |
| 780 } | |
| 781 } | |
| 782 } | |
| 783 | |
| 784 Dowa_Arena_Free(p_temp_arena); | |
| 785 return TRUE; | |
| 786 } | |
| 787 | |
| 788 Seobeo_Route_Handler Seobeo_Router_Find_Handler(const char *method, | |
| 789 const char *path, | |
| 790 Seobeo_Request_Entry **pp_request_map, | |
| 791 Dowa_Arena *p_arena) { | |
| 792 if (g_routes == NULL) | |
| 793 { | |
| 794 return NULL; | |
| 795 } | |
| 796 | |
| 797 size_t route_count = Dowa_Array_Length(g_routes); | |
| 798 for (size_t i = 0; i < route_count; i++) | |
| 799 { | |
| 800 Seobeo_Route *route = &g_routes[i]; | |
| 801 if (strcmp(route->method, method) != 0) | |
| 802 { | |
| 803 continue; | |
| 804 } | |
| 805 | |
| 806 if (match_route_and_extract(route, path, pp_request_map, p_arena)) | |
| 807 { | |
| 808 return route->handler; | |
| 809 } | |
| 810 } | |
| 811 | |
| 812 return NULL; | |
| 813 } | |
| 814 | |
|
175
71ad34a8bc9a
[HgWeb] Can stream hg response now. Added react page for hg web since we use json anyway.
MrJuneJune <me@mrjunejune.com>
parents:
173
diff
changeset
|
815 Seobeo_Stream_Handler Seobeo_Router_Find_Stream_Handler( |
|
71ad34a8bc9a
[HgWeb] Can stream hg response now. Added react page for hg web since we use json anyway.
MrJuneJune <me@mrjunejune.com>
parents:
173
diff
changeset
|
816 const char *method, |
|
71ad34a8bc9a
[HgWeb] Can stream hg response now. Added react page for hg web since we use json anyway.
MrJuneJune <me@mrjunejune.com>
parents:
173
diff
changeset
|
817 const char *path, |
|
71ad34a8bc9a
[HgWeb] Can stream hg response now. Added react page for hg web since we use json anyway.
MrJuneJune <me@mrjunejune.com>
parents:
173
diff
changeset
|
818 Seobeo_Request_Entry **pp_request_map, |
|
71ad34a8bc9a
[HgWeb] Can stream hg response now. Added react page for hg web since we use json anyway.
MrJuneJune <me@mrjunejune.com>
parents:
173
diff
changeset
|
819 Dowa_Arena *p_arena) |
|
71ad34a8bc9a
[HgWeb] Can stream hg response now. Added react page for hg web since we use json anyway.
MrJuneJune <me@mrjunejune.com>
parents:
173
diff
changeset
|
820 { |
|
71ad34a8bc9a
[HgWeb] Can stream hg response now. Added react page for hg web since we use json anyway.
MrJuneJune <me@mrjunejune.com>
parents:
173
diff
changeset
|
821 if (g_routes == NULL || method == NULL || path == NULL) |
|
71ad34a8bc9a
[HgWeb] Can stream hg response now. Added react page for hg web since we use json anyway.
MrJuneJune <me@mrjunejune.com>
parents:
173
diff
changeset
|
822 return NULL; |
|
71ad34a8bc9a
[HgWeb] Can stream hg response now. Added react page for hg web since we use json anyway.
MrJuneJune <me@mrjunejune.com>
parents:
173
diff
changeset
|
823 |
|
71ad34a8bc9a
[HgWeb] Can stream hg response now. Added react page for hg web since we use json anyway.
MrJuneJune <me@mrjunejune.com>
parents:
173
diff
changeset
|
824 size_t route_count = Dowa_Array_Length(g_routes); |
|
71ad34a8bc9a
[HgWeb] Can stream hg response now. Added react page for hg web since we use json anyway.
MrJuneJune <me@mrjunejune.com>
parents:
173
diff
changeset
|
825 for (size_t i = 0; i < route_count; i++) |
|
71ad34a8bc9a
[HgWeb] Can stream hg response now. Added react page for hg web since we use json anyway.
MrJuneJune <me@mrjunejune.com>
parents:
173
diff
changeset
|
826 { |
|
71ad34a8bc9a
[HgWeb] Can stream hg response now. Added react page for hg web since we use json anyway.
MrJuneJune <me@mrjunejune.com>
parents:
173
diff
changeset
|
827 Seobeo_Route *route = &g_routes[i]; |
|
71ad34a8bc9a
[HgWeb] Can stream hg response now. Added react page for hg web since we use json anyway.
MrJuneJune <me@mrjunejune.com>
parents:
173
diff
changeset
|
828 if (strcmp(route->method, method) != 0) |
|
71ad34a8bc9a
[HgWeb] Can stream hg response now. Added react page for hg web since we use json anyway.
MrJuneJune <me@mrjunejune.com>
parents:
173
diff
changeset
|
829 continue; |
|
71ad34a8bc9a
[HgWeb] Can stream hg response now. Added react page for hg web since we use json anyway.
MrJuneJune <me@mrjunejune.com>
parents:
173
diff
changeset
|
830 |
|
71ad34a8bc9a
[HgWeb] Can stream hg response now. Added react page for hg web since we use json anyway.
MrJuneJune <me@mrjunejune.com>
parents:
173
diff
changeset
|
831 if (route->stream_handler && match_route_and_extract(route, path, pp_request_map, p_arena)) |
|
71ad34a8bc9a
[HgWeb] Can stream hg response now. Added react page for hg web since we use json anyway.
MrJuneJune <me@mrjunejune.com>
parents:
173
diff
changeset
|
832 return route->stream_handler; |
|
71ad34a8bc9a
[HgWeb] Can stream hg response now. Added react page for hg web since we use json anyway.
MrJuneJune <me@mrjunejune.com>
parents:
173
diff
changeset
|
833 } |
|
71ad34a8bc9a
[HgWeb] Can stream hg response now. Added react page for hg web since we use json anyway.
MrJuneJune <me@mrjunejune.com>
parents:
173
diff
changeset
|
834 |
|
71ad34a8bc9a
[HgWeb] Can stream hg response now. Added react page for hg web since we use json anyway.
MrJuneJune <me@mrjunejune.com>
parents:
173
diff
changeset
|
835 return NULL; |
|
71ad34a8bc9a
[HgWeb] Can stream hg response now. Added react page for hg web since we use json anyway.
MrJuneJune <me@mrjunejune.com>
parents:
173
diff
changeset
|
836 } |
|
71ad34a8bc9a
[HgWeb] Can stream hg response now. Added react page for hg web since we use json anyway.
MrJuneJune <me@mrjunejune.com>
parents:
173
diff
changeset
|
837 |
| 96 | 838 void Seobeo_Router_Send_Response( |
| 839 Seobeo_Handle *p_handle, | |
| 840 Seobeo_Request_Entry *p_response_map, | |
| 841 Dowa_Arena *p_arena) | |
| 842 { | |
|
183
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
843 Seobeo_Router_Send_Response_KeepAlive(p_handle, p_response_map, p_arena, FALSE); |
|
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
844 } |
|
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
845 |
|
221
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
187
diff
changeset
|
846 static boolean Seobeo_Response_Header_Value_Is_Safe(const char *value) |
|
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
187
diff
changeset
|
847 { |
|
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
187
diff
changeset
|
848 return value && strchr(value, '\r') == NULL && strchr(value, '\n') == NULL; |
|
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
187
diff
changeset
|
849 } |
|
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
187
diff
changeset
|
850 |
|
183
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
851 void Seobeo_Router_Send_Response_KeepAlive( |
|
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
852 Seobeo_Handle *p_handle, |
|
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
853 Seobeo_Request_Entry *p_response_map, |
|
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
854 Dowa_Arena *p_arena, |
|
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
855 boolean keep_alive) |
|
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
856 { |
| 96 | 857 if (p_response_map == NULL) |
| 858 { | |
| 859 char *header = Dowa_Arena_Allocate(p_arena, 1024); | |
|
183
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
860 Seobeo_Web_Header_Generate_KeepAlive(header, HTTP_INTERNAL_ERROR, "text/plain", 21, keep_alive); |
| 96 | 861 Seobeo_Handle_Queue(p_handle, (uint8_t*)header, strlen(header)); |
| 862 Seobeo_Handle_Queue(p_handle, (uint8_t*)"Internal Server Error", 21); | |
| 863 Seobeo_Handle_Flush(p_handle); | |
| 864 return; | |
| 865 } | |
| 866 | |
| 867 int status = HTTP_OK; | |
| 868 void *p_status_kv = Dowa_HashMap_Get_Ptr(p_response_map, "status"); | |
| 869 if (p_status_kv) | |
| 870 { | |
| 871 const char *status_str = ((Seobeo_Request_Entry*)p_status_kv)->value; | |
| 872 status = atoi(status_str); | |
| 873 } | |
| 874 | |
| 875 const char *body = ""; | |
| 876 void *p_body_kv = Dowa_HashMap_Get_Ptr(p_response_map, "body"); | |
| 877 if (p_body_kv) | |
| 878 body = ((Seobeo_Request_Entry*)p_body_kv)->value; | |
| 879 | |
| 880 const char *content_type = "text/html"; | |
| 881 void *p_content_type_kv = Dowa_HashMap_Get_Ptr(p_response_map, "content-type"); | |
| 882 if (p_content_type_kv) | |
| 883 content_type = ((Seobeo_Request_Entry*)p_content_type_kv)->value; | |
| 884 | |
|
175
71ad34a8bc9a
[HgWeb] Can stream hg response now. Added react page for hg web since we use json anyway.
MrJuneJune <me@mrjunejune.com>
parents:
173
diff
changeset
|
885 // TODO: Update this to be integer |
|
71ad34a8bc9a
[HgWeb] Can stream hg response now. Added react page for hg web since we use json anyway.
MrJuneJune <me@mrjunejune.com>
parents:
173
diff
changeset
|
886 size_t body_length; |
| 96 | 887 void *p_content_length_kv = Dowa_HashMap_Get_Ptr(p_response_map, "content-length"); |
| 888 if (p_content_length_kv) | |
| 889 { | |
| 890 const char *content_length_str = ((Seobeo_Request_Entry*)p_content_length_kv)->value; | |
| 891 body_length = atoi(content_length_str); | |
| 892 } | |
|
175
71ad34a8bc9a
[HgWeb] Can stream hg response now. Added react page for hg web since we use json anyway.
MrJuneJune <me@mrjunejune.com>
parents:
173
diff
changeset
|
893 else |
|
71ad34a8bc9a
[HgWeb] Can stream hg response now. Added react page for hg web since we use json anyway.
MrJuneJune <me@mrjunejune.com>
parents:
173
diff
changeset
|
894 body_length = strlen(body); |
| 96 | 895 |
|
221
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
187
diff
changeset
|
896 size_t header_capacity = 1024; |
| 96 | 897 for (int i = 0; i < Dowa_Array_Length(p_response_map); i++) |
| 898 { | |
|
221
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
187
diff
changeset
|
899 const char *key = p_response_map[i].key; |
|
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
187
diff
changeset
|
900 const char *value = p_response_map[i].value; |
| 96 | 901 if ( |
|
221
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
187
diff
changeset
|
902 strcasecmp(key, "status") == 0 || |
|
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
187
diff
changeset
|
903 strcasecmp(key, "body") == 0 || |
|
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
187
diff
changeset
|
904 strcasecmp(key, "content-type") == 0 || |
|
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
187
diff
changeset
|
905 strcasecmp(key, "content-length") == 0 |
|
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
187
diff
changeset
|
906 ) |
|
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
187
diff
changeset
|
907 continue; |
|
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
187
diff
changeset
|
908 if (Seobeo_Response_Header_Value_Is_Safe(key) && |
|
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
187
diff
changeset
|
909 Seobeo_Response_Header_Value_Is_Safe(value)) |
|
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
187
diff
changeset
|
910 header_capacity += strlen(key) + strlen(value) + 4; |
|
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
187
diff
changeset
|
911 } |
|
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
187
diff
changeset
|
912 |
|
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
187
diff
changeset
|
913 char *header = Dowa_Arena_Allocate(p_arena, header_capacity); |
|
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
187
diff
changeset
|
914 Seobeo_Web_Header_Generate_KeepAlive(header, status, content_type, body_length, keep_alive); |
|
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
187
diff
changeset
|
915 size_t header_length = strlen(header); |
|
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
187
diff
changeset
|
916 if (header_length < 2) |
|
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
187
diff
changeset
|
917 return; |
|
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
187
diff
changeset
|
918 header_length -= 2; |
|
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
187
diff
changeset
|
919 |
|
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
187
diff
changeset
|
920 for (int i = 0; i < Dowa_Array_Length(p_response_map); i++) |
|
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
187
diff
changeset
|
921 { |
|
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
187
diff
changeset
|
922 const char *key = p_response_map[i].key; |
|
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
187
diff
changeset
|
923 const char *value = p_response_map[i].value; |
|
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
187
diff
changeset
|
924 if ( |
|
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
187
diff
changeset
|
925 strcasecmp(key, "status") == 0 || |
|
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
187
diff
changeset
|
926 strcasecmp(key, "body") == 0 || |
|
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
187
diff
changeset
|
927 strcasecmp(key, "content-type") == 0 || |
|
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
187
diff
changeset
|
928 strcasecmp(key, "content-length") == 0 |
| 96 | 929 ) |
| 930 continue; | |
| 931 | |
|
221
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
187
diff
changeset
|
932 if (!Seobeo_Response_Header_Value_Is_Safe(key) || |
|
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
187
diff
changeset
|
933 !Seobeo_Response_Header_Value_Is_Safe(value)) |
|
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
187
diff
changeset
|
934 { |
|
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
187
diff
changeset
|
935 Seobeo_Log(SEOBEO_WARNING, "Skipping unsafe response header\n"); |
|
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
187
diff
changeset
|
936 continue; |
|
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
187
diff
changeset
|
937 } |
|
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
187
diff
changeset
|
938 |
|
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
187
diff
changeset
|
939 int written = snprintf( |
|
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
187
diff
changeset
|
940 header + header_length, |
|
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
187
diff
changeset
|
941 header_capacity - header_length, |
|
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
187
diff
changeset
|
942 "%s: %s\r\n", |
|
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
187
diff
changeset
|
943 key, |
|
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
187
diff
changeset
|
944 value); |
|
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
187
diff
changeset
|
945 if (written < 0 || (size_t)written >= header_capacity - header_length) |
|
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
187
diff
changeset
|
946 { |
|
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
187
diff
changeset
|
947 Seobeo_Log(SEOBEO_ERROR, "Response header exceeded allocated capacity\n"); |
|
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
187
diff
changeset
|
948 return; |
|
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
187
diff
changeset
|
949 } |
|
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
187
diff
changeset
|
950 header_length += (size_t)written; |
| 96 | 951 } |
|
221
ce7f4400c2de
[hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents:
187
diff
changeset
|
952 memcpy(header + header_length, "\r\n", 3); |
|
175
71ad34a8bc9a
[HgWeb] Can stream hg response now. Added react page for hg web since we use json anyway.
MrJuneJune <me@mrjunejune.com>
parents:
173
diff
changeset
|
953 |
| 96 | 954 Seobeo_Handle_Queue(p_handle, (uint8_t*)header, strlen(header)); |
|
183
a8976a008a9d
[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents:
154
diff
changeset
|
955 Seobeo_Handle_Queue(p_handle, (uint8_t*)body, body_length); |
| 96 | 956 Seobeo_Handle_Flush(p_handle); |
| 957 } | |
| 958 | |
| 959 void Seobeo_Router_Destroy() | |
| 960 { | |
| 961 if (g_routes == NULL) | |
| 962 return; | |
| 963 | |
| 964 size_t route_count = Dowa_Array_Length(g_routes); | |
| 965 for (size_t i = 0; i < route_count; i++) | |
| 966 { | |
| 967 Seobeo_Route *route = &g_routes[i]; | |
| 968 if (route->method) free(route->method); | |
| 969 if (route->path_pattern) free(route->path_pattern); | |
| 970 if (route->path_segments) Dowa_Array_Free(route->path_segments); | |
| 971 if (route->is_param) free(route->is_param); | |
| 972 } | |
| 973 Dowa_Array_Free(g_routes); | |
| 974 g_routes = NULL; | |
| 975 } | |
| 976 | |
|
147
6de849867459
[HgWeb] Updated logic to use Seobeo Client.
June Park <parkjune1995@gmail.com>
parents:
141
diff
changeset
|
977 // Written by AI. I don't know what it does. |
|
6de849867459
[HgWeb] Updated logic to use Seobeo Client.
June Park <parkjune1995@gmail.com>
parents:
141
diff
changeset
|
978 void Seobeo_Url_Decode(char *dst, const char *src) |
|
6de849867459
[HgWeb] Updated logic to use Seobeo Client.
June Park <parkjune1995@gmail.com>
parents:
141
diff
changeset
|
979 { |
|
6de849867459
[HgWeb] Updated logic to use Seobeo Client.
June Park <parkjune1995@gmail.com>
parents:
141
diff
changeset
|
980 char a, b; |
|
6de849867459
[HgWeb] Updated logic to use Seobeo Client.
June Park <parkjune1995@gmail.com>
parents:
141
diff
changeset
|
981 while (*src) { |
|
6de849867459
[HgWeb] Updated logic to use Seobeo Client.
June Park <parkjune1995@gmail.com>
parents:
141
diff
changeset
|
982 /* Check if we have a % followed by two valid hex characters */ |
|
6de849867459
[HgWeb] Updated logic to use Seobeo Client.
June Park <parkjune1995@gmail.com>
parents:
141
diff
changeset
|
983 if (*src == '%' && src[1] && src[2]) { |
|
6de849867459
[HgWeb] Updated logic to use Seobeo Client.
June Park <parkjune1995@gmail.com>
parents:
141
diff
changeset
|
984 a = src[1]; |
|
6de849867459
[HgWeb] Updated logic to use Seobeo Client.
June Park <parkjune1995@gmail.com>
parents:
141
diff
changeset
|
985 b = src[2]; |
|
6de849867459
[HgWeb] Updated logic to use Seobeo Client.
June Park <parkjune1995@gmail.com>
parents:
141
diff
changeset
|
986 |
|
6de849867459
[HgWeb] Updated logic to use Seobeo Client.
June Park <parkjune1995@gmail.com>
parents:
141
diff
changeset
|
987 /* Manual isxdigit check and conversion for 'a' */ |
|
6de849867459
[HgWeb] Updated logic to use Seobeo Client.
June Park <parkjune1995@gmail.com>
parents:
141
diff
changeset
|
988 int a_val = -1; |
|
6de849867459
[HgWeb] Updated logic to use Seobeo Client.
June Park <parkjune1995@gmail.com>
parents:
141
diff
changeset
|
989 if (a >= '0' && a <= '9') a_val = a - '0'; |
|
6de849867459
[HgWeb] Updated logic to use Seobeo Client.
June Park <parkjune1995@gmail.com>
parents:
141
diff
changeset
|
990 else if (a >= 'a' && a <= 'f') a_val = a - 'a' + 10; |
|
6de849867459
[HgWeb] Updated logic to use Seobeo Client.
June Park <parkjune1995@gmail.com>
parents:
141
diff
changeset
|
991 else if (a >= 'A' && a <= 'F') a_val = a - 'A' + 10; |
| 96 | 992 |
|
147
6de849867459
[HgWeb] Updated logic to use Seobeo Client.
June Park <parkjune1995@gmail.com>
parents:
141
diff
changeset
|
993 /* Manual isxdigit check and conversion for 'b' */ |
|
6de849867459
[HgWeb] Updated logic to use Seobeo Client.
June Park <parkjune1995@gmail.com>
parents:
141
diff
changeset
|
994 int b_val = -1; |
|
6de849867459
[HgWeb] Updated logic to use Seobeo Client.
June Park <parkjune1995@gmail.com>
parents:
141
diff
changeset
|
995 if (b >= '0' && b <= '9') b_val = b - '0'; |
|
6de849867459
[HgWeb] Updated logic to use Seobeo Client.
June Park <parkjune1995@gmail.com>
parents:
141
diff
changeset
|
996 else if (b >= 'a' && b <= 'f') b_val = b - 'a' + 10; |
|
6de849867459
[HgWeb] Updated logic to use Seobeo Client.
June Park <parkjune1995@gmail.com>
parents:
141
diff
changeset
|
997 else if (b >= 'A' && b <= 'F') b_val = b - 'A' + 10; |
|
6de849867459
[HgWeb] Updated logic to use Seobeo Client.
June Park <parkjune1995@gmail.com>
parents:
141
diff
changeset
|
998 |
|
6de849867459
[HgWeb] Updated logic to use Seobeo Client.
June Park <parkjune1995@gmail.com>
parents:
141
diff
changeset
|
999 /* If both were valid hex, combine them */ |
|
6de849867459
[HgWeb] Updated logic to use Seobeo Client.
June Park <parkjune1995@gmail.com>
parents:
141
diff
changeset
|
1000 if (a_val != -1 && b_val != -1) { |
|
6de849867459
[HgWeb] Updated logic to use Seobeo Client.
June Park <parkjune1995@gmail.com>
parents:
141
diff
changeset
|
1001 *dst++ = (char)((a_val << 4) | b_val); |
|
6de849867459
[HgWeb] Updated logic to use Seobeo Client.
June Park <parkjune1995@gmail.com>
parents:
141
diff
changeset
|
1002 src += 3; |
|
6de849867459
[HgWeb] Updated logic to use Seobeo Client.
June Park <parkjune1995@gmail.com>
parents:
141
diff
changeset
|
1003 continue; |
|
6de849867459
[HgWeb] Updated logic to use Seobeo Client.
June Park <parkjune1995@gmail.com>
parents:
141
diff
changeset
|
1004 } |
|
6de849867459
[HgWeb] Updated logic to use Seobeo Client.
June Park <parkjune1995@gmail.com>
parents:
141
diff
changeset
|
1005 } |
|
6de849867459
[HgWeb] Updated logic to use Seobeo Client.
June Park <parkjune1995@gmail.com>
parents:
141
diff
changeset
|
1006 |
|
6de849867459
[HgWeb] Updated logic to use Seobeo Client.
June Park <parkjune1995@gmail.com>
parents:
141
diff
changeset
|
1007 /* Handle '+' as space, otherwise copy character literally */ |
|
6de849867459
[HgWeb] Updated logic to use Seobeo Client.
June Park <parkjune1995@gmail.com>
parents:
141
diff
changeset
|
1008 if (*src == '+') { |
|
6de849867459
[HgWeb] Updated logic to use Seobeo Client.
June Park <parkjune1995@gmail.com>
parents:
141
diff
changeset
|
1009 *dst++ = ' '; |
|
6de849867459
[HgWeb] Updated logic to use Seobeo Client.
June Park <parkjune1995@gmail.com>
parents:
141
diff
changeset
|
1010 } else { |
|
6de849867459
[HgWeb] Updated logic to use Seobeo Client.
June Park <parkjune1995@gmail.com>
parents:
141
diff
changeset
|
1011 *dst++ = *src; |
|
6de849867459
[HgWeb] Updated logic to use Seobeo Client.
June Park <parkjune1995@gmail.com>
parents:
141
diff
changeset
|
1012 } |
|
6de849867459
[HgWeb] Updated logic to use Seobeo Client.
June Park <parkjune1995@gmail.com>
parents:
141
diff
changeset
|
1013 src++; |
|
6de849867459
[HgWeb] Updated logic to use Seobeo Client.
June Park <parkjune1995@gmail.com>
parents:
141
diff
changeset
|
1014 } |
|
6de849867459
[HgWeb] Updated logic to use Seobeo Client.
June Park <parkjune1995@gmail.com>
parents:
141
diff
changeset
|
1015 *dst = '\0'; |
|
6de849867459
[HgWeb] Updated logic to use Seobeo Client.
June Park <parkjune1995@gmail.com>
parents:
141
diff
changeset
|
1016 } |