summaryrefslogtreecommitdiff
path: root/src/server.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/server.c')
-rw-r--r--src/server.c34
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;