diff options
Diffstat (limited to 'src/server.c')
| -rw-r--r-- | src/server.c | 34 |
1 files changed, 18 insertions, 16 deletions
diff --git a/src/server.c b/src/server.c index 1886712..80ba5ce 100644 --- a/src/server.c +++ b/src/server.c @@ -1,8 +1,4 @@ -#include <arpa/inet.h> -#include <netinet/in.h> -#include <openssl/sha.h> -#include <stdio.h> -#include <string.h> +#include <errno.h> #include <sys/socket.h> #include <sys/wait.h> #include <assert.h> @@ -10,13 +6,12 @@ #define LOG_MODULE "server" #include "logger/logger.h" +#include "string.h" #define PORT 3456 -#include "server/base64.c" #include "server/ws_key.c" #include "server/comms.c" -#include "ipc.c" mqd_t logging, tx, rx; int handle_client(int client); @@ -48,6 +43,7 @@ int main(void) { log_infof("Listening on %d", PORT); + // https://websocket.org/guides/websocket-protocol/ while(1) { int client = accept(server_fd, NULL, NULL); @@ -101,9 +97,16 @@ int main(void) { int handle_client(int client) { unsigned char hdr[2]; + int recvn; - if (recv(client, hdr, 2, MSG_WAITALL) != 2) { - log_warnf("{%d} recv close", client) + if ((recvn = recv(client, hdr, 2, MSG_WAITALL)) != 2) { + if (recvn == -1) { + char buf[256]; + if (strerror_r(errno, buf, sizeof(buf)) == 0) { + log_warnf("recv: %s", buf); + } + } + log_warnf("{%d} recv close %d", client, recvn); return 0; } @@ -129,11 +132,6 @@ int handle_client(int client) { return 1; } - if (len >= 126) { - log_infof("{%d} unsupported length %u", client, len); - return 0; - } - unsigned char mask[4]; recv(client, mask, 4, MSG_WAITALL); @@ -149,14 +147,18 @@ int handle_client(int client) { unsigned char out[1024]; out[0] = 0x81; + int shift; for (int i = 0; i < response.count; i++) { struct str item = response.data[i]; - out[1] = item.len; - assert(item.len <= 1022); + assert(item.len <= 125); + log_infof("Replying %d: %.*s", client, item.len, item.msg) + out[1] = item.len; + shift = 2; memcpy(out + 2, item.msg, item.len); send(client, out, item.len + 2, 0); } + log_infof("Replying %d: END-TRANSMISSION", client) char end_transmission[] = "END-TRANSMISSION"; int n = strlen(end_transmission); out[1] = n; |
