aboutsummaryrefslogtreecommitdiff
path: root/src/http/modules/ngx_http_ssl_module.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/http/modules/ngx_http_ssl_module.c')
-rw-r--r--src/http/modules/ngx_http_ssl_module.c35
1 files changed, 27 insertions, 8 deletions
diff --git a/src/http/modules/ngx_http_ssl_module.c b/src/http/modules/ngx_http_ssl_module.c
index a2db307f7..111de479b 100644
--- a/src/http/modules/ngx_http_ssl_module.c
+++ b/src/http/modules/ngx_http_ssl_module.c
@@ -418,6 +418,9 @@ ngx_http_ssl_alpn_select(ngx_ssl_conn_t *ssl_conn, const unsigned char **out,
unsigned char *outlen, const unsigned char *in, unsigned int inlen,
void *arg)
{
+#if (NGX_HTTP_QUIC)
+ const char *fmt;
+#endif
unsigned int srvlen;
unsigned char *srv;
#if (NGX_DEBUG)
@@ -452,16 +455,32 @@ ngx_http_ssl_alpn_select(ngx_ssl_conn_t *ssl_conn, const unsigned char **out,
} else
#endif
-#if (NGX_HTTP_V3)
- if (hc->addr_conf->http3) {
- srv = (unsigned char *) NGX_HTTP_V3_ALPN_ADVERTISE;
- srvlen = sizeof(NGX_HTTP_V3_ALPN_ADVERTISE) - 1;
- } else
-#endif
#if (NGX_HTTP_QUIC)
if (hc->addr_conf->quic) {
- srv = (unsigned char *) NGX_HTTP_QUIC_ALPN_ADVERTISE;
- srvlen = sizeof(NGX_HTTP_QUIC_ALPN_ADVERTISE) - 1;
+#if (NGX_HTTP_V3)
+ if (hc->addr_conf->http3) {
+ srv = (unsigned char *) NGX_HTTP_V3_ALPN_ADVERTISE;
+ srvlen = sizeof(NGX_HTTP_V3_ALPN_ADVERTISE) - 1;
+ fmt = NGX_HTTP_V3_ALPN_DRAFT_FMT;
+
+ } else
+#endif
+ {
+ srv = (unsigned char *) NGX_HTTP_QUIC_ALPN_ADVERTISE;
+ srvlen = sizeof(NGX_HTTP_QUIC_ALPN_ADVERTISE) - 1;
+ fmt = NGX_HTTP_QUIC_ALPN_DRAFT_FMT;
+ }
+
+ /* QUIC draft */
+
+ if (ngx_quic_version(c) > 1) {
+ srv = ngx_pnalloc(c->pool, sizeof("\x05h3-xx") - 1);
+ if (srv == NULL) {
+ return SSL_TLSEXT_ERR_NOACK;
+ }
+ srvlen = ngx_sprintf(srv, fmt, ngx_quic_version(c)) - srv;
+ }
+
} else
#endif
{