aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoman Arutyunyan <arut@nginx.com>2021-12-01 11:02:17 +0300
committerRoman Arutyunyan <arut@nginx.com>2021-12-01 11:02:17 +0300
commit835854520a07adf6e3bedfad486a92cecdcd33ac (patch)
tree3a674921f0fa80c243ad950ed5476c94ca792b7b
parentd84c1f7885cc898f626057c314cdae4047c5d513 (diff)
downloadnginx-835854520a07adf6e3bedfad486a92cecdcd33ac.tar.gz
nginx-835854520a07adf6e3bedfad486a92cecdcd33ac.zip
HTTP/3: $http3 variable.
A new variable $http3 is added. The variable equals to "h3" for HTTP/3 connections, "hq" for hq connections and is an empty string otherwise. The variable $quic is eliminated. The new variable is similar to $http2 variable.
-rw-r--r--README6
-rw-r--r--src/http/v3/ngx_http_v3_module.c32
2 files changed, 30 insertions, 8 deletions
diff --git a/README b/README
index 1ecf46e07..7ade4c34c 100644
--- a/README
+++ b/README
@@ -141,7 +141,11 @@ Experimental QUIC support for nginx
http3_push_preload
http3_hq (requires NGX_HTTP_V3_HQ macro)
- An additional variable is available: $quic.
+ In http, an additional variable is available: $http3.
+ The value of $http3 is "h3" for HTTP/3 connections,
+ "hq" for hq connections, or an empty string otherwise.
+
+ In stream, an additional variable is available: $quic.
The value of $quic is "quic" if QUIC connection is used,
or an empty string otherwise.
diff --git a/src/http/v3/ngx_http_v3_module.c b/src/http/v3/ngx_http_v3_module.c
index 0b2e59b9a..697eaa4e9 100644
--- a/src/http/v3/ngx_http_v3_module.c
+++ b/src/http/v3/ngx_http_v3_module.c
@@ -10,7 +10,7 @@
#include <ngx_http.h>
-static ngx_int_t ngx_http_v3_variable_quic(ngx_http_request_t *r,
+static ngx_int_t ngx_http_v3_variable(ngx_http_request_t *r,
ngx_http_variable_value_t *v, uintptr_t data);
static ngx_int_t ngx_http_v3_add_variables(ngx_conf_t *cf);
static void *ngx_http_v3_create_srv_conf(ngx_conf_t *cf);
@@ -235,7 +235,7 @@ ngx_module_t ngx_http_v3_module = {
static ngx_http_variable_t ngx_http_v3_vars[] = {
- { ngx_string("quic"), NULL, ngx_http_v3_variable_quic, 0, 0, 0 },
+ { ngx_string("http3"), NULL, ngx_http_v3_variable, 0, 0, 0 },
ngx_http_null_variable
};
@@ -244,20 +244,38 @@ static ngx_str_t ngx_http_quic_salt = ngx_string("ngx_quic");
static ngx_int_t
-ngx_http_v3_variable_quic(ngx_http_request_t *r,
+ngx_http_v3_variable(ngx_http_request_t *r,
ngx_http_variable_value_t *v, uintptr_t data)
{
if (r->connection->quic) {
+#if (NGX_HTTP_V3_HQ)
+
+ ngx_http_v3_srv_conf_t *h3scf;
+
+ h3scf = ngx_http_get_module_srv_conf(r, ngx_http_v3_module);
- v->len = 4;
+ if (h3scf->hq) {
+ v->len = sizeof("hq") - 1;
+ v->valid = 1;
+ v->no_cacheable = 0;
+ v->not_found = 0;
+ v->data = (u_char *) "hq";
+
+ return NGX_OK;
+ }
+
+#endif
+
+ v->len = sizeof("h3") - 1;
v->valid = 1;
- v->no_cacheable = 1;
+ v->no_cacheable = 0;
v->not_found = 0;
- v->data = (u_char *) "quic";
+ v->data = (u_char *) "h3";
+
return NGX_OK;
}
- v->not_found = 1;
+ *v = ngx_http_variable_null_value;
return NGX_OK;
}