Mercurial > hg > nginx-ranges
diff src/http/ngx_http_request.c @ 182:13710a1813ad NGINX_0_3_38
nginx 0.3.38
*) Feature: the ngx_http_dav_module.
*) Change: the ngx_http_perl_module optimizations.
Thanks to Sergey Skvortsov.
*) Feature: the ngx_http_perl_module supports the $r->request_body_file
method.
*) Feature: the "client_body_in_file_only" directive.
*) Workaround: now on disk overflow nginx tries to write access logs
once a second only.
Thanks to Anton Yuzhaninov and Maxim Dounin.
*) Bugfix: now the "limit_rate" directive more precisely limits rate if
rate is more than 100 Kbyte/s.
Thanks to ForJest.
*) Bugfix: now the IMAP/POP3 proxy escapes the "\r" and "\n" symbols in
login and password to pass authorization server.
Thanks to Maxim Dounin.
author | Igor Sysoev <http://sysoev.ru> |
---|---|
date | Fri, 14 Apr 2006 00:00:00 +0400 |
parents | 4cd3e70c4d60 |
children | 71ff1e2b484a |
line wrap: on
line diff
--- a/src/http/ngx_http_request.c +++ b/src/http/ngx_http_request.c @@ -32,9 +32,6 @@ static ngx_int_t ngx_http_set_write_hand static void ngx_http_writer(ngx_http_request_t *r); static void ngx_http_block_read(ngx_http_request_t *r); -static void ngx_http_read_discarded_body_handler(ngx_http_request_t *r); -static ngx_int_t ngx_http_read_discarded_body(ngx_http_request_t *r); - static void ngx_http_set_keepalive(ngx_http_request_t *r); static void ngx_http_keepalive_handler(ngx_event_t *ev); static void ngx_http_set_lingering_close(ngx_http_request_t *r); @@ -1682,117 +1679,6 @@ ngx_http_block_read(ngx_http_request_t * } -ngx_int_t -ngx_http_discard_body(ngx_http_request_t *r) -{ - ssize_t size; - ngx_event_t *rev; - - if (r != r->main) { - return NGX_OK; - } - - rev = r->connection->read; - - ngx_log_debug0(NGX_LOG_DEBUG_HTTP, rev->log, 0, "http set discard body"); - - if (rev->timer_set) { - ngx_del_timer(rev); - } - - if (r->headers_in.content_length_n <= 0) { - return NGX_OK; - } - - r->discard_body = 1; - - size = r->header_in->last - r->header_in->pos; - - if (size) { - if (r->headers_in.content_length_n > size) { - r->headers_in.content_length_n -= size; - - } else { - r->header_in->pos += r->headers_in.content_length_n; - r->headers_in.content_length_n = 0; - return NGX_OK; - } - } - - r->read_event_handler = ngx_http_read_discarded_body_handler; - - if (ngx_handle_read_event(rev, 0) == NGX_ERROR) { - return NGX_HTTP_INTERNAL_SERVER_ERROR; - } - - return ngx_http_read_discarded_body(r); -} - - -static void -ngx_http_read_discarded_body_handler(ngx_http_request_t *r) -{ - ngx_int_t rc; - - rc = ngx_http_read_discarded_body(r); - - if (rc == NGX_AGAIN) { - if (ngx_handle_read_event(r->connection->read, 0) == NGX_ERROR) { - ngx_http_close_request(r, rc); - return; - } - } - - if (rc != NGX_OK) { - ngx_http_close_request(r, rc); - } -} - - -static ngx_int_t -ngx_http_read_discarded_body(ngx_http_request_t *r) -{ - ssize_t size, n; - u_char buffer[NGX_HTTP_DISCARD_BUFFER_SIZE]; - - ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, - "http read discarded body"); - - if (r->headers_in.content_length_n == 0) { - return NGX_OK; - } - - - size = r->headers_in.content_length_n; - - if (size > NGX_HTTP_DISCARD_BUFFER_SIZE) { - size = NGX_HTTP_DISCARD_BUFFER_SIZE; - } - - n = r->connection->recv(r->connection, buffer, size); - - if (n == NGX_ERROR) { - - r->connection->error = 1; - - /* - * if a client request body is discarded then we already set - * some HTTP response code for client and we can ignore the error - */ - - return NGX_OK; - } - - if (n == NGX_AGAIN) { - return NGX_AGAIN; - } - - r->headers_in.content_length_n -= n; - - return NGX_OK; -} - - static void ngx_http_set_keepalive(ngx_http_request_t *r) {