MINOR: mux-quic/h3: prepare CONNECTION_CLOSE on release
When MUX is released, a CONNECTION_CLOSE frame should be emitted. This
will ensure that the client does not use anymore a half-dead connection.
App protocol layer is responsible to provide the error code via release
callback. For HTTP/3 NO_ERROR is used as specified in RFC 9114. If no
release callback is provided, generic QUIC NO_ERROR code is used. Note
that a graceful shutdown is used : quic_conn must emit CONNECTION_CLOSE
frame when possible. This will be provided in another patch.
This change should limit the risk of browsers stuck on webpage loading
if MUX has been released. On CONNECTION_CLOSE reception, the client will
reopen a new QUIC connection.
diff --git a/src/h3.c b/src/h3.c
index 7fb5f94..c1a9979 100644
--- a/src/h3.c
+++ b/src/h3.c
@@ -1121,6 +1121,15 @@
static void h3_release(void *ctx)
{
struct h3c *h3c = ctx;
+
+ /* RFC 9114 5.2. Connection Shutdown
+ *
+ * An endpoint that completes a
+ * graceful shutdown SHOULD use the H3_NO_ERROR error code when closing
+ * the connection.
+ */
+ qcc_emit_cc_app(h3c->qcc, H3_NO_ERROR, 0);
+
pool_free(pool_head_h3c, h3c);
}