From: Amaury Denoyelle Date: Mon, 14 Feb 2022 16:11:32 +0000 (+0100) Subject: MINOR: mux-quic: set EOS on rcv_buf X-Git-Tag: v2.6-dev2~145 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=eb53e5baa1566c25d9ca3c722fc6a5f3545eed3d;p=thirdparty%2Fhaproxy.git MINOR: mux-quic: set EOS on rcv_buf Flags EOI/EOS must be set on conn-stream when transfering the last data of a stream in rcv_buf. This is activated if qcs HTX buffer has the EOM flag and has been fully transfered. --- diff --git a/src/mux_quic.c b/src/mux_quic.c index 3424a22763..2ed269e3cb 100644 --- a/src/mux_quic.c +++ b/src/mux_quic.c @@ -558,6 +558,7 @@ static size_t qc_rcv_buf(struct conn_stream *cs, struct buffer *buf, struct htx *qcs_htx = NULL; struct htx *cs_htx = NULL; size_t ret = 0; + char fin = 0; fprintf(stderr, "%s\n", __func__); @@ -582,8 +583,10 @@ static size_t qc_rcv_buf(struct conn_stream *cs, struct buffer *buf, BUG_ON(qcs_htx->flags & HTX_FL_PARSING_ERROR); /* Copy EOM from src to dst buffer if all data copied. */ - if (htx_is_empty(qcs_htx)) - cs_htx->flags |= (qcs_htx->flags & HTX_FL_EOM); + if (htx_is_empty(qcs_htx) && (qcs_htx->flags & HTX_FL_EOM)) { + cs_htx->flags |= HTX_FL_EOM; + fin = 1; + } cs_htx->extra = qcs_htx->extra ? (qcs_htx->data + qcs_htx->extra) : 0; htx_to_buf(cs_htx, buf); @@ -599,7 +602,8 @@ static size_t qc_rcv_buf(struct conn_stream *cs, struct buffer *buf, if (cs->flags & CS_FL_ERR_PENDING) cs->flags |= CS_FL_ERROR; - /* TODO put CS_FL_EOI/EOS on fin */ + if (fin) + cs->flags |= (CS_FL_EOI|CS_FL_EOS); if (b_size(&qcs->rx.app_buf)) { b_free(&qcs->rx.app_buf);