Mercurial > hg > nginx
comparison src/http/ngx_http_request_body.c @ 3431:4edce2b6b285 stable-0.7
merge r3163, r3213:
*) fix discarding body
*) prevent handling discarded body as a pipelined request
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Mon, 01 Feb 2010 14:42:38 +0000 |
parents | 26d9d4a41e91 |
children |
comparison
equal
deleted
inserted
replaced
3430:966f9cf9c7da | 3431:4edce2b6b285 |
---|---|
456 | 456 |
457 size = r->header_in->last - r->header_in->pos; | 457 size = r->header_in->last - r->header_in->pos; |
458 | 458 |
459 if (size) { | 459 if (size) { |
460 if (r->headers_in.content_length_n > size) { | 460 if (r->headers_in.content_length_n > size) { |
461 r->header_in->pos += size; | |
461 r->headers_in.content_length_n -= size; | 462 r->headers_in.content_length_n -= size; |
462 | 463 |
463 } else { | 464 } else { |
464 r->header_in->pos += (size_t) r->headers_in.content_length_n; | 465 r->header_in->pos += (size_t) r->headers_in.content_length_n; |
465 r->headers_in.content_length_n = 0; | 466 r->headers_in.content_length_n = 0; |
557 u_char buffer[NGX_HTTP_DISCARD_BUFFER_SIZE]; | 558 u_char buffer[NGX_HTTP_DISCARD_BUFFER_SIZE]; |
558 | 559 |
559 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, | 560 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, |
560 "http read discarded body"); | 561 "http read discarded body"); |
561 | 562 |
562 do { | 563 for ( ;; ) { |
563 if (r->headers_in.content_length_n == 0) { | 564 if (r->headers_in.content_length_n == 0) { |
564 r->read_event_handler = ngx_http_block_reading; | 565 r->read_event_handler = ngx_http_block_reading; |
565 return NGX_OK; | 566 return NGX_OK; |
566 } | 567 } |
567 | 568 |
569 if (!r->connection->read->ready) { | |
570 return NGX_AGAIN; | |
571 } | |
572 | |
568 size = (r->headers_in.content_length_n > NGX_HTTP_DISCARD_BUFFER_SIZE) ? | 573 size = (r->headers_in.content_length_n > NGX_HTTP_DISCARD_BUFFER_SIZE) ? |
569 NGX_HTTP_DISCARD_BUFFER_SIZE: | 574 NGX_HTTP_DISCARD_BUFFER_SIZE: |
570 (size_t) r->headers_in.content_length_n; | 575 (size_t) r->headers_in.content_length_n; |
571 | 576 |
572 n = r->connection->recv(r->connection, buffer, size); | 577 n = r->connection->recv(r->connection, buffer, size); |
583 if (n == 0) { | 588 if (n == 0) { |
584 return NGX_OK; | 589 return NGX_OK; |
585 } | 590 } |
586 | 591 |
587 r->headers_in.content_length_n -= n; | 592 r->headers_in.content_length_n -= n; |
588 | 593 } |
589 } while (r->connection->read->ready); | |
590 | |
591 return NGX_AGAIN; | |
592 } | 594 } |
593 | 595 |
594 | 596 |
595 static ngx_int_t | 597 static ngx_int_t |
596 ngx_http_test_expect(ngx_http_request_t *r) | 598 ngx_http_test_expect(ngx_http_request_t *r) |