From cda88d2f7691b7665509292e0d31c3e2aaed4efe Mon Sep 17 00:00:00 2001 From: Ruthenic Date: Mon, 9 May 2022 03:02:52 -0400 Subject: [PATCH] le binary file --- bin/httpsrv | Bin 19512 -> 23688 bytes lib/file.h | 33 +++++++++++++++++++++++++++++++-- src/srv.c | 24 ++++++++++++++++++++---- 3 files changed, 51 insertions(+), 6 deletions(-) diff --git a/bin/httpsrv b/bin/httpsrv index 8f6f9f9035807b1e211865324245039257d246b3..63fe9fe91a630f69001a16666f4abedad71e7232 100755 GIT binary patch delta 7242 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 diff --git a/lib/file.h b/lib/file.h index 52b29ec..85e2701 100644 --- a/lib/file.h +++ b/lib/file.h @@ -3,6 +3,7 @@ #include #include #include +#include #ifdef NO_GC #include #define malloc(n) GC_malloc(n) @@ -23,16 +24,44 @@ char* readFile(char* path) { errno = -1; return ""; } - char* buf = NULL; + char* buf; fseek(fp, 0, SEEK_END); int length = ftell(fp); rewind(fp); buf = (char*)malloc(sizeof(char) * (length + 1)); fread(buf, sizeof(char), length, fp); - buf[length] = '\0'; fclose(fp); char* tmp = buf; return tmp; } + +void* readFileBin(int* len, char* path) { + path++; + if (strlen(path) <= 1) { + printf("/ converted to /index.html\n"); + path = (char*)malloc(11); + path = "index.html"; + } + + FILE* fp = fopen(path, "rb"); + if (!(access(path, F_OK) == 0)) { + errno = -1; + return ""; + } + void* buf; + + struct stat st; + stat(path, &st); + int length = st.st_size; + *len = length; + printf("%d\n", length); + + buf = (void*)malloc(sizeof(int) * (length + 1)); + fread(buf, sizeof(int), length, fp); + fclose(fp); + + void* tmp = buf; + return tmp; +} diff --git a/src/srv.c b/src/srv.c index 4391201..39916c9 100644 --- a/src/srv.c +++ b/src/srv.c @@ -32,12 +32,13 @@ void safeExit(int sig) { void *handle(void* arg) { int client = *(int*)arg; + + int useBinary = 0; int hasTriedIndex; ReqHeader request = readReqHeader(client); funy: { char* dot = strrchr(request.path, '.'); - char *file = readFile(request.path); ResHeader rawHeader; rawHeader.protocol = request.protocol; rawHeader.status = 200; @@ -60,8 +61,12 @@ funy: { rawHeader.mime = "text/css"; } else if (!strcmp(dot, ".ico")) { rawHeader.mime = "image/vnd.microsoft.icon"; + useBinary = 1; } else if (!strcmp(dot, ".js")) { rawHeader.mime = "text/javascript"; + } else if (!strcmp(dot, ".woff2")) { + rawHeader.mime = "font/woff2"; + useBinary = 1; } else { warn("mimetype for %s not found\n", request.path); rawHeader.mime = "text/plain"; @@ -84,9 +89,20 @@ funy: { reqlog("%d %s\n", rawHeader.status, request.path); char tmpHeader[1024]; makeHeader(tmpHeader, &rawHeader); - char* resHeader = malloc(strlen(tmpHeader) + strlen(file) + 1); //= "HTTP/1.1 200 OK\r\n\nHello, world!"; - sprintf(resHeader, "%s%s", (char*)tmpHeader, file); - send(client, resHeader, strlen(resHeader), 0); + + send(client, tmpHeader, strlen(tmpHeader), 0); + void* file; + if (!useBinary) { + file = readFile(request.path); + send(client, file, strlen(file), 0); + } else { + int len; + file = readFileBin(&len, request.path); + send(client, file, len, 0); + } + //char* resHeader = malloc(strlen(tmpHeader) + strlen(file) + 1); //= "HTTP/1.1 200 OK\r\n\nHello, world!"; + //sprintf(resHeader, "%s%s", (char*)tmpHeader, file); + //send(client, resHeader, strlen(resHeader), 0); close(client); } return 0;