From c31bc724d4e6793c8a543d03e3b4f968d6fcba29 Mon Sep 17 00:00:00 2001 From: Christopher Faulet Date: Fri, 20 Nov 2020 14:30:38 +0100 Subject: [PATCH] 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. --- src/h1_htx.c | 2 ++ src/http_ana.c | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/h1_htx.c b/src/h1_htx.c index a2ee5108d..734f9cbce 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 741ec56b1..5dfd41bde 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.