aboutsummaryrefslogtreecommitdiff
path: root/src/http/ngx_http_request.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/http/ngx_http_request.c')
-rw-r--r--src/http/ngx_http_request.c60
1 files changed, 52 insertions, 8 deletions
diff --git a/src/http/ngx_http_request.c b/src/http/ngx_http_request.c
index 013b7158e..88516cb4d 100644
--- a/src/http/ngx_http_request.c
+++ b/src/http/ngx_http_request.c
@@ -31,10 +31,6 @@ static ngx_int_t ngx_http_process_connection(ngx_http_request_t *r,
static ngx_int_t ngx_http_process_user_agent(ngx_http_request_t *r,
ngx_table_elt_t *h, ngx_uint_t offset);
-static ngx_int_t ngx_http_validate_host(ngx_str_t *host, ngx_pool_t *pool,
- ngx_uint_t alloc);
-static ngx_int_t ngx_http_set_virtual_server(ngx_http_request_t *r,
- ngx_str_t *host);
static ngx_int_t ngx_http_find_virtual_server(ngx_connection_t *c,
ngx_http_virtual_names_t *virtual_names, ngx_str_t *host,
ngx_http_request_t *r, ngx_http_core_srv_conf_t **cscfp);
@@ -52,7 +48,6 @@ static void ngx_http_keepalive_handler(ngx_event_t *ev);
static void ngx_http_set_lingering_close(ngx_connection_t *c);
static void ngx_http_lingering_close_handler(ngx_event_t *ev);
static ngx_int_t ngx_http_post_action(ngx_http_request_t *r);
-static void ngx_http_close_request(ngx_http_request_t *r, ngx_int_t error);
static void ngx_http_log_request(ngx_http_request_t *r);
static u_char *ngx_http_log_error(ngx_log_t *log, u_char *buf, size_t len);
@@ -321,6 +316,14 @@ ngx_http_init_connection(ngx_connection_t *c)
c->log_error = NGX_ERROR_INFO;
+#if (NGX_HTTP_QUIC)
+ if (hc->addr_conf->quic) {
+ if (ngx_http_quic_init(c) == NGX_DONE) {
+ return;
+ }
+ }
+#endif
+
rev = c->read;
rev->handler = ngx_http_wait_request_handler;
c->write->handler = ngx_http_empty_handler;
@@ -331,6 +334,13 @@ ngx_http_init_connection(ngx_connection_t *c)
}
#endif
+#if (NGX_HTTP_V3)
+ if (hc->addr_conf->http3) {
+ ngx_http_v3_init(c);
+ return;
+ }
+#endif
+
#if (NGX_HTTP_SSL)
{
ngx_http_ssl_srv_conf_t *sscf;
@@ -2121,7 +2131,7 @@ ngx_http_process_request(ngx_http_request_t *r)
}
-static ngx_int_t
+ngx_int_t
ngx_http_validate_host(ngx_str_t *host, ngx_pool_t *pool, ngx_uint_t alloc)
{
u_char *h, ch;
@@ -2213,7 +2223,7 @@ ngx_http_validate_host(ngx_str_t *host, ngx_pool_t *pool, ngx_uint_t alloc)
}
-static ngx_int_t
+ngx_int_t
ngx_http_set_virtual_server(ngx_http_request_t *r, ngx_str_t *host)
{
ngx_int_t rc;
@@ -2736,6 +2746,13 @@ ngx_http_finalize_connection(ngx_http_request_t *r)
}
#endif
+#if (NGX_HTTP_QUIC)
+ if (r->connection->quic) {
+ ngx_http_close_request(r, 0);
+ return;
+ }
+#endif
+
clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module);
if (r->main->count != 1) {
@@ -2950,6 +2967,19 @@ ngx_http_test_reading(ngx_http_request_t *r)
#endif
+#if (NGX_HTTP_QUIC)
+
+ if (c->quic) {
+ if (c->read->error) {
+ err = 0;
+ goto closed;
+ }
+
+ return;
+ }
+
+#endif
+
#if (NGX_HAVE_KQUEUE)
if (ngx_event_flags & NGX_USE_KQUEUE_EVENT) {
@@ -3614,7 +3644,7 @@ ngx_http_post_action(ngx_http_request_t *r)
}
-static void
+void
ngx_http_close_request(ngx_http_request_t *r, ngx_int_t rc)
{
ngx_connection_t *c;
@@ -3704,6 +3734,12 @@ ngx_http_free_request(ngx_http_request_t *r, ngx_int_t rc)
if (r->connection->timedout) {
clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module);
+#if (NGX_HTTP_V3)
+ if (r->connection->quic) {
+ (void) ngx_quic_reset_stream(r->connection,
+ NGX_HTTP_V3_ERR_GENERAL_PROTOCOL_ERROR);
+ } else
+#endif
if (clcf->reset_timedout_connection) {
linger.l_onoff = 1;
linger.l_linger = 0;
@@ -3715,6 +3751,14 @@ ngx_http_free_request(ngx_http_request_t *r, ngx_int_t rc)
"setsockopt(SO_LINGER) failed");
}
}
+
+ } else if (!r->response_sent) {
+#if (NGX_HTTP_V3)
+ if (r->connection->quic) {
+ (void) ngx_quic_reset_stream(r->connection,
+ NGX_HTTP_V3_ERR_INTERNAL_ERROR);
+ }
+#endif
}
/* the various request strings were allocated from r->pool */