From 4d323d55cd4393e423dbe20faf3797a70c5db491 Mon Sep 17 00:00:00 2001 From: Ruthenic Date: Mon, 9 May 2022 03:20:40 -0400 Subject: [PATCH] factor out mimetypes, probably something else --- bin/httpsrv | Bin 23688 -> 23760 bytes lib/color.h | 1 + lib/file.h | 1 + lib/log.h | 1 + lib/mime.h | 53 ++++++++++++++++++++++++++++++++++++++++++++++++ lib/reqHeader.h | 1 + lib/resHeader.h | 1 + src/srv.c | 45 +++------------------------------------- 8 files changed, 61 insertions(+), 42 deletions(-) create mode 100644 lib/mime.h diff --git a/bin/httpsrv b/bin/httpsrv index 63fe9fe91a630f69001a16666f4abedad71e7232..606e68f59d60b6250565b55fd62f5b1b1fb95e70 100755 GIT binary patch delta 2417 zcmZWr3s6+o89sNHWgKM#e%p{HGRWs9=Oj2iUYu-D$$x357>Nu0ONsAI6mtueagWrHlm==K( zaPlda)Qw*;CM#n;;jB+_Bvz$|wzm;?Ozr!Yv3H$GodcTA`|@Bcbl7`)JoLI8sTf&6 zNLW@9>Tw7MV?E_^#B>2zfAvumDtMJt^S~J`+Uv=}-LXwuq|MS6>HcHpf&qvKfuAwh z$jY?Zr@1i?C_4O665f`CpVi?vlkhqX4x0z4j{iQ1SLy15!y0V*4Paz)gcm#cxVZq8 z$&uk}%EVNkdE841H;fJEmoc1WiALMt}9xvSd+%OBrJc(|6^|OCm1A0C2f!zrS(z+ zhS+zxH3hSC1>~WW#SUJOGGN~bh!?TbUZzZiRqL%*c_2 zwH9sSA8LtBUa!h5IcP$H@ zQoGSixv9aP$s&dprP}gI@_N}&1hpne`YnMOJYzqXtnwvr$U5{}v`NknLI_h2_ z7I)h^{h?MTZz3Vl`OByf9>xicBEC-;&ji&{u&k9cSz^*8}B0 z`$eBI<^jD9+ROP1jJ?h2MT{4;3iLXsml$(kJXI=V4V+FuA2e%{vGWFECMPa4R*pcQ ze$H5{kuE7O%G+_4u_cH_JZbz65Ia7+zoeJ?%ZnFQBBKHhW39s1iO)m#m#;RQJV(dN z?+`*Xzv9QjMtW~W>B6Pw8T%0w$QseYAA~lfR7sz%C^ckVpuetIk{Sna_5!`HqA2_z zE|qzcj$l9^=Xy(H2Rm5gogEkX@;gSlORe zCqAEHtP(QC%GF|-Bs!q;pP+T{N6PRWfWzSldjDhEso3N{D4{J#d>SbrvMYjf!C;P&Qd>Dqilw07M?M!`>C zZggeDlO@IJxyCx-G%eZS%KqNp9va->TF}aW30QNq-WWZ&VMPk=`^2W@8Q1v0u};#G M&C7-3)W5m--;y6KoB#j- delta 2168 zcmZuyeN0nV6o0pX6vVb73~(}9EE|r6QlvxYM=UZZ(k&8E;sz5!MKK5nog>+@$}H*| z)S%a7Q}GWC+l+}>NY#ikMmFY0MvUV2hshj>3?GVoINWqo?|%2ahwkep@11*o=bYa? z=iKw!%k5-WJ84cN+CB67LfU2u@@k_qi6ulEtY}()4zUnZ%X~%sw`@{ip^5I-j722C=bFpy5_iI}aqIh`Jiu#g)6_YqlI&uV-A>Q#>V z5l5gPWHwq{j>f=*MDRI8uXzD5YnQ|Kf!UBLj!OLx7;`qd%+a06aBzyZq)Wdtmb0*1 z?|ql>i0>Q?U3zah-}`K*!Z~zax(y$|4ZWPy7rSVdAV{CzV{H2ZruVjb;Cx9ApJjob#(gn~v z#8KgU?1lECZ_Cs~Y}@5h$0VYZ>J3pkutkM$gPJ!cT!GiA@Kp|bfFD$Fr-GwL z)3B3Hs!@ZyaB&DtNd=55oqr-jU+hS2a=iG8Dfi=F{U=sK=>OQ79WC z6G4K3ILR{fv*8RP1hG%dG)G7y02{jM)^>)no_NJy!Ggg1O3!UJN^ZvwG2W0opj0pkwQM6}W4F zG5$??As;~I-(+ktrZ#Pmu{y~7Ul=>V#vyvZ7QbRK z)N!bj$a)j17BX}OpC&^W-4tNg8FvKQb&1=9vUTIy05b{IB`(()?Ye0AWazZn)8U@N zA5>+&O~ccZV_et@cNoJLC9jou^P)TG+VpH0C$5pFQwVqR)gtN3QCyMmQ?>_lGA-@CpStN$PV_peVn43*X&{RoQ*}71* zZZj%Y9eT*u5}6^7nw(LwMXHZsj$-4}!FTGb(5&^mtjHPurYPF-O$6 z@o2?=D((ya4d>AS`pL?x{+hfw8h`Vu;s9c&6KgCXt!k33bY4L=IY74*SZ4m`U!S%W qSi%$eTwzVgevSWL!O}pINUeqGAs3vA^$gtt?V~(J+d-|X #include #include diff --git a/lib/log.h b/lib/log.h index a62b19c..0108905 100644 --- a/lib/log.h +++ b/lib/log.h @@ -1,3 +1,4 @@ +#pragma once #include #include #include diff --git a/lib/mime.h b/lib/mime.h new file mode 100644 index 0000000..e618ed5 --- /dev/null +++ b/lib/mime.h @@ -0,0 +1,53 @@ +#pragma once +#include +#ifdef NO_GC +#include +#define malloc(n) GC_malloc(n) +#else +#include +#endif + +#include "log.h" + +int hasTriedIndex; + +int getMime(char** mime, char* filename) { + char* dot = strrchr(filename, '.'); + + if (!dot || dot == filename) { + if (!hasTriedIndex) { + hasTriedIndex++; + strcat(filename, "/index.html"); + info("trying to upgrade directory to index.html"); + return getMime(mime, filename); + } else { + warn("file extension does not exist or is the same as request's path.\n"); + hasTriedIndex = 1; + *mime = "text/plain"; + return 0; + } + } else { + if (!strcmp(dot, ".html")) { + *mime = "text/html"; + } else if (!strcmp(dot, ".css")) { + *mime = "text/css"; + } else if (!strcmp(dot, ".js")) { + *mime = "text/javascript"; + } else if (!strcmp(dot, ".woff2")) { + *mime = "font/woff2"; + return 1; + } else if (!strcmp(dot, ".ico")) { + *mime = "image/vnd.microsoft.icon"; + return 1; + } else { + warn("mimetype for %s not found\n", filename); + *mime = "text/plain"; + } + if (hasTriedIndex == 1) { + hasTriedIndex = 2; + } else { + hasTriedIndex = 0; + } + } + return 0; +} diff --git a/lib/reqHeader.h b/lib/reqHeader.h index 2b7cfc2..0ffecfb 100644 --- a/lib/reqHeader.h +++ b/lib/reqHeader.h @@ -1,3 +1,4 @@ +#pragma once #include #include #include diff --git a/lib/resHeader.h b/lib/resHeader.h index 6b66d7d..7178afb 100644 --- a/lib/resHeader.h +++ b/lib/resHeader.h @@ -1,3 +1,4 @@ +#pragma once #include typedef struct { diff --git a/src/srv.c b/src/srv.c index 39916c9..0a57a1b 100644 --- a/src/srv.c +++ b/src/srv.c @@ -19,7 +19,7 @@ #include "reqHeader.h" #include "file.h" #include "log.h" - +#include "mime.h" void safeExit(int sig) { info("Exiting...\n"); @@ -32,51 +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, '.'); - ResHeader rawHeader; rawHeader.protocol = request.protocol; rawHeader.status = 200; rawHeader.notice = "OK"; - 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")) { - 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"; - } - if (hasTriedIndex == 1) { - hasTriedIndex = 2; - } else { - hasTriedIndex = 0; - } - } + int useBinary = getMime(&rawHeader.mime, request.path); + if (errno == -1) { rawHeader.status = 404; rawHeader.notice = "Not Found"; @@ -104,7 +66,6 @@ funy: { //sprintf(resHeader, "%s%s", (char*)tmpHeader, file); //send(client, resHeader, strlen(resHeader), 0); close(client); - } return 0; }