]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: quic-be: helper quic_reuse_srv_params() function to reuse server params (0...
authorFrederic Lecaille <flecaille@haproxy.com>
Thu, 31 Jul 2025 13:47:03 +0000 (15:47 +0200)
committerFrederic Lecaille <flecaille@haproxy.com>
Thu, 11 Sep 2025 16:23:33 +0000 (18:23 +0200)
Implement quic_reuse_srv_params() whose role it to reuse the ALPN used
from a first connection to a QUIC backend alongside its transport parameters
from a null terminated string <alpn> and a quic_early_transport_params struct
passed as parameters.

include/haproxy/quic_conn.h
src/quic_conn.c

index 8f0b7a8f49a62f55b828a42e8121aae68b06ffef..a6d3c6caa1a0c1bef035851b408d6ba8d761ebdb 100644 (file)
@@ -83,6 +83,9 @@ void qc_idle_timer_rearm(struct quic_conn *qc, int read, int arm_ack);
 void qc_check_close_on_released_mux(struct quic_conn *qc);
 int quic_stateless_reset_token_cpy(unsigned char *pos, size_t len,
                                    const unsigned char *salt, size_t saltlen);
+int quic_reuse_srv_params(struct quic_conn *qc,
+                          const unsigned char *alpn,
+                          const struct quic_early_transport_params *etps);
 
 /* Returns true if <qc> is used on the backed side (as a client). */
 static inline int qc_is_back(const struct quic_conn *qc)
index 6fc209d654ed66fb963fd46a7b3db5ed66741c3d..54b40881d5f5b16ac4c8eb9f1f19f559e94ccbec 100644 (file)
@@ -284,6 +284,30 @@ int quic_set_app_ops(struct quic_conn *qc, const unsigned char *alpn, size_t alp
        return 1;
 }
 
+/* Try to reuse <alpn> ALPN and <etps> early transport parameters.
+ * Return 1 if succeeded, 0 if not.
+ */
+int quic_reuse_srv_params(struct quic_conn *qc,
+                          const unsigned char *alpn,
+                          const struct quic_early_transport_params *etps)
+{
+       int ret = 0;
+
+       TRACE_ENTER(QUIC_EV_CONN_NEW, qc);
+
+       if (!alpn || !quic_set_app_ops(qc, alpn, strlen((char *)alpn)))
+               goto err;
+
+       qc_early_transport_params_reuse(qc, &qc->tx.params, etps);
+       ret = 1;
+ leave:
+       TRACE_LEAVE(QUIC_EV_CONN_NEW, qc);
+       return ret;
+ err:
+       TRACE_DEVEL("leaving on error", QUIC_EV_CONN_NEW, qc);
+       goto leave;
+}
+
 /* Schedule a CONNECTION_CLOSE emission on <qc> if the MUX has been released
  * and all STREAM data are acknowledged. The MUX is responsible to have set
  * <qc.err> before as it is reused for the CONNECTION_CLOSE frame.