changeset 8404:e5d4f057a6cb quic

HTTP/3: move body parser call out of ngx_http_parse_chunked(). The function ngx_http_parse_chunked() is also called from the proxy module to parse the upstream response. It should always parse HTTP/1 body in this case.
author Roman Arutyunyan <arut@nginx.com>
date Thu, 14 May 2020 14:49:53 +0300
parents c101438c69a4
children d2759e4cc437
files src/http/ngx_http_parse.c src/http/ngx_http_request_body.c
diffstat 2 files changed, 20 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/src/http/ngx_http_parse.c
+++ b/src/http/ngx_http_parse.c
@@ -2185,12 +2185,6 @@ ngx_http_parse_chunked(ngx_http_request_
         sw_trailer_header_almost_done
     } state;
 
-#if (NGX_HTTP_V3)
-    if (r->http_version == NGX_HTTP_VERSION_30) {
-        return ngx_http_v3_parse_request_body(r, b, ctx);
-    }
-#endif
-
     state = ctx->state;
 
     if (state == sw_chunk_data && ctx->size == 0) {
--- a/src/http/ngx_http_request_body.c
+++ b/src/http/ngx_http_request_body.c
@@ -735,7 +735,16 @@ ngx_http_discard_request_body_filter(ngx
 
         for ( ;; ) {
 
-            rc = ngx_http_parse_chunked(r, b, rb->chunked);
+            switch (r->http_version) {
+#if (NGX_HTTP_V3)
+            case NGX_HTTP_VERSION_30:
+                rc = ngx_http_v3_parse_request_body(r, b, rb->chunked);
+                break;
+#endif
+
+            default: /* HTTP/1.x */
+                rc = ngx_http_parse_chunked(r, b, rb->chunked);
+            }
 
             if (rc == NGX_OK) {
 
@@ -978,7 +987,16 @@ ngx_http_request_body_chunked_filter(ngx
                            cl->buf->file_pos,
                            cl->buf->file_last - cl->buf->file_pos);
 
-            rc = ngx_http_parse_chunked(r, cl->buf, rb->chunked);
+            switch (r->http_version) {
+#if (NGX_HTTP_V3)
+            case NGX_HTTP_VERSION_30:
+                rc = ngx_http_v3_parse_request_body(r, cl->buf, rb->chunked);
+                break;
+#endif
+
+            default: /* HTTP/1.x */
+                rc = ngx_http_parse_chunked(r, cl->buf, rb->chunked);
+            }
 
             if (rc == NGX_OK) {