From: Christopher Faulet Date: Fri, 20 Nov 2020 13:30:38 +0000 (+0100) Subject: MINOR: h1-htx/http-ana: Set BODYLESS flag on message in TUNNEL state X-Git-Tag: v2.4-dev3~54 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c31bc724d4e6793c8a543d03e3b4f968d6fcba29;p=thirdparty%2Fhaproxy.git MINOR: h1-htx/http-ana: Set BODYLESS flag on message in TUNNEL state When a H1 message is parsed, if the parser state is switched to TUNNEL mode just after the header parsing, the BODYLESS flag is set on the HTX start-line. By transitivity, the corresponding flag is set on the message in HTTP analysers. Thus it is possible to rely on it to not wait for the request body. --- diff --git a/src/h1_htx.c b/src/h1_htx.c index a2ee5108d3..734f9cbce7 100644 --- a/src/h1_htx.c +++ b/src/h1_htx.c @@ -146,6 +146,8 @@ static unsigned int h1m_htx_sl_flags(struct h1m *h1m) else flags |= HTX_SL_F_BODYLESS; } + if (h1m->state == H1_MSG_TUNNEL) + flags |= HTX_SL_F_BODYLESS; return flags; } diff --git a/src/http_ana.c b/src/http_ana.c index 741ec56b1b..5dfd41bde6 100644 --- a/src/http_ana.c +++ b/src/http_ana.c @@ -875,8 +875,8 @@ int http_wait_for_request_body(struct stream *s, struct channel *req, int an_bit if (htx->flags & HTX_FL_PROCESSING_ERROR) goto return_int_err; - /* CONNECT requests have no body */ - if (txn->meth == HTTP_METH_CONNECT) + /* Do nothing for bodyless and CONNECT requests */ + if (txn->meth == HTTP_METH_CONNECT || (msg->flags & HTTP_MSGF_BODYLESS)) goto http_end; /* We have to parse the HTTP request body to find any required data.