commit 232eee45ce904eca5fe392ba1a4f7d5f6453f142 from: Omar Polo date: Tue Sep 20 16:18:14 2022 UTC always initialize the template move the initialization to the proxy creation, and while here move the definition for the functions used by the template to fcgi.c too. commit - e3c1cbab1623421ba65631719de71534f41597a3 commit + 232eee45ce904eca5fe392ba1a4f7d5f6453f142 blob - 4d2e19d22a42622d146c5e0f90b00249de96293a blob + a9cfbd10ff1a48e28fa49445e79272d079414db4 --- fcgi.c +++ fcgi.c @@ -32,6 +32,7 @@ #include #include "log.h" +#include "tmpl.h" #include "galileo.h" @@ -474,6 +475,13 @@ fcgi_read(struct bufferevent *bev, void *d) if ((clt = calloc(1, sizeof(*clt))) == NULL) { log_warnx("calloc"); + break; + } + + clt->clt_tp = template(clt, clt_tp_puts, clt_tp_putc); + if (clt->clt_tp == NULL) { + free(clt); + log_warn("template"); break; } @@ -677,6 +685,32 @@ clt_printf(struct client *clt, const char *fmt, ...) } int +clt_tp_puts(struct template *tp, const char *str) +{ + struct client *clt = tp->tp_arg; + + if (clt_puts(clt, str) == -1) { + tp->tp_ret = -1; + return (-1); + } + + return (0); +} + +int +clt_tp_putc(struct template *tp, int c) +{ + struct client *clt = tp->tp_arg; + + if (clt_putc(clt, c) == -1) { + tp->tp_ret = -1; + return (-1); + } + + return (0); +} + +int fcgi_cmp(struct fcgi *a, struct fcgi *b) { return ((int)a->fcg_id - b->fcg_id); @@ -690,4 +724,3 @@ fcgi_client_cmp(struct client *a, struct client *b) SPLAY_GENERATE(fcgi_tree, fcgi, fcg_nodes, fcgi_cmp); SPLAY_GENERATE(client_tree, client, clt_nodes, fcgi_client_cmp); - blob - bede9bcd83c52199ed920b3b4a3b8ac63d7a072a blob + 751d06fe1ece115eb265af04a0a4eafb8a817b2c --- galileo.h +++ galileo.h @@ -157,6 +157,8 @@ int clt_write(struct client *, const uint8_t *, size_ int clt_printf(struct client *, const char *, ...) __attribute__((__format__(printf, 2, 3))) __attribute__((__nonnull__(2))); +int clt_tp_puts(struct template *, const char *); +int clt_tp_putc(struct template *, int); int fcgi_cmp(struct fcgi *, struct fcgi *); int fcgi_client_cmp(struct client *, struct client *); blob - 44302b7b6add1c4ed72d4a41d01762fe09db3ca5 blob + 58ab1fdeeafdaf3e8da708fd14c8920f3531da3f --- proxy.c +++ proxy.c @@ -564,31 +564,7 @@ parse_mime(struct client *clt, char *mime, char *lang, continue; } } - - return (0); -} - -static int -proxy_tp_puts(struct template *tp, const char *c) -{ - struct client *clt = tp->tp_arg; - - if (clt_puts(clt, c) == -1) { - tp->tp_ret = -1; - return (-1); - } - return (0); -} - -static int -proxy_tp_putc(struct template *tp, int c) -{ - struct client *clt = tp->tp_arg; - if (clt_putc(clt, c) == -1) { - tp->tp_ret = -1; - return (-1); - } return (0); } @@ -676,12 +652,10 @@ proxy_read(struct bufferevent *bev, void *d) fcgi_end_request(clt, 1); goto err; } - - if (clt->clt_translate) { - clt->clt_tp = template(clt, proxy_tp_puts, proxy_tp_putc); + if (clt->clt_translate) ctype = "text/html;charset=utf-8"; - } else + else ctype = mime; if (clt_printf(clt, "Content-Type: %s\r\n\r\n", ctype) == -1)