Skip to content

Commit

Permalink
HTTP/2: reduced difference to HTTP/1.x in reading request body.
Browse files Browse the repository at this point in the history
Particularly, this eliminates difference in behavior for requests without body
and deduplicates code.

Prodded by Piotr Sikora.
  • Loading branch information
VBart committed Apr 24, 2017
1 parent d35c83a commit 55b37ef
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 33 deletions.
20 changes: 12 additions & 8 deletions src/http/ngx_http_request_body.c
Original file line number Diff line number Diff line change
Expand Up @@ -46,13 +46,6 @@ ngx_http_read_client_request_body(ngx_http_request_t *r,
return NGX_OK;
}

#if (NGX_HTTP_V2)
if (r->stream) {
rc = ngx_http_v2_read_request_body(r, post_handler);
goto done;
}
#endif

if (ngx_http_test_expect(r) != NGX_OK) {
rc = NGX_HTTP_INTERNAL_SERVER_ERROR;
goto done;
Expand Down Expand Up @@ -85,6 +78,13 @@ ngx_http_read_client_request_body(ngx_http_request_t *r,
return NGX_OK;
}

#if (NGX_HTTP_V2)
if (r->stream) {
rc = ngx_http_v2_read_request_body(r);
goto done;
}
#endif

preread = r->header_in->last - r->header_in->pos;

if (preread) {
Expand Down Expand Up @@ -805,7 +805,11 @@ ngx_http_test_expect(ngx_http_request_t *r)

if (r->expect_tested
|| r->headers_in.expect == NULL
|| r->http_version < NGX_HTTP_VERSION_11)
|| r->http_version < NGX_HTTP_VERSION_11
#if (NGX_HTTP_V2)
|| r->stream != NULL
#endif
)
{
return NGX_OK;
}
Expand Down
28 changes: 5 additions & 23 deletions src/http/v2/ngx_http_v2.c
Original file line number Diff line number Diff line change
Expand Up @@ -3522,8 +3522,7 @@ ngx_http_v2_run_request(ngx_http_request_t *r)


ngx_int_t
ngx_http_v2_read_request_body(ngx_http_request_t *r,
ngx_http_client_body_handler_pt post_handler)
ngx_http_v2_read_request_body(ngx_http_request_t *r)
{
off_t len;
size_t size;
Expand All @@ -3536,33 +3535,14 @@ ngx_http_v2_read_request_body(ngx_http_request_t *r,
ngx_http_v2_connection_t *h2c;

stream = r->stream;
rb = r->request_body;

if (stream->skip_data) {
r->request_body_no_buffering = 0;
post_handler(r);
rb->post_handler(r);
return NGX_OK;
}

rb = ngx_pcalloc(r->pool, sizeof(ngx_http_request_body_t));
if (rb == NULL) {
return NGX_HTTP_INTERNAL_SERVER_ERROR;
}

/*
* set by ngx_pcalloc():
*
* rb->bufs = NULL;
* rb->buf = NULL;
* rb->received = 0;
* rb->free = NULL;
* rb->busy = NULL;
*/

rb->rest = 1;
rb->post_handler = post_handler;

r->request_body = rb;

h2scf = ngx_http_get_module_srv_conf(r, ngx_http_v2_module);
clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module);

Expand Down Expand Up @@ -3612,6 +3592,8 @@ ngx_http_v2_read_request_body(ngx_http_request_t *r,
return NGX_HTTP_INTERNAL_SERVER_ERROR;
}

rb->rest = 1;

buf = stream->preread;

if (stream->in_closed) {
Expand Down
3 changes: 1 addition & 2 deletions src/http/v2/ngx_http_v2.h
Original file line number Diff line number Diff line change
Expand Up @@ -264,8 +264,7 @@ ngx_http_v2_queue_blocked_frame(ngx_http_v2_connection_t *h2c,
void ngx_http_v2_init(ngx_event_t *rev);
void ngx_http_v2_request_headers_init(void);

ngx_int_t ngx_http_v2_read_request_body(ngx_http_request_t *r,
ngx_http_client_body_handler_pt post_handler);
ngx_int_t ngx_http_v2_read_request_body(ngx_http_request_t *r);
ngx_int_t ngx_http_v2_read_unbuffered_request_body(ngx_http_request_t *r);

void ngx_http_v2_close_stream(ngx_http_v2_stream_t *stream, ngx_int_t rc);
Expand Down

0 comments on commit 55b37ef

Please sign in to comment.