From 3c7740330aa6dffeed9b273afffa05f3d9899608 Mon Sep 17 00:00:00 2001 From: Ruthenic Date: Mon, 9 May 2022 02:29:07 -0400 Subject: [PATCH] some stuff --- TODO.md | 1 - bin/httpsrv | Bin 21944 -> 19512 bytes lib/file.h | 2 ++ lib/reqHeader.h | 24 +++++++++++++----- lib/resHeader.h | 2 +- src/srv.c | 66 +++++++++++++++++++++++++++--------------------- 6 files changed, 57 insertions(+), 38 deletions(-) diff --git a/TODO.md b/TODO.md index e99b5fd..8e7e4fc 100644 --- a/TODO.md +++ b/TODO.md @@ -3,4 +3,3 @@ - threading or async - optional allowlist of available paths (throw something else on unavailable ones) - denylist of known-bad url strings -- fix memory issues or use a GC (bdwgc probably) diff --git a/bin/httpsrv b/bin/httpsrv index 0617f48bcbb774bcdcacb5158abc47b4232fed83..8f6f9f9035807b1e211865324245039257d246b3 100755 GIT binary patch literal 19512 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 WmI2FJ*7-L2zJQ^>!=hke*?$8Isi+bF literal 21944 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 diff --git a/lib/file.h b/lib/file.h index d22dd29..52b29ec 100644 --- a/lib/file.h +++ b/lib/file.h @@ -2,6 +2,7 @@ #include #include #include +#include #ifdef NO_GC #include #define malloc(n) GC_malloc(n) @@ -30,6 +31,7 @@ char* readFile(char* path) { buf = (char*)malloc(sizeof(char) * (length + 1)); fread(buf, sizeof(char), length, fp); buf[length] = '\0'; + fclose(fp); char* tmp = buf; return tmp; diff --git a/lib/reqHeader.h b/lib/reqHeader.h index f6f2d96..2b7cfc2 100644 --- a/lib/reqHeader.h +++ b/lib/reqHeader.h @@ -1,22 +1,32 @@ #include #include #include +#ifdef NO_GC +#include +#define malloc(n) GC_malloc(n) +#else +#include +#endif typedef struct { - char method[16]; - char path[256]; + char *method; + char *path; char protocol[16]; } ReqHeader; ReqHeader readReqHeader(int client) { - char buf[1024]; + char* buf = malloc(1024); read(client, buf, 1024); ReqHeader header; - strcpy(header.method, strtok(buf, " ")); - strcpy(header.path, strtok(NULL, " ")); - strcpy(header.protocol, strtok(NULL, " ")); + header.method = malloc(1024); + header.path = malloc(1024); + /*strcpy(header.method, strtok(buf, " ")); + strcpy(header.path, strtok(NULL, " "));*/ + sprintf(header.method, "%s", strtok(buf, " ")); + sprintf(header.path, "%s", strtok(NULL, " ")); if (header.path[1] == '\0') { - strcpy(header.path, "/index.html"); + //strcpy(header.path, "/index.html"); + sprintf(header.path, "/index.html"); } return header; } diff --git a/lib/resHeader.h b/lib/resHeader.h index 4b6c49b..6b66d7d 100644 --- a/lib/resHeader.h +++ b/lib/resHeader.h @@ -8,5 +8,5 @@ typedef struct { } ResHeader; void makeHeader(char* out, ResHeader* header) { - sprintf(out, "%s %d %s\r\nContent-Type: %s\r\n\n", /*header->protocol TODO:this breaks everything because newlines*/ "HTTP/1.1", header->status, header->notice, header->mime); + sprintf(out, "%s %d %s\r\nContent-Type: %s\r\nServer: httpsrv/1.0-indev\r\n\n", /*header->protocol TODO:this breaks everything because newlines*/ "HTTP/1.1", header->status, header->notice, header->mime); } diff --git a/src/srv.c b/src/srv.c index 6aa9a80..4391201 100644 --- a/src/srv.c +++ b/src/srv.c @@ -7,6 +7,7 @@ #include #include #include +#include #ifdef NO_GC #include #define malloc(n) GC_malloc(n) @@ -28,37 +29,10 @@ void safeExit(int sig) { _exit(0); } -int srv(char* ADDR, int PORT) { - int srvSocket; - struct sockaddr_in srvAddr; - - srvSocket = socket(AF_INET, SOCK_STREAM, 0); - - srvAddr.sin_family = AF_INET; - srvAddr.sin_port = htons(PORT); - srvAddr.sin_addr.s_addr = inet_addr(ADDR); +void *handle(void* arg) { + int client = *(int*)arg; - if (bind( - srvSocket, - (struct sockaddr*) &srvAddr, - sizeof(srvAddr) - ) < 0) { - error("Failed to bind to %s:%d.\n", ADDR, PORT); - return 1; - } - - if (listen(srvSocket, 10) < 0) { - error("Unable to listen on %s:%d.\n", ADDR, PORT); - return 1; - } - - signal(SIGINT, safeExit); - - info("Server (probably) listening on http://%s:%d\n", ADDR, PORT); - - while(1) { int hasTriedIndex; - int client = accept(srvSocket, NULL, NULL); ReqHeader request = readReqHeader(client); funy: { char* dot = strrchr(request.path, '.'); @@ -115,5 +89,39 @@ funy: { send(client, resHeader, strlen(resHeader), 0); close(client); } + return 0; +} + +int srv(char* ADDR, int PORT) { + int srvSocket; + struct sockaddr_in srvAddr; + + srvSocket = socket(AF_INET, SOCK_STREAM, 0); + + srvAddr.sin_family = AF_INET; + srvAddr.sin_port = htons(PORT); + srvAddr.sin_addr.s_addr = inet_addr(ADDR); + + if (bind( + srvSocket, + (struct sockaddr*) &srvAddr, + sizeof(srvAddr) + ) < 0) { + error("Failed to bind to %s:%d.\n", ADDR, PORT); + return 1; + } + + if (listen(srvSocket, 10) < 0) { + error("Unable to listen on %s:%d.\n", ADDR, PORT); + return 1; + } + + signal(SIGINT, safeExit); + + info("Server (probably) listening on http://%s:%d\n", ADDR, PORT); + + while(1) { + int client = accept(srvSocket, NULL, NULL); + handle(&client); } }