ngx_str_t *res);
-ngx_int_t
-ngx_quic_compat_init(ngx_conf_t *cf, SSL_CTX *ctx)
+void
+ngx_quic_compat_keylog_init(SSL_CTX *ctx)
{
SSL_CTX_set_keylog_callback(ctx, ngx_quic_compat_keylog_callback);
+}
+
+ngx_int_t
+ngx_quic_compat_ext_init(ngx_conf_t *cf, SSL_CTX *ctx)
+{
if (SSL_CTX_has_client_custom_ext(ctx, NGX_QUIC_COMPAT_SSL_TP_EXT)) {
return NGX_OK;
}
} SSL_QUIC_METHOD;
-ngx_int_t ngx_quic_compat_init(ngx_conf_t *cf, SSL_CTX *ctx);
+void ngx_quic_compat_keylog_init(SSL_CTX *ctx);
+ngx_int_t ngx_quic_compat_ext_init(ngx_conf_t *cf, SSL_CTX *ctx);
int SSL_set_quic_method(SSL *ssl, const SSL_QUIC_METHOD *quic_method);
int SSL_provide_quic_data(SSL *ssl, enum ssl_encryption_level_t level,
ngx_http_ssl_init(ngx_conf_t *cf)
{
ngx_uint_t a, p, s;
+#if (NGX_QUIC_OPENSSL_COMPAT)
+ ngx_uint_t compat;
+#endif
const char *name;
ngx_http_conf_addr_t *addr;
ngx_http_conf_port_t *port;
return NGX_OK;
}
+#if (NGX_QUIC_OPENSSL_COMPAT)
+
+ compat = 0;
+
+ port = cmcf->ports->elts;
+ for (p = 0; p < cmcf->ports->nelts && !compat; p++) {
+
+ addr = port[p].addrs.elts;
+ for (a = 0; a < port[p].addrs.nelts; a++) {
+
+ if (addr[a].opt.quic) {
+ compat = 1;
+ break;
+ }
+ }
+ }
+
+#endif
+
port = cmcf->ports->elts;
for (p = 0; p < cmcf->ports->nelts; p++) {
continue;
}
- if (addr[a].opt.quic) {
- name = "quic";
-
#if (NGX_QUIC_OPENSSL_COMPAT)
+ if (compat) {
if (ngx_http_ssl_quic_compat_init(cf, &addr[a]) != NGX_OK) {
return NGX_ERROR;
}
+ }
#endif
+ if (addr[a].opt.quic) {
+ name = "quic";
+
} else {
name = "ssl";
}
sscf = cscf->ctx->srv_conf[ngx_http_ssl_module.ctx_index];
if (sscf->certificates || sscf->reject_handshake) {
- if (ngx_quic_compat_init(cf, sscf->ssl.ctx) != NGX_OK) {
+ if (ngx_quic_compat_ext_init(cf, sscf->ssl.ctx) != NGX_OK) {
return NGX_ERROR;
}
+
+ if (addr->opt.quic) {
+ ngx_quic_compat_keylog_init(sscf->ssl.ctx);
+ }
}
}