itWrap text files in HTML too - phroxy - Gopher to HTTP proxy Err z3bra.org 70 hgit clone git://git.z3bra.org/phroxy.git URL:git://git.z3bra.org/phroxy.git z3bra.org 70 1Log /scm/phroxy/log.gph z3bra.org 70 1Files /scm/phroxy/files.gph z3bra.org 70 1Refs /scm/phroxy/refs.gph z3bra.org 70 1LICENSE /scm/phroxy/file/LICENSE.gph z3bra.org 70 i--- Err z3bra.org 70 1commit fe4f5657743a30daa28fe32376c1158b0b0240d3 /scm/phroxy/commit/fe4f5657743a30daa28fe32376c1158b0b0240d3.gph z3bra.org 70 1parent e133739f4bb2117d8e6389ab5a7ce83291131410 /scm/phroxy/commit/e133739f4bb2117d8e6389ab5a7ce83291131410.gph z3bra.org 70 hAuthor: Willy Goiffon URL:mailto:dev@z3bra.org z3bra.org 70 iDate: Mon, 14 Sep 2020 15:50:32 +0200 Err z3bra.org 70 i Err z3bra.org 70 iWrap text files in HTML too Err z3bra.org 70 i Err z3bra.org 70 iDiffstat: Err z3bra.org 70 i M config.def.h | 4 ++-- Err z3bra.org 70 i M phroxy.c | 74 +++++++++++++++++++++---------- Err z3bra.org 70 i Err z3bra.org 70 i2 files changed, 52 insertions(+), 26 deletions(-) Err z3bra.org 70 i--- Err z3bra.org 70 1diff --git a/config.def.h b/config.def.h /scm/phroxy/file/config.def.h.gph z3bra.org 70 it@@ -7,7 +7,7 @@ const char *htmlfmt = Err z3bra.org 70 i "" Err z3bra.org 70 i "gopher proxy\n" Err z3bra.org 70 i "\n" Err z3bra.org 70 i- "
\n"	Err	z3bra.org	70
i+        "\n"	Err	z3bra.org	70
i         "%s\n"	Err	z3bra.org	70
i-        "
\n"; Err z3bra.org 70 i+ "\n"; Err z3bra.org 70 i Err z3bra.org 70 1diff --git a/phroxy.c b/phroxy.c /scm/phroxy/file/phroxy.c.gph z3bra.org 70 it@@ -180,14 +180,24 @@ contenttype(char i) Err z3bra.org 70 i { Err z3bra.org 70 i switch(i) { Err z3bra.org 70 i case '0': Err z3bra.org 70 i- return "text/plain; charset=utf-8"; Err z3bra.org 70 i- break; /* NOTREACHED */ Err z3bra.org 70 i case '1': Err z3bra.org 70 i+ case '7': Err z3bra.org 70 i return "text/html; charset=utf-8"; Err z3bra.org 70 i break; /* NOTREACHED */ Err z3bra.org 70 i+ case '6': Err z3bra.org 70 i+ return "text/x-uuencode"; Err z3bra.org 70 i+ break; /* NOTREACHED */ Err z3bra.org 70 i+ case '4': Err z3bra.org 70 i+ case '5': Err z3bra.org 70 i case '9': Err z3bra.org 70 i return "application/octet-stream"; Err z3bra.org 70 i break; /* NOTREACHED */ Err z3bra.org 70 i+ case 'I': Err z3bra.org 70 i+ return "image/youguess"; Err z3bra.org 70 i+ break; /* NOTREACHED */ Err z3bra.org 70 i+ case 'g': Err z3bra.org 70 i+ return "image/gif"; Err z3bra.org 70 i+ break; /* NOTREACHED */ Err z3bra.org 70 i } Err z3bra.org 70 i Err z3bra.org 70 i return NULL; Err z3bra.org 70 it@@ -209,11 +219,11 @@ printheaders(char *ctype) Err z3bra.org 70 i } Err z3bra.org 70 i Err z3bra.org 70 i char * Err z3bra.org 70 i-htmlize(char *data, size_t *htmlsize) Err z3bra.org 70 i+htmlize(char *data, size_t *bodysize) Err z3bra.org 70 i { Err z3bra.org 70 i- size_t alen, blen, hlen; Err z3bra.org 70 i- char *html = NULL; Err z3bra.org 70 i- char i, *p, *body, a[LINE_MAX], *f[4]; Err z3bra.org 70 i+ size_t alen, blen; Err z3bra.org 70 i+ char *body = NULL; Err z3bra.org 70 i+ char i, *p, a[LINE_MAX], *f[4]; Err z3bra.org 70 i char *fmt = "%s\n"; Err z3bra.org 70 i Err z3bra.org 70 i blen = 0; Err z3bra.org 70 it@@ -240,18 +250,31 @@ htmlize(char *data, size_t *htmlsize) Err z3bra.org 70 i default: Err z3bra.org 70 i snprintf(a, sizeof(a), fmt, http_host, f[2], f[3], i, f[1], f[0]); Err z3bra.org 70 i } Err z3bra.org 70 i+ Err z3bra.org 70 i alen = strnlen(a, sizeof(a)); Err z3bra.org 70 i body = realloc(body, blen + alen); Err z3bra.org 70 i memcpy(body + blen, a, alen); Err z3bra.org 70 i blen += alen; Err z3bra.org 70 i } Err z3bra.org 70 i Err z3bra.org 70 i- hlen = strlen(htmlfmt) + blen; Err z3bra.org 70 i+ if (bodysize) Err z3bra.org 70 i+ *bodysize = blen; Err z3bra.org 70 i+ Err z3bra.org 70 i+ return body; Err z3bra.org 70 i+} Err z3bra.org 70 i+ Err z3bra.org 70 i+char * Err z3bra.org 70 i+htmlwrap(char *data, size_t len, size_t *htmlsize) Err z3bra.org 70 i+{ Err z3bra.org 70 i+ size_t hlen; Err z3bra.org 70 i+ char *html = NULL; Err z3bra.org 70 i+ Err z3bra.org 70 i+ hlen = strlen(htmlfmt) + len; Err z3bra.org 70 i html = malloc(hlen); Err z3bra.org 70 i if (!html) Err z3bra.org 70 i return NULL; Err z3bra.org 70 i Err z3bra.org 70 i- snprintf(html, hlen, htmlfmt, body); Err z3bra.org 70 i+ snprintf(html, hlen, htmlfmt, data); Err z3bra.org 70 i Err z3bra.org 70 i if (htmlsize) Err z3bra.org 70 i *htmlsize = hlen; Err z3bra.org 70 it@@ -266,27 +289,31 @@ serveitem(char item, char *data, size_t len) Err z3bra.org 70 i int sent; Err z3bra.org 70 i Err z3bra.org 70 i switch(item) { Err z3bra.org 70 i- case '1': Err z3bra.org 70 i+ case '7': // search Err z3bra.org 70 i+ case '1': // menu Err z3bra.org 70 i html = htmlize(data, &len); Err z3bra.org 70 i free(data); Err z3bra.org 70 i data = html; Err z3bra.org 70 i- break; Err z3bra.org 70 i+ /* FALLTHROUGH */ Err z3bra.org 70 i Err z3bra.org 70 i- case '0': Err z3bra.org 70 i- case '6': Err z3bra.org 70 i- case '9': Err z3bra.org 70 i- case 'g': Err z3bra.org 70 i- case 'I': Err z3bra.org 70 i+ case '0': // text Err z3bra.org 70 i+ html = htmlwrap(data, len, &len); Err z3bra.org 70 i+ free(data); Err z3bra.org 70 i+ data = html; Err z3bra.org 70 i+ break; Err z3bra.org 70 i+ case '4': // BinHexed Macintosh file Err z3bra.org 70 i+ case '5': // DOS binary archive of some sort Err z3bra.org 70 i+ case '6': // uuencoded Err z3bra.org 70 i+ case '9': // binary Err z3bra.org 70 i+ case 'g': // gif Err z3bra.org 70 i+ case 'I': // image Err z3bra.org 70 i break; Err z3bra.org 70 i Err z3bra.org 70 i- case '2': // Item is a CSO phone-book server Err z3bra.org 70 i- case '3': // Error Err z3bra.org 70 i- case '4': // Item is a BinHexed Macintosh file. Err z3bra.org 70 i- case '5': // Item is DOS binary archive of some sort. Err z3bra.org 70 i- case '7': // Item is an Index-Search server. Err z3bra.org 70 i- case '8': // Item points to a text-based telnet session. Err z3bra.org 70 i- case 'T': // Item points to a text-based tn3270 session. Err z3bra.org 70 i- case '+': Err z3bra.org 70 i+ case '2': // CSO phone-book server Err z3bra.org 70 i+ case '3': // Error Err z3bra.org 70 i+ case '8': // telnet session. Err z3bra.org 70 i+ case 'T': // tn3270 session. Err z3bra.org 70 i+ case '+': // mirror link Err z3bra.org 70 i default: Err z3bra.org 70 i /* IGNORE */ Err z3bra.org 70 i print415(); Err z3bra.org 70 it@@ -296,7 +323,6 @@ serveitem(char item, char *data, size_t len) Err z3bra.org 70 i printf("HTTP/1.1 200 OK\r\n"); Err z3bra.org 70 i printheaders(contenttype(item)); Err z3bra.org 70 i Err z3bra.org 70 i- Err z3bra.org 70 i printf("Content-Length: %ld\r\n", len); Err z3bra.org 70 i printf("\r\n"); Err z3bra.org 70 i fflush(stdout); Err z3bra.org 70 .