BUG/MINOR: mux-quic: transfer FIN on empty STREAM frame
authorAmaury Denoyelle <adenoyelle@haproxy.com>
Tue, 14 Feb 2023 14:36:36 +0000 (15:36 +0100)
committerAmaury Denoyelle <adenoyelle@haproxy.com>
Fri, 17 Feb 2023 15:28:12 +0000 (16:28 +0100)
commitfa241939c7ce77014eae2913252e5de21bdaa4d0
treed7cfc3367c0dd0e4748e262d6c4e7525a93471ef
parent381d8137e31d941c9143a1dc8b5760d29f388fef
BUG/MINOR: mux-quic: transfer FIN on empty STREAM frame

Implement support for clients that emit the stream FIN with an empty
STREAM frame. For that, qcc_recv() offset comparison has been adjusted.
If offset has already been received but the FIN bit is now transmitted,
do not skip the rest of the function and call application layer
decode_qcs() callback.

Without this, streams will be kept open forever as HTX EOM is never
transfered to the upper stream layer.

This behavior was observed with mvfst client prior to its patch
  38c955a024aba753be8bf50fdeb45fba3ac23cfd
  Fix hq-interop (HTTP 0.9 over QUIC)

This notably caused the interop multiplexing test to fail as unclosed
streams on haproxy side prevented the emission of new MAX_STREAMS frame
to the client.

This shoud be backported up to 2.6. It also relies on previous commit :
  381d8137e31d941c9143a1dc8b5760d29f388fef
  MINOR: h3/hq-interop: handle no data in decode_qcs() with FIN set
src/mux_quic.c