From: Amaury Denoyelle Date: Wed, 29 Apr 2026 13:09:38 +0000 (+0200) Subject: MINOR: xprt_qmux: define default value for get_alpn X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=cdeb2aa4ef9a906a9a0dbb313548bb30ca7cc383;p=thirdparty%2Fhaproxy.git 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. --- 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); }