]> git.ipfire.org Git - thirdparty/haproxy.git/commit
MEDIUM: mux-h2: implement the emission of DATA frames from HTX DATA blocks
authorWilly Tarreau <w@1wt.eu>
Sat, 1 Dec 2018 18:25:56 +0000 (19:25 +0100)
committerWilly Tarreau <w@1wt.eu>
Sat, 1 Dec 2018 22:27:08 +0000 (23:27 +0100)
commit0c535fd1b57cceae327703820476c2b90c3c9dc6
tree1d89c114589a1f0a306a67d51208db3ab4a81253
parent115e83b0718027088a99beca6d680f6e45eb2c14
MEDIUM: mux-h2: implement the emission of DATA frames from HTX DATA blocks

At the moment the way it's done is not optimal. We should aggregate multiple
blocks into a single DATA frame, and we should merge the ES flag with the
last one when we already know we've reached the end. For now and for an
easier tracking of the HTX stream, an individual empty DATA frame is sent
with the ES bit when EOM is met.

The DATA function is called for DATA, EOD and EOM since these stats indicate
that a previous frame was already produced without the ES flag (typically a
headers frame or another DATA frame). Thus it makes sense to handle all these
blocks there.

There's still an uncertainty on the way the EOD and EOM HTX blocks must be
accounted for, as they're counted as one byte in the HTX stream, but if we
count that byte off when parsing these blocks, we end up sending too much
and desynchronizing the HTX stream. Maybe it hides an issue somewhere else.

At least it's possible to reliably retrieve payloads up to 1 GB over H2/HTX
now. It's still unclear why larger ones are interrupted at 1 GB.
src/mux_h2.c