diff options
author | Igor Sysoev <igor@sysoev.ru> | 2003-10-27 21:01:00 +0000 |
---|---|---|
committer | Igor Sysoev <igor@sysoev.ru> | 2003-10-27 21:01:00 +0000 |
commit | 2b0c76cfbdfd660242f47ce66a4d54d30f9b23e8 (patch) | |
tree | 0fd87b8ac4a82695019df8e591ad2c6dbfc26fa7 /src/http/ngx_http_request_body.c | |
parent | 425a42ce3dfe0a24c5c6eb44285447b40e685291 (diff) | |
download | nginx-2b0c76cfbdfd660242f47ce66a4d54d30f9b23e8.tar.gz nginx-2b0c76cfbdfd660242f47ce66a4d54d30f9b23e8.zip |
nginx-0.0.1-2003-10-28-00:01:00 import
Diffstat (limited to 'src/http/ngx_http_request_body.c')
-rw-r--r-- | src/http/ngx_http_request_body.c | 24 |
1 files changed, 20 insertions, 4 deletions
diff --git a/src/http/ngx_http_request_body.c b/src/http/ngx_http_request_body.c index c079a4615..1c9cd97a5 100644 --- a/src/http/ngx_http_request_body.c +++ b/src/http/ngx_http_request_body.c @@ -30,8 +30,11 @@ int ngx_http_read_client_request_body(ngx_http_request_t *r, if (size >= r->headers_in.content_length_n) { r->header_in->pos += r->headers_in.content_length_n; + return NGX_OK; } + + r->header_in->pos = r->header_in->last; } r->request_body_len = r->headers_in.content_length_n - size; @@ -73,10 +76,11 @@ int ngx_http_read_client_request_body(ngx_http_request_t *r, static void ngx_http_read_client_request_body_handler(ngx_event_t *rev) { - ssize_t n, size; - ngx_hunk_t *h; - ngx_connection_t *c; - ngx_http_request_t *r; + ssize_t n, size; + ngx_hunk_t *h; + ngx_connection_t *c; + ngx_http_request_t *r; + ngx_http_core_loc_conf_t *clcf; c = rev->data; r = c->data; @@ -87,6 +91,11 @@ static void ngx_http_read_client_request_body_handler(ngx_event_t *rev) r->request_hunks); /* TODO: n == 0 or not complete and level event */ + if (n == NGX_ERROR) { + ngx_http_finalize_request(r, NGX_HTTP_INTERNAL_SERVER_ERROR); + return; + } + r->request_body_hunk->pos = r->request_body_hunk->start; r->request_body_hunk->last = r->request_body_hunk->start; } @@ -100,6 +109,9 @@ static void ngx_http_read_client_request_body_handler(ngx_event_t *rev) n = ngx_recv(c, r->request_body_hunk->last, size); if (n == NGX_AGAIN) { + clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module); + ngx_add_timer(rev, clcf->client_body_timeout); + if (ngx_handle_read_event(rev) == NGX_ERROR) { ngx_http_finalize_request(r, NGX_HTTP_INTERNAL_SERVER_ERROR); } @@ -132,6 +144,10 @@ static void ngx_http_read_client_request_body_handler(ngx_event_t *rev) r->request_hunks); /* TODO: n == 0 or not complete and level event */ + if (n == NGX_ERROR) { + ngx_http_finalize_request(r, NGX_HTTP_INTERNAL_SERVER_ERROR); + return; + } h = ngx_calloc_hunk(r->pool); if (h == NULL) { |