  src/http/ngx_http_request.h             |    3 +
  src/http/ngx_http_request_body.c        |   33 +
  src/http/ngx_http_upstream.c            |   13 +
- src/http/v3/ngx_http_v3.c               | 2344 +++++++++++++++++++++++
- src/http/v3/ngx_http_v3.h               |   78 +
+ src/http/v3/ngx_http_v3.c               | 2374 +++++++++++++++++++++++
+ src/http/v3/ngx_http_v3.h               |   79 +
  src/http/v3/ngx_http_v3_filter_module.c |   68 +
  src/http/v3/ngx_http_v3_module.c        |  286 +++
  src/http/v3/ngx_http_v3_module.h        |   34 +
- 27 files changed, 3827 insertions(+), 11 deletions(-)
+ 27 files changed, 3858 insertions(+), 11 deletions(-)
  create mode 100644 auto/lib/quiche/conf
  create mode 100644 auto/lib/quiche/make
  create mode 100644 src/event/ngx_event_quic.c

+        r->headers_out.last_modified = NULL;
+    }
+
+    headers = ngx_array_create(r->pool, 1, sizeof(quiche_h3_header));
+    if (headers == NULL) {
+        return NGX_ERROR;
+    }
+
+    /* Generate :status pseudo-header. */
+    {
+        h = ngx_array_push(headers);
+        if (h == NULL) {
+            return NGX_ERROR;
+        }

+        h->name = (u_char *) ":status";
+        h->name_len = sizeof(":status") - 1;
+
+        tmp = ngx_pnalloc(r->pool, sizeof("418") - 1);
+        if (tmp == NULL) {
+            return NGX_ERROR;
+        }
+
+        h->value = tmp;
+        h->value_len = ngx_sprintf(tmp, "%03ui", r->headers_out.status) - tmp;
+    }
+
+    clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module);
+
+    /* Generate Server header.*/
+    if (r->headers_out.server == NULL) {
+        h = ngx_array_push(out);
+        if (h == NULL) {
+            return NGX_ERROR;
+        }
