mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2025-01-03 18:52:04 +00:00
BUG/MEDIUM: http-ana: Only set CF_EXPECT_MORE flag on data filtering
This flag is set by HTTP analyzers to notify that more data are epxected. It is used to know if the CO_SFL_MSG_MORE flag must be set on the connection when data are sent. Historically, it was set on chuncked messages and on compressed responses. But in HTX, the chunked messages are parsed by the H1 multipexer. So for this case, the infinite forwarding is enabled and the flag must no longer be set. For the compression, the test must be extended and be applied on all data filters. Thus it is also true for the request channel. So, now, CF_EXPECT_MORE flag is set on a request or a response channel if there is at least one data filter attached to the stream. In addition, the flag is removed when the HTTP message analysis is finished. This patch should partially fix the issue #756. It must be backported to 2.1.
This commit is contained in:
parent
9e3dc8305b
commit
2151cdd38c
@ -1246,6 +1246,8 @@ int http_request_forward_body(struct stream *s, struct channel *req, int an_bit)
|
||||
msg->msg_state = HTTP_MSG_ENDING;
|
||||
|
||||
ending:
|
||||
req->flags &= ~CF_EXPECT_MORE; /* no more data are expected */
|
||||
|
||||
/* other states, ENDING...TUNNEL */
|
||||
if (msg->msg_state >= HTTP_MSG_DONE)
|
||||
goto done;
|
||||
@ -1336,7 +1338,7 @@ int http_request_forward_body(struct stream *s, struct channel *req, int an_bit)
|
||||
* flag with the last block of forwarded data, which would cause an
|
||||
* additional delay to be observed by the receiver.
|
||||
*/
|
||||
if (msg->flags & HTTP_MSGF_TE_CHNK)
|
||||
if (HAS_REQ_DATA_FILTERS(s))
|
||||
req->flags |= CF_EXPECT_MORE;
|
||||
|
||||
DBG_TRACE_DEVEL("waiting for more data to forward",
|
||||
@ -2335,6 +2337,8 @@ int http_response_forward_body(struct stream *s, struct channel *res, int an_bit
|
||||
msg->msg_state = HTTP_MSG_ENDING;
|
||||
|
||||
ending:
|
||||
res->flags &= ~CF_EXPECT_MORE; /* no more data are expected */
|
||||
|
||||
/* other states, ENDING...TUNNEL */
|
||||
if (msg->msg_state >= HTTP_MSG_DONE)
|
||||
goto done;
|
||||
@ -2414,7 +2418,7 @@ int http_response_forward_body(struct stream *s, struct channel *res, int an_bit
|
||||
* flag with the last block of forwarded data, which would cause an
|
||||
* additional delay to be observed by the receiver.
|
||||
*/
|
||||
if ((msg->flags & HTTP_MSGF_TE_CHNK) || (msg->flags & HTTP_MSGF_COMPRESSING))
|
||||
if (HAS_RSP_DATA_FILTERS(s))
|
||||
res->flags |= CF_EXPECT_MORE;
|
||||
|
||||
/* the stream handler will take care of timeouts and errors */
|
||||
|
Loading…
Reference in New Issue
Block a user