mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2025-05-04 16:57:58 +00:00
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.
This commit is contained in:
parent
d23435df28
commit
115ccce867
14
src/h3.c
14
src/h3.c
@ -22,6 +22,7 @@
|
||||
#include <haproxy/h3.h>
|
||||
#include <haproxy/h3_stats.h>
|
||||
#include <haproxy/http.h>
|
||||
#include <haproxy/http_htx.h>
|
||||
#include <haproxy/htx.h>
|
||||
#include <haproxy/intops.h>
|
||||
#include <haproxy/istbuf.h>
|
||||
@ -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);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user