#include #include #include #include #include #include "./base64.c" 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; }