annotate seobeo/s_web.c @ 221:ce7f4400c2de hg-web

[hg-web] Harden forge and add changeset UI
author MrJuneJune <me@mrjunejune.com>
date Sun, 02 Aug 2026 09:01:24 -0700
parents a69485d9f2e1
children 0e7b9464248d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
77
c348ac875294 [Seobeo] Server side rendering.
June Park <parkjune1995@gmail.com>
parents: 76
diff changeset
7 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
8 {
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
9 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
10 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
11
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
12 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
13 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
14 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
15
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
16 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
17 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
18 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
19
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
20 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
21 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
22 {
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
23 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
24 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
25 }
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
26
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
27 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
28 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
29 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
30
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
31 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
32 *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
33
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
34 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
35 }
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
36
76
35b1abc37969 Updating my website to use seobeo library.
June Park <parkjune1995@gmail.com>
parents: 72
diff changeset
37 void Seobeo_Web_Header_Generate(
35b1abc37969 Updating my website to use seobeo library.
June Park <parkjune1995@gmail.com>
parents: 72
diff changeset
38 void *buffer, int status,
35b1abc37969 Updating my website to use seobeo library.
June Park <parkjune1995@gmail.com>
parents: 72
diff changeset
39 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
40 {
183
a8976a008a9d [BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents: 154
diff changeset
41 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
42 }
a8976a008a9d [BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents: 154
diff changeset
43
a8976a008a9d [BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents: 154
diff changeset
44 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
45 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
46 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
47 boolean keep_alive)
a8976a008a9d [BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents: 154
diff changeset
48 {
7
114cad94008f [Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
49 const char *status_text;
114cad94008f [Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
50 switch(status)
114cad94008f [Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
51 {
114cad94008f [Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
52 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
53 case HTTP_CREATED: status_text = "Created"; break;
114cad94008f [Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
54 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
55 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
56 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
57 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
58 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
59 case HTTP_NOT_FOUND: status_text = "Not Found"; break;
114cad94008f [Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
60 case HTTP_INTERNAL_ERROR: status_text = "Internal Server Error"; break;
221
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 187
diff changeset
61 case 502: status_text = "Bad Gateway"; break;
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 187
diff changeset
62 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
63 default: status_text = "Unknown"; break;
114cad94008f [Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
64 }
183
a8976a008a9d [BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents: 154
diff changeset
65
221
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 187
diff changeset
66 snprintf(
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 187
diff changeset
67 (char*)buffer, 1024,
18
fa2b8af609d9 [Seobeo] Fixed a bug with pathing. Support SSL.
June Park <parkjune1995@gmail.com>
parents: 17
diff changeset
68 "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
69 "Content-Type: %s\r\n"
114cad94008f [Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
70 "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
71 "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
72 "\r\n",
a8976a008a9d [BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents: 154
diff changeset
73 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
74 keep_alive ? "keep-alive" : "close"
7
114cad94008f [Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
75 );
114cad94008f [Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
76 }
114cad94008f [Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
77
183
a8976a008a9d [BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents: 154
diff changeset
78 // 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
79 #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
80
a8976a008a9d [BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents: 154
diff changeset
81 // 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
82 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
83 {
183
a8976a008a9d [BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents: 154
diff changeset
84 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
85
a8976a008a9d [BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents: 154
diff changeset
86 // 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
87 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
88 if (!copy) return FALSE;
7
114cad94008f [Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
89
183
a8976a008a9d [BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents: 154
diff changeset
90 boolean found = FALSE;
a8976a008a9d [BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents: 154
diff changeset
91 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
92 while (token) {
a8976a008a9d [BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents: 154
diff changeset
93 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
94 found = TRUE;
a8976a008a9d [BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents: 154
diff changeset
95 break;
a8976a008a9d [BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents: 154
diff changeset
96 }
a8976a008a9d [BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents: 154
diff changeset
97 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
98 }
a8976a008a9d [BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents: 154
diff changeset
99 free(copy);
a8976a008a9d [BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents: 154
diff changeset
100 return found;
a8976a008a9d [BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents: 154
diff changeset
101 }
a8976a008a9d [BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents: 154
diff changeset
102
a8976a008a9d [BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents: 154
diff changeset
103 // 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
104 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
105 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
106 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
107 {
a8976a008a9d [BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents: 154
diff changeset
108 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
109
a8976a008a9d [BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents: 154
diff changeset
110 // 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
111 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
112
a8976a008a9d [BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents: 154
diff changeset
113 // 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
114 // 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
115 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
116 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
117
a8976a008a9d [BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents: 154
diff changeset
118 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
119 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
120
124
dbf14f84d51c Refactor Seobeo and mrjunejune build files so it works.
June Park <parkjune1995@gmail.com>
parents: 121
diff changeset
121 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
122 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
123
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
124 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
125 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
126
183
a8976a008a9d [BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents: 154
diff changeset
127 // Handle parse errors
a8976a008a9d [BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents: 154
diff changeset
128 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
129 // 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
130 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
131 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
132 // 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
133 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
134 }
19
875bb6e10db7 [Seobeo] Chaning Function naming to be easily readable.
June Park <parkjune1995@gmail.com>
parents: 18
diff changeset
135 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
136 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
137 "text/plain", 0);
7
114cad94008f [Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
138 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
139 (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
140 (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
141 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
142 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
143 }
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
144
183
a8976a008a9d [BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents: 154
diff changeset
145 // 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
146 // 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
147 // 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
148
a8976a008a9d [BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents: 154
diff changeset
149 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
150 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
151 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
152
a8976a008a9d [BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents: 154
diff changeset
153 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
154 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
155
3468e2fe8d88 [Seobeo] log ngnix proxy values (for myself). took out unneeded stuff fflush.
June Park <parkjune1995@gmail.com>
parents: 100
diff changeset
156 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
157 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
158 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
159 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
160
184
8c74204fd362 [MD to HTML] Updated so it can be used through readme to html
MrJuneJune <me@mrjunejune.com>
parents: 183
diff changeset
161 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
162 {
8c74204fd362 [MD to HTML] Updated so it can be used through readme to html
MrJuneJune <me@mrjunejune.com>
parents: 183
diff changeset
163 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
164 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
165 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
166 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
167 else
8c74204fd362 [MD to HTML] Updated so it can be used through readme to html
MrJuneJune <me@mrjunejune.com>
parents: 183
diff changeset
168 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
169 }
8c74204fd362 [MD to HTML] Updated so it can be used through readme to html
MrJuneJune <me@mrjunejune.com>
parents: 183
diff changeset
170 else
183
a8976a008a9d [BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents: 154
diff changeset
171 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
172
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
173 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
174 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
175
183
a8976a008a9d [BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents: 154
diff changeset
176 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
177 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
178
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 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
180 {
183
a8976a008a9d [BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents: 154
diff changeset
181 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
182 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
183 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
184 "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
185 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
186 (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
187 (uint32)strlen(p_response_header));
7
114cad94008f [Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
188 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
189 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
190 goto clean_up_arenas;
7
114cad94008f [Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
191 }
114cad94008f [Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
192
121
7b1719fa918c [Seobeo] Added web socket server.
June Park <parkjune1995@gmail.com>
parents: 119
diff changeset
193 // --- 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
194 #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
195 Seobeo_Log(SEOBEO_DEBUG, "Web socket path \n");
121
7b1719fa918c [Seobeo] Added web socket server.
June Park <parkjune1995@gmail.com>
parents: 119
diff changeset
196 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
197 {
7b1719fa918c [Seobeo] Added web socket server.
June Park <parkjune1995@gmail.com>
parents: 119
diff changeset
198 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
199 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
200 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
201 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
202 }
124
dbf14f84d51c Refactor Seobeo and mrjunejune build files so it works.
June Park <parkjune1995@gmail.com>
parents: 121
diff changeset
203 #endif
121
7b1719fa918c [Seobeo] Added web socket server.
June Park <parkjune1995@gmail.com>
parents: 119
diff changeset
204
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
205 // --- 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
206 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
207 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
208 {
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
209 stream_handler(p_cli_handle, p_req_map, p_response_arena);
187
a69485d9f2e1 Fixed a small bug.
MrJuneJune <me@mrjunejune.com>
parents: 186
diff changeset
210 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
211 }
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
212
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
213 // --- 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
214 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
215 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
216 {
4532ce6d9eb8 [Seobeo] Added router to the server logic. Few dowa string manipulation logics.
June Park <parkjune1995@gmail.com>
parents: 71
diff changeset
217 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
218 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
219 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
220 }
4532ce6d9eb8 [Seobeo] Added router to the server logic. Few dowa string manipulation logics.
June Park <parkjune1995@gmail.com>
parents: 71
diff changeset
221
183
a8976a008a9d [BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents: 154
diff changeset
222 // --- 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
223 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
224 {
183
a8976a008a9d [BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents: 154
diff changeset
225 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
226
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
227 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
228 {
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
229 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
230 }
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
231 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
232 {
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
233 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
234 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
235 {
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
236 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
237 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
238 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
239 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
240 }
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
241 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
242 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
243 }
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
244
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
245 void *p_file_kv = Dowa_HashMap_Get_Ptr(p_html_cache, 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
246 const char *file_content = 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
247 size_t body_size = 0;
18
fa2b8af609d9 [Seobeo] Fixed a bug with pathing. Support SSL.
June Park <parkjune1995@gmail.com>
parents: 17
diff changeset
248
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
249 if (p_file_kv)
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
250 {
132
7a63e41a21fb [Seobeo] Added debug targets.
June Park <parkjune1995@gmail.com>
parents: 124
diff changeset
251 Seobeo_Cached_File *cached = ((Seobeo_Cache_Entry*)p_file_kv)->value;
7a63e41a21fb [Seobeo] Added debug targets.
June Park <parkjune1995@gmail.com>
parents: 124
diff changeset
252 file_content = cached->content;
7a63e41a21fb [Seobeo] Added debug targets.
June Park <parkjune1995@gmail.com>
parents: 124
diff changeset
253 body_size = cached->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
254 }
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
255 else
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
256 {
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
257 file_content = Seobeo_Web_LoadFile(file_path, &body_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
258 if (file_content)
132
7a63e41a21fb [Seobeo] Added debug targets.
June Park <parkjune1995@gmail.com>
parents: 124
diff changeset
259 {
7a63e41a21fb [Seobeo] Added debug targets.
June Park <parkjune1995@gmail.com>
parents: 124
diff changeset
260 Seobeo_Cached_File *cached = malloc(sizeof(Seobeo_Cached_File));
7a63e41a21fb [Seobeo] Added debug targets.
June Park <parkjune1995@gmail.com>
parents: 124
diff changeset
261 cached->content = (char*)file_content;
7a63e41a21fb [Seobeo] Added debug targets.
June Park <parkjune1995@gmail.com>
parents: 124
diff changeset
262 cached->size = body_size;
7a63e41a21fb [Seobeo] Added debug targets.
June Park <parkjune1995@gmail.com>
parents: 124
diff changeset
263 Dowa_HashMap_Push(p_html_cache, file_path, cached);
7a63e41a21fb [Seobeo] Added debug targets.
June Park <parkjune1995@gmail.com>
parents: 124
diff changeset
264 }
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
265 }
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
266
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
267 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
268 {
183
a8976a008a9d [BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents: 154
diff changeset
269 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
270 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
271 "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
272 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
273 (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
274 (uint32)strlen(p_response_header));
18
fa2b8af609d9 [Seobeo] Fixed a bug with pathing. Support SSL.
June Park <parkjune1995@gmail.com>
parents: 17
diff changeset
275 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
276 goto clean_up_arenas;
18
fa2b8af609d9 [Seobeo] Fixed a bug with pathing. Support SSL.
June Park <parkjune1995@gmail.com>
parents: 17
diff changeset
277 }
7
114cad94008f [Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
278
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
279 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
280 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
281 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
282 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
283 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
284 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
285 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
286 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
287 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
288 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
289 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
290 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
291 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
292 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
293 else if (strstr(file_path, ".txt")) mime = "text/plain";
8c74204fd362 [MD to HTML] Updated so it can be used through readme to html
MrJuneJune <me@mrjunejune.com>
parents: 183
diff changeset
294 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
295 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
296 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
297 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
298 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
299 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
300 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
301 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
302 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
303
7
114cad94008f [Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
304
183
a8976a008a9d [BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents: 154
diff changeset
305 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
306 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
307 mime,
183
a8976a008a9d [BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents: 154
diff changeset
308 body_size, should_keep_alive);
7
114cad94008f [Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
309
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
310 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
311 (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
312 (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
313 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
314 (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
315 (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
316 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
317 }
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 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
319 {
183
a8976a008a9d [BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents: 154
diff changeset
320 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
321 HTTP_NOT_FOUND,
a8976a008a9d [BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents: 154
diff changeset
322 "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
323 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
324 (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
325 (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
326 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
327 }
7
114cad94008f [Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
328
183
a8976a008a9d [BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents: 154
diff changeset
329 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
330 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
331 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
332 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
333 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
334 return should_keep_alive;
7
114cad94008f [Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
335 }
114cad94008f [Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
336
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
337 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
338 {
114cad94008f [Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
339 while (1)
114cad94008f [Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
340 {
114cad94008f [Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
341 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
342 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
343 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
344 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
345 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
346
114cad94008f [Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
347 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
348 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
349 break;
110
99c4530e4629 [Seobeo] Small Syntax fixes.
June Park <parkjune1995@gmail.com>
parents: 101
diff changeset
350
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
351 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
352 {
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
353 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
354 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
355 }
7
114cad94008f [Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
356 }
114cad94008f [Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
357
110
99c4530e4629 [Seobeo] Small Syntax fixes.
June Park <parkjune1995@gmail.com>
parents: 101
diff changeset
358 // "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
359 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
360 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
361 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
362
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
363 // 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
364 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
365 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
366 {
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
367 size_t first_line_len = first_line_end - buf;
96
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
368 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
369 }
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
370
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
371 // This seems kinda bad ?
7
114cad94008f [Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
372 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
373 int scan_result = sscanf(buf, "%15s %255s %15s", method, path, version);
96
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
374 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
375 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
376 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
377 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
378 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
379
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
380 if (scan_result != 3)
7
114cad94008f [Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
381 {
96
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
382 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
383 return -1;
114cad94008f [Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
384 }
114cad94008f [Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
385
96
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
386 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
387 char *method_copy = Dowa_Arena_Allocate(p_arena, strlen(method) + 1);
96
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
388 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
389 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
390
96
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
391 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
392 char *version_copy = Dowa_Arena_Allocate(p_arena, strlen(version) + 1);
96
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
393 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
394 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
395
96
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
396 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
397 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
398 Dowa_HashMap_Push_Arena(*pp_map, "Version", version_copy, p_arena);
96
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
399 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
400
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
401 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
402 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
403 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
404
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
405 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
406 {
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
407 *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
408 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
409 }
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
410
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
411 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
412 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
413 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
414 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
415
ffb764d2fcc5 [HgWeb] Updated hg web so it works
June Park <parkjune1995@gmail.com>
parents: 132
diff changeset
416 // Store full query string for proxying
ffb764d2fcc5 [HgWeb] Updated hg web so it works
June Park <parkjune1995@gmail.com>
parents: 132
diff changeset
417 if (query_str && *query_str)
ffb764d2fcc5 [HgWeb] Updated hg web so it works
June Park <parkjune1995@gmail.com>
parents: 132
diff changeset
418 {
ffb764d2fcc5 [HgWeb] Updated hg web so it works
June Park <parkjune1995@gmail.com>
parents: 132
diff changeset
419 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
420 if (qs_copy)
ffb764d2fcc5 [HgWeb] Updated hg web so it works
June Park <parkjune1995@gmail.com>
parents: 132
diff changeset
421 {
ffb764d2fcc5 [HgWeb] Updated hg web so it works
June Park <parkjune1995@gmail.com>
parents: 132
diff changeset
422 strcpy(qs_copy, query_str);
ffb764d2fcc5 [HgWeb] Updated hg web so it works
June Park <parkjune1995@gmail.com>
parents: 132
diff changeset
423 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
424 }
ffb764d2fcc5 [HgWeb] Updated hg web so it works
June Park <parkjune1995@gmail.com>
parents: 132
diff changeset
425 }
ffb764d2fcc5 [HgWeb] Updated hg web so it works
June Park <parkjune1995@gmail.com>
parents: 132
diff changeset
426
110
99c4530e4629 [Seobeo] Small Syntax fixes.
June Park <parkjune1995@gmail.com>
parents: 101
diff changeset
427 // 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
428 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
429 {
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
430 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
431 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
432 {
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
433 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
434 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
435
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
436 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
437 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
438 {
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
439 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
440 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
441
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
442 char key_buf[256];
110
99c4530e4629 [Seobeo] Small Syntax fixes.
June Park <parkjune1995@gmail.com>
parents: 101
diff changeset
443 // 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
444 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
445
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
446 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
447 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
448 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
449 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
450
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
451 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
452 }
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
453
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
454 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
455 }
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
456 }
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
457
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
458 // 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
459 // 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
460 // 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
461 // 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
462
110
99c4530e4629 [Seobeo] Small Syntax fixes.
June Park <parkjune1995@gmail.com>
parents: 101
diff changeset
463 // Parse headers
7
114cad94008f [Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
464 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
465 while (line < hdr_end)
114cad94008f [Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
466 {
114cad94008f [Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
467 char *next = strstr(line, "\r\n");
114cad94008f [Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
468 if (!next) break;
114cad94008f [Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
469
114cad94008f [Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
470 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
471 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
472 {
7
114cad94008f [Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
473 size_t key_len = colon - line;
114cad94008f [Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
474 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
475
114cad94008f [Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
476 char *val_start = colon + 1;
114cad94008f [Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
477 if (*val_start == ' ')
114cad94008f [Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
478 {
114cad94008f [Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
479 val_start++;
114cad94008f [Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
480 value_len--;
114cad94008f [Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
481 }
114cad94008f [Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
482
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
483 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
484 if (!key) return -1;
7
114cad94008f [Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
485 memcpy(key, line, key_len);
114cad94008f [Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
486 key[key_len] = '\0';
114cad94008f [Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
487
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
488 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
489 if (!val) return -1;
7
114cad94008f [Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
490 memcpy(val, val_start, value_len);
114cad94008f [Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
491 val[value_len] = '\0';
114cad94008f [Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
492
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
493 Dowa_HashMap_Push_Arena(*pp_map, key, val, p_arena);
7
114cad94008f [Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
494 }
114cad94008f [Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
495
114cad94008f [Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
496 line = next + 2;
114cad94008f [Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
497 }
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
498
7
114cad94008f [Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
499 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
500
110
99c4530e4629 [Seobeo] Small Syntax fixes.
June Park <parkjune1995@gmail.com>
parents: 101
diff changeset
501 // 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
502 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
503 if (p_cl_kv)
7
114cad94008f [Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
504 {
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
505 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
506 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
507
96
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
508 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
509
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
510 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
511 if (!body)
7
114cad94008f [Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
512 {
96
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
513 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
514 return -1;
7
114cad94008f [Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
515 }
114cad94008f [Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
516
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
517 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
518
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
519 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
520 {
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
521 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
522 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
523
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
524 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
525 {
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
526 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
527 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
528 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
529
96
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
530 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
531 }
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
532
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
533 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
534 {
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
535 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
536 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
537 {
96
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
538 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
539 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
540 }
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
541 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
542 {
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
543 // 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
544 // 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
545 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
546 }
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
547 }
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
548 }
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
549
7
114cad94008f [Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
550 body[body_len] = '\0';
96
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
551 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
552
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
553 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
554 }
114cad94008f [Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
555
110
99c4530e4629 [Seobeo] Small Syntax fixes.
June Park <parkjune1995@gmail.com>
parents: 101
diff changeset
556 return 0;
7
114cad94008f [Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
557 }
114cad94008f [Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
558
114cad94008f [Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
559 void SigchildHandler(int s)
114cad94008f [Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
560 {
110
99c4530e4629 [Seobeo] Small Syntax fixes.
June Park <parkjune1995@gmail.com>
parents: 101
diff changeset
561 (void)s;
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 // 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
564 int saved_errno = errno;
114cad94008f [Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
565
114cad94008f [Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
566 while(waitpid(-1, NULL, WNOHANG) > 0);
114cad94008f [Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
567
114cad94008f [Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
568 errno = saved_errno;
114cad94008f [Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
569 }
114cad94008f [Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
570
19
875bb6e10db7 [Seobeo] Chaning Function naming to be easily readable.
June Park <parkjune1995@gmail.com>
parents: 18
diff changeset
571 int Seobeo_Web_Server_Start(
7
114cad94008f [Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
572 const char *folder_path,
114cad94008f [Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
573 const char *port,
114cad94008f [Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
574 Seobeo_ServerMode mode,
114cad94008f [Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
575 int thread_count)
114cad94008f [Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
576 {
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
577 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
578 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
579
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
580 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
581
66
a0f0ad5e42eb [Misc] taking out capital P stuff.
June Park <parkjune1995@gmail.com>
parents: 65
diff changeset
582 Seobeo_Handle *p_server_handle =
18
fa2b8af609d9 [Seobeo] Fixed a bug with pathing. Support SSL.
June Park <parkjune1995@gmail.com>
parents: 17
diff changeset
583 Seobeo_Stream_Handle_Server_Create(NULL, port);
7
114cad94008f [Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
584 if (p_server_handle->socket < 0) return 1;
18
fa2b8af609d9 [Seobeo] Fixed a bug with pathing. Support SSL.
June Park <parkjune1995@gmail.com>
parents: 17
diff changeset
585
96
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
586 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
587
114cad94008f [Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
588 if (mode == SEOBEO_MODE_FORK)
114cad94008f [Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
589 {
96
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
590 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
591 struct sigaction sa;
114cad94008f [Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
592 sa.sa_handler = SigchildHandler;
114cad94008f [Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
593 sigemptyset(&sa.sa_mask);
114cad94008f [Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
594 sa.sa_flags = SA_RESTART;
114cad94008f [Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
595 sigaction(SIGCHLD, &sa, NULL);
114cad94008f [Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
596
34
6c322f9c2cb9 [Birthday] I didn't have nay time to buy birhtday present so w/e/
MrJuneJune <me@mrjunejune.com>
parents: 33
diff changeset
597 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
598 {
66
a0f0ad5e42eb [Misc] taking out capital P stuff.
June Park <parkjune1995@gmail.com>
parents: 65
diff changeset
599 Seobeo_Handle *p_cli_handle =
19
875bb6e10db7 [Seobeo] Chaning Function naming to be easily readable.
June Park <parkjune1995@gmail.com>
parents: 18
diff changeset
600 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
601 if (!p_cli_handle) continue;
7
114cad94008f [Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
602
16
fb2cff495a60 [Seobeo] Fixed the problem with edge server.
June Park <parkjune1995@gmail.com>
parents: 7
diff changeset
603 if (fork() == 0)
fb2cff495a60 [Seobeo] Fixed the problem with edge server.
June Park <parkjune1995@gmail.com>
parents: 7
diff changeset
604 {
183
a8976a008a9d [BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents: 154
diff changeset
605 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
606 _exit(0);
114cad94008f [Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
607 }
114cad94008f [Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
608 }
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
114cad94008f [Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
611 if (mode == SEOBEO_MODE_EDGE)
114cad94008f [Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
612 {
96
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
613 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
614 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
615 }
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 return -1;
114cad94008f [Seobeo] Updated to support thread and edge server calls.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
618 }
17
d97ec3ded2ae [Seobeo] Few changes...
June Park <parkjune1995@gmail.com>
parents: 16
diff changeset
619
96
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
620 /* Router logic */
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
621 struct Seobeo_Route_Struct {
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
622 char *method; // "GET", "POST", "PUT", "DELETE"
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
623 char *path_pattern; // "/v1/users/:id/posts/:post_id"
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
624 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
625 Seobeo_Stream_Handler stream_handler; // For streaming responses
96
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
626
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
627 // Pre-parsed path segments for efficient matching
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
628 char **path_segments; // ["v1", "users", ":id", "posts", ":post_id"]
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
629 boolean *is_param; // [false, false, true, false, true]
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
630 size_t segment_count;
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
631 };
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
632
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
633 static Seobeo_Route *g_routes = NULL;
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
634
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
635 void Seobeo_Router_Init()
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
636 {
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
637 Dowa_Array_Reserve(g_routes, 20);
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
638 }
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
639
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
640 void Seobeo_Router_Register(const char *method, const char *path_pattern, Seobeo_Route_Handler handler)
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
641 {
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
642 Seobeo_Route route = {0};
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
643
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
644 route.method = strdup(method);
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
645 route.path_pattern = strdup(path_pattern);
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
646 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
647 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
648 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
649 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
650 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
651
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
652 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
653 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
654
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
655 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
656 }
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
657
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
658 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
659 {
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
660 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
661
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
662 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
663 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
664 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
665 route.stream_handler = handler;
96
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
666 route.path_segments = Dowa_String_Split(path_pattern, "/", strlen(path_pattern), 1, NULL);
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
667 route.segment_count = Dowa_Array_Length(route.path_segments);
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
668 route.is_param = (boolean*)malloc(sizeof(boolean) * route.segment_count);
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
669
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
670 for (size_t i = 0; i < route.segment_count; i++)
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
671 route.is_param[i] = (route.path_segments[i][0] == ':');
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
672
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
673 Dowa_Array_Push(g_routes, route);
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
674 }
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
675
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
676 static boolean match_route_and_extract(
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
677 Seobeo_Route *route,
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
678 const char *request_path,
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
679 Seobeo_Request_Entry **pp_request_map,
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
680 Dowa_Arena *p_arena)
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
681 {
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
682 Dowa_Arena *p_temp_arena = Dowa_Arena_Create(1024);
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
683 char **request_segments = Dowa_String_Split(request_path, "/", strlen(request_path), 1, p_temp_arena);
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
684 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
685
96
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
686 // Check segment count matches
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
687 if (request_segment_count != route->segment_count)
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
688 {
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
689 Dowa_Arena_Free(p_temp_arena);
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
690 return FALSE;
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
691 }
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
692
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
693 for (size_t i = 0; i < route->segment_count; i++)
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
694 {
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
695 // parameters
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
696 if (route->is_param[i])
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
697 {
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
698 char *param_name = route->path_segments[i]; // e.g., ":id"
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
699 char *param_value = request_segments[i]; // e.g., "123"
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
700
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
701 // Should Copy to arena
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
702 char *key = Dowa_String_Copy_Arena(param_name, p_arena);
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
703 char *value = Dowa_String_Copy_Arena(param_value, p_arena);
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
704 Dowa_HashMap_Push_Arena(*pp_request_map, key, value, p_arena);
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
705 }
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
706 else
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
707 {
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
708 // Does not match.
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
709 if (strcmp(route->path_segments[i], request_segments[i]) != 0)
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
710 {
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
711 Dowa_Arena_Free(p_temp_arena);
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
712 return FALSE;
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
713 }
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
714 }
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
715 }
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
716
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
717 Dowa_Arena_Free(p_temp_arena);
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
718 return TRUE;
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
719 }
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
720
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
721 Seobeo_Route_Handler Seobeo_Router_Find_Handler(const char *method,
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
722 const char *path,
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
723 Seobeo_Request_Entry **pp_request_map,
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
724 Dowa_Arena *p_arena) {
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
725 if (g_routes == NULL)
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
726 {
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
727 return NULL;
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
728 }
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
729
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
730 size_t route_count = Dowa_Array_Length(g_routes);
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
731 for (size_t i = 0; i < route_count; i++)
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
732 {
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
733 Seobeo_Route *route = &g_routes[i];
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
734 if (strcmp(route->method, method) != 0)
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
735 {
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
736 continue;
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
737 }
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
738
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
739 if (match_route_and_extract(route, path, pp_request_map, p_arena))
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
740 {
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
741 return route->handler;
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
742 }
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
743 }
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
744
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
745 return NULL;
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
746 }
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
747
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
748 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
749 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
750 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
751 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
752 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
753 {
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
754 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
755 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
756
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
757 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
758 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
759 {
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
760 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
761 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
762 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
763
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
764 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
765 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
766 }
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
767
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
768 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
769 }
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
770
96
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
771 void Seobeo_Router_Send_Response(
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
772 Seobeo_Handle *p_handle,
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
773 Seobeo_Request_Entry *p_response_map,
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
774 Dowa_Arena *p_arena)
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
775 {
183
a8976a008a9d [BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents: 154
diff changeset
776 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
777 }
a8976a008a9d [BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents: 154
diff changeset
778
221
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 187
diff changeset
779 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
780 {
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 187
diff changeset
781 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
782 }
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 187
diff changeset
783
183
a8976a008a9d [BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents: 154
diff changeset
784 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
785 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
786 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
787 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
788 boolean keep_alive)
a8976a008a9d [BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
MrJuneJune <me@mrjunejune.com>
parents: 154
diff changeset
789 {
96
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
790 if (p_response_map == NULL)
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
791 {
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
792 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
793 Seobeo_Web_Header_Generate_KeepAlive(header, HTTP_INTERNAL_ERROR, "text/plain", 21, keep_alive);
96
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
794 Seobeo_Handle_Queue(p_handle, (uint8_t*)header, strlen(header));
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
795 Seobeo_Handle_Queue(p_handle, (uint8_t*)"Internal Server Error", 21);
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
796 Seobeo_Handle_Flush(p_handle);
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
797 return;
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
798 }
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
799
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
800 int status = HTTP_OK;
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
801 void *p_status_kv = Dowa_HashMap_Get_Ptr(p_response_map, "status");
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
802 if (p_status_kv)
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
803 {
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
804 const char *status_str = ((Seobeo_Request_Entry*)p_status_kv)->value;
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
805 status = atoi(status_str);
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
806 }
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
807
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
808 const char *body = "";
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
809 void *p_body_kv = Dowa_HashMap_Get_Ptr(p_response_map, "body");
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
810 if (p_body_kv)
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
811 body = ((Seobeo_Request_Entry*)p_body_kv)->value;
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
812
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
813 const char *content_type = "text/html";
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
814 void *p_content_type_kv = Dowa_HashMap_Get_Ptr(p_response_map, "content-type");
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
815 if (p_content_type_kv)
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
816 content_type = ((Seobeo_Request_Entry*)p_content_type_kv)->value;
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
817
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
818 // 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
819 size_t body_length;
96
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
820 void *p_content_length_kv = Dowa_HashMap_Get_Ptr(p_response_map, "content-length");
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
821 if (p_content_length_kv)
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
822 {
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
823 const char *content_length_str = ((Seobeo_Request_Entry*)p_content_length_kv)->value;
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
824 body_length = atoi(content_length_str);
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
825 }
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
826 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
827 body_length = strlen(body);
96
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
828
221
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 187
diff changeset
829 size_t header_capacity = 1024;
96
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
830 for (int i = 0; i < Dowa_Array_Length(p_response_map); i++)
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
831 {
221
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 187
diff changeset
832 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
833 const char *value = p_response_map[i].value;
96
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
834 if (
221
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 187
diff changeset
835 strcasecmp(key, "status") == 0 ||
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 187
diff changeset
836 strcasecmp(key, "body") == 0 ||
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 187
diff changeset
837 strcasecmp(key, "content-type") == 0 ||
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 187
diff changeset
838 strcasecmp(key, "content-length") == 0
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 187
diff changeset
839 )
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 187
diff changeset
840 continue;
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 187
diff changeset
841 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
842 Seobeo_Response_Header_Value_Is_Safe(value))
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 187
diff changeset
843 header_capacity += strlen(key) + strlen(value) + 4;
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 187
diff changeset
844 }
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 187
diff changeset
845
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 187
diff changeset
846 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
847 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
848 size_t header_length = strlen(header);
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 187
diff changeset
849 if (header_length < 2)
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 187
diff changeset
850 return;
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 187
diff changeset
851 header_length -= 2;
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 187
diff changeset
852
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 187
diff changeset
853 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
854 {
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 187
diff changeset
855 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
856 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
857 if (
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 187
diff changeset
858 strcasecmp(key, "status") == 0 ||
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 187
diff changeset
859 strcasecmp(key, "body") == 0 ||
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 187
diff changeset
860 strcasecmp(key, "content-type") == 0 ||
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 187
diff changeset
861 strcasecmp(key, "content-length") == 0
96
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
862 )
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
863 continue;
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
864
221
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 187
diff changeset
865 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
866 !Seobeo_Response_Header_Value_Is_Safe(value))
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 187
diff changeset
867 {
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 187
diff changeset
868 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
869 continue;
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 187
diff changeset
870 }
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 187
diff changeset
871
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 187
diff changeset
872 int written = snprintf(
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 187
diff changeset
873 header + header_length,
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 187
diff changeset
874 header_capacity - header_length,
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 187
diff changeset
875 "%s: %s\r\n",
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 187
diff changeset
876 key,
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 187
diff changeset
877 value);
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 187
diff changeset
878 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
879 {
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 187
diff changeset
880 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
881 return;
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 187
diff changeset
882 }
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 187
diff changeset
883 header_length += (size_t)written;
96
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
884 }
221
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 187
diff changeset
885 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
886
96
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
887 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
888 Seobeo_Handle_Queue(p_handle, (uint8_t*)body, body_length);
96
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
889 Seobeo_Handle_Flush(p_handle);
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
890 }
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
891
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
892 void Seobeo_Router_Destroy()
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
893 {
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
894 if (g_routes == NULL)
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
895 return;
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
896
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
897 size_t route_count = Dowa_Array_Length(g_routes);
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
898 for (size_t i = 0; i < route_count; i++)
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
899 {
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
900 Seobeo_Route *route = &g_routes[i];
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
901 if (route->method) free(route->method);
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
902 if (route->path_pattern) free(route->path_pattern);
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
903 if (route->path_segments) Dowa_Array_Free(route->path_segments);
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
904 if (route->is_param) free(route->is_param);
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
905 }
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
906 Dowa_Array_Free(g_routes);
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
907 g_routes = NULL;
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
908 }
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
909
147
6de849867459 [HgWeb] Updated logic to use Seobeo Client.
June Park <parkjune1995@gmail.com>
parents: 141
diff changeset
910 // 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
911 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
912 {
6de849867459 [HgWeb] Updated logic to use Seobeo Client.
June Park <parkjune1995@gmail.com>
parents: 141
diff changeset
913 char a, b;
6de849867459 [HgWeb] Updated logic to use Seobeo Client.
June Park <parkjune1995@gmail.com>
parents: 141
diff changeset
914 while (*src) {
6de849867459 [HgWeb] Updated logic to use Seobeo Client.
June Park <parkjune1995@gmail.com>
parents: 141
diff changeset
915 /* 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
916 if (*src == '%' && src[1] && src[2]) {
6de849867459 [HgWeb] Updated logic to use Seobeo Client.
June Park <parkjune1995@gmail.com>
parents: 141
diff changeset
917 a = src[1];
6de849867459 [HgWeb] Updated logic to use Seobeo Client.
June Park <parkjune1995@gmail.com>
parents: 141
diff changeset
918 b = src[2];
6de849867459 [HgWeb] Updated logic to use Seobeo Client.
June Park <parkjune1995@gmail.com>
parents: 141
diff changeset
919
6de849867459 [HgWeb] Updated logic to use Seobeo Client.
June Park <parkjune1995@gmail.com>
parents: 141
diff changeset
920 /* Manual isxdigit check and conversion for 'a' */
6de849867459 [HgWeb] Updated logic to use Seobeo Client.
June Park <parkjune1995@gmail.com>
parents: 141
diff changeset
921 int a_val = -1;
6de849867459 [HgWeb] Updated logic to use Seobeo Client.
June Park <parkjune1995@gmail.com>
parents: 141
diff changeset
922 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
923 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
924 else if (a >= 'A' && a <= 'F') a_val = a - 'A' + 10;
96
70401cf61e97 [Seobeo] Added logging.
June Park <parkjune1995@gmail.com>
parents: 92
diff changeset
925
147
6de849867459 [HgWeb] Updated logic to use Seobeo Client.
June Park <parkjune1995@gmail.com>
parents: 141
diff changeset
926 /* Manual isxdigit check and conversion for 'b' */
6de849867459 [HgWeb] Updated logic to use Seobeo Client.
June Park <parkjune1995@gmail.com>
parents: 141
diff changeset
927 int b_val = -1;
6de849867459 [HgWeb] Updated logic to use Seobeo Client.
June Park <parkjune1995@gmail.com>
parents: 141
diff changeset
928 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
929 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
930 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
931
6de849867459 [HgWeb] Updated logic to use Seobeo Client.
June Park <parkjune1995@gmail.com>
parents: 141
diff changeset
932 /* If both were valid hex, combine them */
6de849867459 [HgWeb] Updated logic to use Seobeo Client.
June Park <parkjune1995@gmail.com>
parents: 141
diff changeset
933 if (a_val != -1 && b_val != -1) {
6de849867459 [HgWeb] Updated logic to use Seobeo Client.
June Park <parkjune1995@gmail.com>
parents: 141
diff changeset
934 *dst++ = (char)((a_val << 4) | b_val);
6de849867459 [HgWeb] Updated logic to use Seobeo Client.
June Park <parkjune1995@gmail.com>
parents: 141
diff changeset
935 src += 3;
6de849867459 [HgWeb] Updated logic to use Seobeo Client.
June Park <parkjune1995@gmail.com>
parents: 141
diff changeset
936 continue;
6de849867459 [HgWeb] Updated logic to use Seobeo Client.
June Park <parkjune1995@gmail.com>
parents: 141
diff changeset
937 }
6de849867459 [HgWeb] Updated logic to use Seobeo Client.
June Park <parkjune1995@gmail.com>
parents: 141
diff changeset
938 }
6de849867459 [HgWeb] Updated logic to use Seobeo Client.
June Park <parkjune1995@gmail.com>
parents: 141
diff changeset
939
6de849867459 [HgWeb] Updated logic to use Seobeo Client.
June Park <parkjune1995@gmail.com>
parents: 141
diff changeset
940 /* Handle '+' as space, otherwise copy character literally */
6de849867459 [HgWeb] Updated logic to use Seobeo Client.
June Park <parkjune1995@gmail.com>
parents: 141
diff changeset
941 if (*src == '+') {
6de849867459 [HgWeb] Updated logic to use Seobeo Client.
June Park <parkjune1995@gmail.com>
parents: 141
diff changeset
942 *dst++ = ' ';
6de849867459 [HgWeb] Updated logic to use Seobeo Client.
June Park <parkjune1995@gmail.com>
parents: 141
diff changeset
943 } else {
6de849867459 [HgWeb] Updated logic to use Seobeo Client.
June Park <parkjune1995@gmail.com>
parents: 141
diff changeset
944 *dst++ = *src;
6de849867459 [HgWeb] Updated logic to use Seobeo Client.
June Park <parkjune1995@gmail.com>
parents: 141
diff changeset
945 }
6de849867459 [HgWeb] Updated logic to use Seobeo Client.
June Park <parkjune1995@gmail.com>
parents: 141
diff changeset
946 src++;
6de849867459 [HgWeb] Updated logic to use Seobeo Client.
June Park <parkjune1995@gmail.com>
parents: 141
diff changeset
947 }
6de849867459 [HgWeb] Updated logic to use Seobeo Client.
June Park <parkjune1995@gmail.com>
parents: 141
diff changeset
948 *dst = '\0';
6de849867459 [HgWeb] Updated logic to use Seobeo Client.
June Park <parkjune1995@gmail.com>
parents: 141
diff changeset
949 }