From cdeb2aa4ef9a906a9a0dbb313548bb30ca7cc383 Mon Sep 17 00:00:00 2001 From: Amaury Denoyelle Date: Wed, 29 Apr 2026 15:09:38 +0200 Subject: [PATCH] MINOR: xprt_qmux: define default value for get_alpn Extend get_alpn() for xprt_qmux layer. If lower layer does not implement ALPN negotiation, return a statically default protocol value. Currently this is set to "h3". This change is required to support QMux in clear without SSL. In the future, it could be useful to configure the default protocol, for example by extending the syntax for the "proto" keyword. --- src/xprt_qmux.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/xprt_qmux.c b/src/xprt_qmux.c index 88f4b0120..4060ec566 100644 --- a/src/xprt_qmux.c +++ b/src/xprt_qmux.c @@ -12,6 +12,9 @@ #include #include +/* Default protocol when not running over SSL layer. */ +#define XPRT_QMUX_DEFAULT_ALPN "h3" + struct xprt_qmux_ctx { struct connection *conn; struct wait_event wait_event; @@ -346,6 +349,14 @@ static int xprt_qmux_get_alpn(const struct connection *conn, void *xprt_ctx, const char **str, int *len) { struct xprt_qmux_ctx *ctx = xprt_ctx; + + /* Return a the default ALPN if lower layer is not able to negotiate it. */ + if (!ctx->ops_lower || !ctx->ops_lower->get_alpn) { + *str = XPRT_QMUX_DEFAULT_ALPN; + *len = strlen(XPRT_QMUX_DEFAULT_ALPN); + return 1; + } + return ctx->ops_lower->get_alpn(conn, ctx->ctx_lower, str, len); } -- 2.47.3