From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: X-Spam-Status: No, score=-4.1 required=3.0 tests=ALL_TRUSTED,AWL,BAYES_00, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF shortcircuit=no autolearn=ham autolearn_force=no version=3.4.2 Received: from localhost (dcvr.yhbt.net [127.0.0.1]) by dcvr.yhbt.net (Postfix) with ESMTP id AE2891F9FC for ; Wed, 21 Dec 2022 11:34:05 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=80x24.org; s=selector1; t=1671622445; bh=K0/xisJI/bw9i9b2Vy95Y8azdSfeirh1nAmG4oDk8gI=; h=From:To:Subject:Date:In-Reply-To:References:From; b=iG2nGX90vXrospzlov+WU5978IAd9xsRGJWRc75IUUU/w2tWRaFhC7lulItG6TTz+ 9hhhkn33J10Qn518MNvZQ9MRy2Fn2Ka1LmqEDZNP0Uu1CPYdiy+nX59iiaEiNkLFjs qI9uspKT8FrUz4EOG4Wxj/6mHRWWMcoLOxH8kTVQ= From: Eric Wong To: mwrap-perl@80x24.org Subject: [PATCH 2/3] httpd: drop persistent connection support Date: Wed, 21 Dec 2022 11:34:04 +0000 Message-Id: <20221221113405.2129-3-e@80x24.org> In-Reply-To: <20221221113405.2129-1-e@80x24.org> References: <20221221113405.2129-1-e@80x24.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit List-Id: It's not worth the extra complexity, binary size, and icache bloat for a AF_UNIX-only server. --- httpd.h | 33 +++++++-------------------------- 1 file changed, 7 insertions(+), 26 deletions(-) diff --git a/httpd.h b/httpd.h index a59c9dd..128836c 100644 --- a/httpd.h +++ b/httpd.h @@ -78,9 +78,8 @@ struct mw_h1 { /* each HTTP/1.x client (heap) */ int fd; short events; /* for poll */ unsigned prev_len:13; /* capped by MW_RBUF_SIZE */ - unsigned persist:1; /* HTTP/1.1 */ unsigned has_input:1; - unsigned unused_:1; + unsigned unused_:2; struct mw_h1req *h1r; /* only for slow clients */ unsigned long in_len; struct mw_wbuf *wbuf; @@ -211,9 +210,7 @@ static enum mw_qev h1_send_flush(struct mw_h1 *h1) } } } while (mh.msg_iovlen); - free(wbuf); - h1->wbuf = NULL; - return h1->persist ? MW_QEV_RD : h1_close(h1); + return h1_close(h1); } static FILE *fbuf_init(struct mw_fbuf *fb) @@ -285,6 +282,7 @@ static enum mw_qev h1_200(struct mw_h1 *h1, struct mw_fbuf *fb, const char *ct) clen -= sizeof(struct mw_wbuf); mwrap_assert(clen >= 0); FPUTS("HTTP/1.1 200 OK\r\n" + "Connection: close\r\n" "Expires: Fri, 01 Jan 1980 00:00:00 GMT\r\n" "Pragma: no-cache\r\n" "Cache-Control: no-cache, max-age=0, must-revalidate\r\n" @@ -309,8 +307,8 @@ static enum mw_qev h1_404(struct mw_h1 *h1) { static const char r404[] = "HTTP/1.1 404 Not Found\r\n" "Content-Type: text/html\r\n" + "Connection: close\r\n" "Content-Length: 10\r\n\r\n" "Not Found\n"; - if (h1->has_input) h1->persist = 0; return h1_res_oneshot(h1, r404, sizeof(r404) - 1); } @@ -319,16 +317,12 @@ static int name_eq(const struct phr_header *h, const char *name, size_t len) { return h->name_len == len && !strncasecmp(name, h->name, len); } -#define VAL_EQ(h, VAL) val_eq(h, VAL, sizeof(VAL)-1) -static int val_eq(const struct phr_header *h, const char *val, size_t len) -{ - return h->value_len == len && !strncasecmp(val, h->value, len); -} static enum mw_qev h1_do_reset(struct mw_h1 *h1) { static const char r200[] = "HTTP/1.1 200 OK\r\n" "Content-Type: text/plain\r\n" + "Connection: close\r\n" "Content-Length: 6\r\n\r\n" "reset\n"; mwrap_reset(); return h1_res_oneshot(h1, r200, sizeof(r200) - 1); @@ -338,6 +332,7 @@ static enum mw_qev h1_do_trim(struct mw_h1 *h1) { static const char r200[] = "HTTP/1.1 200 OK\r\n" "Content-Type: text/plain\r\n" + "Connection: close\r\n" "Content-Length: 9\r\n\r\n" "trimming\n"; malloc_trim(0); return h1_res_oneshot(h1, r200, sizeof(r200) - 1); @@ -867,15 +862,13 @@ static void ctl_set(struct mw_h1 *h1, long n) static enum mw_qev h1_parse_harder(struct mw_h1 *h1, struct mw_h1req *h1r) { - enum { HDR_IGN, HDR_CONN, HDR_XENC, HDR_CLEN } cur = HDR_IGN; - bool conn_set = false; + enum { HDR_IGN, HDR_XENC, HDR_CLEN } cur = HDR_IGN; char *end; struct phr_header *hdr = h1r->hdr; long depth = -1; h1->prev_len = 0; h1->has_input = 0; - h1->persist = h1r->minor_ver >= 1 ? 1 : 0; h1->in_len = 0; for (hdr = h1r->hdr; h1r->nr_hdr--; hdr++) { @@ -883,8 +876,6 @@ static enum mw_qev h1_parse_harder(struct mw_h1 *h1, struct mw_h1req *h1r) cur = HDR_XENC; else if (NAME_EQ(hdr, "Content-Length")) cur = HDR_CLEN; - else if (NAME_EQ(hdr, "Connection")) - cur = HDR_CONN; else if (NAME_EQ(hdr, "Trailer")) return h1_400(h1); else if (hdr->name) { @@ -906,16 +897,6 @@ static enum mw_qev h1_parse_harder(struct mw_h1 *h1, struct mw_h1req *h1r) if (!hdr->value_len) continue; switch (cur) { - case HDR_CONN: - if (conn_set) return h1_400(h1); - conn_set = true; - if (VAL_EQ(hdr, "close")) - h1->persist = 0; - else if (VAL_EQ(hdr, "keep-alive")) - h1->persist = 1; - else - return h1_400(h1); - break; case HDR_XENC: return h1_400(h1); case HDR_CLEN: