diff options
Diffstat (limited to 'src/server/ws_key.c')
| -rw-r--r-- | src/server/ws_key.c | 28 |
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; +} |
