#if defined(OPENSSL_IS_AWSLC)
#define OPENSSL_NO_DH
-#define SSL_CTX_set1_sigalgs_list SSL_CTX_set1_sigalgs_list
+#define SSL_CTX_set1_sigalgs_list SSL_CTX_set1_sigalgs_list
+#define SSL_set_quic_early_data_enabled SSL_set_early_data_enabled
#endif
if (!qc_ssl_set_quic_transport_params(ctx->ssl, qc, quic_version_1, 0))
goto err;
- ssl_sock_srv_try_reuse_sess(ctx, srv);
+ if (!(srv->ssl_ctx.options & SRV_SSL_O_EARLY_DATA))
+ ssl_sock_srv_try_reuse_sess(ctx, srv);
+#if (HA_OPENSSL_VERSION_NUMBER >= 0x10101000L) && defined(HAVE_SSL_0RTT_QUIC)
+ else {
+ /* Enable early data only if the SSL session, transport parameters
+ * and application protocol could be reused. This insures the mux is
+ * correctly selected.
+ */
+ if (ssl_sock_srv_try_reuse_sess(ctx, srv))
+ SSL_set_quic_early_data_enabled(ctx->ssl, 1);
+ else {
+ /* No error here. 0-RTT will not be enabled. */
+ TRACE_PROTO("Could not reuse SSL session", QUIC_EV_CONN_NEW, qc);
+ }
+ }
+#endif
+
SSL_set_connect_state(ctx->ssl);
ssl_err = SSL_do_handshake(ctx->ssl);
TRACE_PROTO("SSL_do_handshake() called", QUIC_EV_CONN_NEW, qc, &ssl_err);