summaryrefslogtreecommitdiff
path: root/src/server/ws_key.c
diff options
context:
space:
mode:
authorAargh Rai <aargh.rai+git@gmail.com>2026-05-27 17:13:14 +0530
committerAargh Rai <aargh.rai+git@gmail.com>2026-05-27 17:13:14 +0530
commit49cc88def2f9edea59e79ca37f41400ad870579e (patch)
tree55d84a76920dd4af7a7a2054d553ce29d11e726c /src/server/ws_key.c
parent380d67bada7544f5f10cecc8c9dff7ed2f79e187 (diff)
went through all, but comms is working
Diffstat (limited to 'src/server/ws_key.c')
-rw-r--r--src/server/ws_key.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/src/server/ws_key.c b/src/server/ws_key.c
new file mode 100644
index 0000000..ca66b81
--- /dev/null
+++ b/src/server/ws_key.c
@@ -0,0 +1,28 @@
+static const char *GUID = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11";
+
+void websocket_accept_key(const char *client_key, char *output) {
+ char buf[256];
+ snprintf(buf, sizeof(buf), "%s%s", client_key, GUID);
+
+ unsigned char hash[SHA_DIGEST_LENGTH];
+ SHA1((unsigned char *)buf, strlen(buf), hash);
+ base64_encode(hash, SHA_DIGEST_LENGTH, output);
+}
+
+char *find_websocket_key(char *req) {
+ char *p = strstr(req, "Sec-WebSocket-Key:");
+
+ if (!p) return NULL;
+
+ p += strlen("Sec-WebSocket-Key:");
+
+ while (*p == ' ') p++;
+
+ static char key[128];
+ int i = 0;
+ while (*p && *p != '\r' && *p != '\n')
+ key[i++] = *p++;
+
+ key[i] = 0;
+ return key;
+}