From 115ccce867c76723f99472f92b1e58d5c6ea4865 Mon Sep 17 00:00:00 2001 From: Amaury Denoyelle Date: Wed, 17 Aug 2022 18:02:47 +0200 Subject: [PATCH] MEDIUM: h3: concatenate multiple cookie headers As specified by RFC 9114, multiple cookie headers must be concatenated into a single entry before passing it to a HTTP/1.1 connection. To implement this, reuse the same function as already used for HTTP/2 module. This should answer to feature requested in github issue #1818. --- src/h3.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/h3.c b/src/h3.c index ea24fe8cd..53372c5e3 100644 --- a/src/h3.c +++ b/src/h3.c @@ -22,6 +22,7 @@ #include #include #include +#include #include #include #include @@ -346,6 +347,7 @@ static ssize_t h3_headers_to_htx(struct qcs *qcs, const struct buffer *buf, //struct ist scheme = IST_NULL, authority = IST_NULL; struct ist authority = IST_NULL; int hdr_idx, ret; + int cookie = -1, last_cookie = -1; TRACE_ENTER(H3_EV_RX_FRAME|H3_EV_RX_HDR, qcs->qcc->conn, qcs); @@ -409,12 +411,24 @@ static ssize_t h3_headers_to_htx(struct qcs *qcs, const struct buffer *buf, if (isteq(list[hdr_idx].n, ist(""))) break; + if (isteq(list[hdr_idx].n, ist("cookie"))) { + http_cookie_register(list, hdr_idx, &cookie, &last_cookie); + continue; + } + if (!istmatch(list[hdr_idx].n, ist(":"))) htx_add_header(htx, list[hdr_idx].n, list[hdr_idx].v); ++hdr_idx; } + if (cookie >= 0) { + if (http_cookie_merge(htx, list, cookie)) { + h3c->err = H3_INTERNAL_ERROR; + return -1; + } + } + htx_add_endof(htx, HTX_BLK_EOH); htx_to_buf(htx, &htx_buf);