Repository navigation
colibri 0.3.0: connection errors end the connection inside colibri, and h2 writes trailers
A connection error now ends the connection inside colibri, over TLS and over QUIC, and h2 gains a call for trailers and one answer to whether a stream ended. chapulin is pinned at 0adcf33, which rekeys an AES-GCM key before its usage limit.
Breaking
quic.connection_send.connection_error_codetakes the connection, because a TLS failure insidesendcloses with that alert's code.h2'swrite_responsenow refuses a field line RFC 9113 §8.2 forbids, an uppercase or connection-specific name, witherror.FieldLineInvalid. It also refuses a response after the final one witherror.SectionOutOfOrder.
To move from 0.2.0, drop your calls that owe a QUIC CONNECTION_CLOSE after receive or send fails, because colibri owes it now. Pass lowercase field names to write_response.
Fixed
- h2 and h11: a record the provider refused, or an error alert, left the connection running, though RFC 9846 §5.2 says to terminate it. The connection now fails at the record layer.
encrypt, called with no plaintext, writes the alert the provider owes, and nothing else goes out (#68). - QUIC:
receiveandsendowe the CONNECTION_CLOSE for the connection error they return (RFC 9000 §10.2). - QUIC: a TLS failure while
sendwrote handshake octets closed with no frame at all. It now closes with its CRYPTO_ERROR code (RFC 9001 §4.8). - QUIC: a space out of packet numbers now closes the connection silently, where the other spaces went on sending (RFC 9000 §12.3).
- h2: a second final response went out, which the peer read as a trailer section carrying
:status. It is now refused.
Added
- h2:
write_trailersends either side's message with a trailer section, after its final header section (RFC 9113 §8.1) (#69). - h2:
event.ended_stream()returns the stream a request, response, DATA or trailers event ended.
Checked against
- h2spec 2.6.0: 144 of 146, in cleartext and over TLS. h3spec 0.1.13: 49 examples, 0 failures. aioquic, and the h2 and h11 interop scripts against curl, nghttp, Go, nghttpd and h2o, all pass.
- 38 mutations were each caught: 25 for the connection errors and 13 for h2's field sections.
docs/design.md §8 step 16 records each check: what ran, on what machine, and what it printed.
Install
zig fetch --save git+https://github.com/c4milo/colibri#v0.3.0