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)