diff options
Diffstat (limited to 'src/server')
| -rw-r--r-- | src/server/base64.c | 34 | ||||
| -rw-r--r-- | src/server/comms.c | 68 | ||||
| -rw-r--r-- | src/server/ws_key.c | 36 |
3 files changed, 0 insertions, 138 deletions
diff --git a/src/server/base64.c b/src/server/base64.c deleted file mode 100644 index e3e0ef6..0000000 --- a/src/server/base64.c +++ /dev/null @@ -1,34 +0,0 @@ -#ifndef BASE64_C -#define BASE64_C - -#include <stddef.h> - -static const char b64[] = - "ABCDEFGHIJKLMNOPQRSTUVWXYZ" - "abcdefghijklmnopqrstuvwxyz" - "0123456789+/"; - -void base64_encode( - const unsigned char *in, - size_t len, - char *out -) { - size_t i, j = 0; - - for (i = 0; i < len; i += 3) { - unsigned v = in[i] << 16; - - if (i + 1 < len) v |= in[i + 1] << 8; - if (i + 2 < len) v |= in[i + 2]; - - out[j++] = b64[(v >> 18) & 63]; - out[j++] = b64[(v >> 12) & 63]; - - out[j++] = (i + 1 < len) ? b64[(v >> 6) & 63] : '='; - out[j++] = (i + 2 < len) ? b64[v & 63] : '='; - } - - out[j] = 0; -} - -#endif // BASE64_C diff --git a/src/server/comms.c b/src/server/comms.c deleted file mode 100644 index 67e42a2..0000000 --- a/src/server/comms.c +++ /dev/null @@ -1,68 +0,0 @@ -#include <assert.h> -#include <string.h> -#include "../ipc.c" -#include "../logger/logger.h" - -struct str { - char msg[1023]; - int len; -}; - -void set_output(struct str* output, char* msg) { - int i = 0; - while (msg[i] != 0) { - assert(i < 1023); - output->msg[i] = msg[i]; - i++; - } - output->len = i; -} - -struct strs { - struct str* data; - int capacity; - int count; -}; - -struct strs init_strs() { - return (struct strs) { - .data = malloc(sizeof(struct str) * 10), - .count = 0, - .capacity = 10, - }; -} -void add_str(struct strs* strs, char* str) { - if (strs->count + 1 > strs->capacity) { - strs->capacity += 30; - strs->data = realloc(strs->data, sizeof(struct str) * strs->capacity); - } - - struct str item; - set_output(&item, str); - - strs->data[strs->count] = item; - strs->count++; -} - -struct strs handle_input(mqd_t logging, mqd_t tx, mqd_t rx, char* payload, int len) { - log_infof("after: %d", payload[len]); - send_queue(tx, payload, len + 1); - char* buf = read_queue(rx); - - struct strs output = init_strs(); - - if (strcmp(buf, "Sending") != 0) { - return output; - } - - while (1) { - char* buf = read_queue(rx); - if (strcmp(buf, "END-TRANSMISSION") == 0) { - free(buf); - break; - } - add_str(&output, buf); - free(buf); - } - return output; -} diff --git a/src/server/ws_key.c b/src/server/ws_key.c deleted file mode 100644 index 015605e..0000000 --- a/src/server/ws_key.c +++ /dev/null @@ -1,36 +0,0 @@ -#include <openssl/sha.h> -#include <netinet/in.h> -#include <arpa/inet.h> -#include <string.h> -#include <stdio.h> - -#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; -} |
