changeset 8874:7f4b2687ac80 quic

HTTP/3: reset streams with incomplete responses or timeouts. This prevents client from closing the QUIC connection due to response parse error.
author Roman Arutyunyan <arut@nginx.com>
date Mon, 27 Sep 2021 17:08:48 +0300
parents 94daa42ff5ce
children 13cb758e6ac0
files src/http/ngx_http_request.c
diffstat 1 files changed, 14 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/http/ngx_http_request.c
+++ b/src/http/ngx_http_request.c
@@ -3746,6 +3746,12 @@ ngx_http_free_request(ngx_http_request_t
     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;
@@ -3757,6 +3763,14 @@ ngx_http_free_request(ngx_http_request_t
                               "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 */