From 8bd13942e1be51cb9b244b960b1a886671ad1699 Mon Sep 17 00:00:00 2001 From: Ruthenic Date: Tue, 3 May 2022 01:04:33 -0400 Subject: [PATCH] custom loggings and try expand dirs --- bin/httpsrv | Bin 17592 -> 21864 bytes lib/color.h | 80 ++++++++++++++++++++++++++++++++++++++++++++++++++++ lib/log.h | 47 ++++++++++++++++++++++++++++++ src/srv.c | 37 ++++++++++++++++++------ 4 files changed, 156 insertions(+), 8 deletions(-) create mode 100644 lib/color.h create mode 100644 lib/log.h diff --git a/bin/httpsrv b/bin/httpsrv index bd959293e3129ad96d65bce73259441b024e39da..ff7a87b77b6bfae87cc79316c53d911e248c0613 100755 GIT binary patch literal 21864 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 diff --git a/lib/color.h b/lib/color.h new file mode 100644 index 0000000..3362e12 --- /dev/null +++ b/lib/color.h @@ -0,0 +1,80 @@ +/* + * This is free and unencumbered software released into the public domain. + * + * For more information, please refer to + */ + +//Regular text +#define BLK "\e[0;30m" +#define RED "\e[0;31m" +#define GRN "\e[0;32m" +#define YEL "\e[0;33m" +#define BLU "\e[0;34m" +#define MAG "\e[0;35m" +#define CYN "\e[0;36m" +#define WHT "\e[0;37m" + +//Regular bold text +#define BBLK "\e[1;30m" +#define BRED "\e[1;31m" +#define BGRN "\e[1;32m" +#define BYEL "\e[1;33m" +#define BBLU "\e[1;34m" +#define BMAG "\e[1;35m" +#define BCYN "\e[1;36m" +#define BWHT "\e[1;37m" + +//Regular underline text +#define UBLK "\e[4;30m" +#define URED "\e[4;31m" +#define UGRN "\e[4;32m" +#define UYEL "\e[4;33m" +#define UBLU "\e[4;34m" +#define UMAG "\e[4;35m" +#define UCYN "\e[4;36m" +#define UWHT "\e[4;37m" + +//Regular background +#define BLKB "\e[40m" +#define REDB "\e[41m" +#define GRNB "\e[42m" +#define YELB "\e[43m" +#define BLUB "\e[44m" +#define MAGB "\e[45m" +#define CYNB "\e[46m" +#define WHTB "\e[47m" + +//High intensty background +#define BLKHB "\e[0;100m" +#define REDHB "\e[0;101m" +#define GRNHB "\e[0;102m" +#define YELHB "\e[0;103m" +#define BLUHB "\e[0;104m" +#define MAGHB "\e[0;105m" +#define CYNHB "\e[0;106m" +#define WHTHB "\e[0;107m" + +//High intensty text +#define HBLK "\e[0;90m" +#define HRED "\e[0;91m" +#define HGRN "\e[0;92m" +#define HYEL "\e[0;93m" +#define HBLU "\e[0;94m" +#define HMAG "\e[0;95m" +#define HCYN "\e[0;96m" +#define HWHT "\e[0;97m" + +//Bold high intensity text +#define BHBLK "\e[1;90m" +#define BHRED "\e[1;91m" +#define BHGRN "\e[1;92m" +#define BHYEL "\e[1;93m" +#define BHBLU "\e[1;94m" +#define BHMAG "\e[1;95m" +#define BHCYN "\e[1;96m" +#define BHWHT "\e[1;97m" + +//Reset +#define reset "\e[0m" +#define CRESET "\e[0m" +#define COLOR_RESET "\e[0m" diff --git a/lib/log.h b/lib/log.h new file mode 100644 index 0000000..e992a98 --- /dev/null +++ b/lib/log.h @@ -0,0 +1,47 @@ +#include +#include +#include +#include + +#include "color.h" + +void info(char* ustr, ...) { + char* tstr = GRN "INFO: " CRESET; + char* str = malloc(strlen(tstr) + strlen(ustr)); + sprintf(str, "%s%s", tstr, ustr); + //strcat(str, ustr); + + va_list lst; + va_start(lst, ustr); + vprintf(str, lst); +} + +void warn(char* ustr, ...) { + char* tstr = YEL "WARN: " CRESET; + char* str = malloc(strlen(tstr) + strlen(ustr)); + sprintf(str, "%s%s", tstr, ustr); + + va_list lst; + va_start(lst, ustr); + vprintf(str, lst); +} + +void error(char* ustr, ...) { + char* tstr = RED "ERR: " CRESET; + char* str = malloc(strlen(tstr) + strlen(ustr)); + sprintf(str, "%s%s", tstr, ustr); + + va_list lst; + va_start(lst, ustr); + vprintf(str, lst); +} + +void reqlog(char* ustr, ...) { + char* tstr = WHT "REQ: " CRESET; + char* str = malloc(strlen(tstr) + strlen(ustr)); + sprintf(str, "%s%s", tstr, ustr); + + va_list lst; + va_start(lst, ustr); + vprintf(str, lst); +} diff --git a/src/srv.c b/src/srv.c index d8d8ee8..9b08f32 100644 --- a/src/srv.c +++ b/src/srv.c @@ -11,6 +11,7 @@ #include "resHeader.h" #include "reqHeader.h" #include "file.h" +#include "log.h" int srv(char* ADDR, int PORT) { char buffer[BUFSIZ]; @@ -28,29 +29,41 @@ int srv(char* ADDR, int PORT) { (struct sockaddr*) &srvAddr, sizeof(srvAddr) ) < 0) { - printf("Error: Failed to bind to %s:%d.\n", ADDR, PORT); + error("Failed to bind to %s:%d.\n", ADDR, PORT); return 1; } if (listen(srvSocket, 10) < 0) { - printf("Error: Unable to listen on %s:%d.\n", ADDR, PORT); + error("Unable to listen on %s:%d.\n", ADDR, PORT); return 1; } - printf("Server (probably) listening on http://%s:%d\n", ADDR, PORT); + 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); - char* tPath = request.path; - char* dot = strrchr(tPath, '.'); +funy: { + char* dot = strrchr(request.path, '.'); char *file = readFile(request.path); ResHeader rawHeader; rawHeader.protocol = request.protocol; rawHeader.status = 200; rawHeader.notice = "OK"; - if (!dot || dot == tPath) { rawHeader.mime = "text/html"; } else { + if (!dot || dot == request.path) { + if (!hasTriedIndex) { + strcat(request.path, "/index.html"); + info("trying to upgrade directory to index.html\n"); + hasTriedIndex = 1; + goto funy; + } else { + warn("file extension does not exist or is the same as request path\n"); + hasTriedIndex = 1; + rawHeader.mime = "text/plain"; + } + } else { if (!strcmp(dot, ".html")) { rawHeader.mime = "text/html"; } else if (!strcmp(dot, ".css")) { @@ -60,18 +73,25 @@ int srv(char* ADDR, int PORT) { } else if (!strcmp(dot, ".js")) { rawHeader.mime = "text/javascript"; } else { + warn("mimetype for %s not found\n", request.path); rawHeader.mime = "text/plain"; } + if (hasTriedIndex == 1) { + hasTriedIndex = 2; + } else { + hasTriedIndex = 0; + } } if (errno == -1) { rawHeader.status = 404; rawHeader.notice = "Not Found"; - } else if (errno > 0) { + } else if (errno > 0 && !(hasTriedIndex == 2)) { rawHeader.status = 500; rawHeader.notice = "Internal Server Error"; } errno = 0; - printf("%d %s\n", rawHeader.status, request.path); + hasTriedIndex = 0; + reqlog("%d %s\n", rawHeader.status, request.path); char tmpHeader[1024]; makeHeader(tmpHeader, &rawHeader); char resHeader[1024]; //= "HTTP/1.1 200 OK\r\n\nHello, world!"; @@ -79,4 +99,5 @@ int srv(char* ADDR, int PORT) { send(client, resHeader, strlen(resHeader), 0); close(client); } + } }