Mercurial > hg > nginx
comparison src/http/ngx_http_request_body.c @ 296:bfe099e3f5b4
nginx-0.0.3-2004-03-26-19:13:01 import
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Fri, 26 Mar 2004 16:13:01 +0000 |
parents | 5cfd65b8b0a7 |
children | ee394e997c77 |
comparison
equal
deleted
inserted
replaced
295:99b349386504 | 296:bfe099e3f5b4 |
---|---|
17 ngx_chain_t *cl; | 17 ngx_chain_t *cl; |
18 | 18 |
19 size = r->header_in->last - r->header_in->pos; | 19 size = r->header_in->last - r->header_in->pos; |
20 | 20 |
21 if (size) { | 21 if (size) { |
22 | |
23 /* there is the pre-read part of the request body */ | |
24 | |
22 ngx_test_null(h, ngx_calloc_hunk(r->pool), NGX_ERROR); | 25 ngx_test_null(h, ngx_calloc_hunk(r->pool), NGX_ERROR); |
23 | 26 |
24 h->type = NGX_HUNK_IN_MEMORY|NGX_HUNK_TEMP; | 27 h->type = NGX_HUNK_IN_MEMORY|NGX_HUNK_TEMP; |
25 h->start = h->pos = r->header_in->pos; | 28 h->start = h->pos = r->header_in->pos; |
26 h->end = h->last = r->header_in->last; | 29 h->end = h->last = r->header_in->last; |
27 | 30 |
28 ngx_alloc_link_and_set_hunk(r->request_hunks, h, r->pool, NGX_ERROR); | 31 ngx_alloc_link_and_set_hunk(r->request_hunks, h, r->pool, NGX_ERROR); |
29 | 32 |
30 if (size >= r->headers_in.content_length_n) { | 33 if (size >= r->headers_in.content_length_n) { |
34 | |
35 /* the whole request body was pre-read */ | |
36 | |
31 r->header_in->pos += r->headers_in.content_length_n; | 37 r->header_in->pos += r->headers_in.content_length_n; |
32 | |
33 return NGX_OK; | 38 return NGX_OK; |
34 } | 39 } |
35 | 40 |
36 r->header_in->pos = r->header_in->last; | 41 r->header_in->pos = r->header_in->last; |
37 } | 42 } |
38 | 43 |
39 r->request_body_len = r->headers_in.content_length_n - size; | 44 |
40 | 45 r->remaining_body_len = r->headers_in.content_length_n - size; |
41 if (r->request_body_len < request_buffer_size + (request_buffer_size >> 2)) | 46 |
47 if (r->remaining_body_len | |
48 < request_buffer_size + (request_buffer_size >> 2)) | |
42 { | 49 { |
43 size = r->request_body_len; | 50 size = r->remaining_body_len; |
44 | 51 |
45 } else { | 52 } else { |
46 size = request_buffer_size; | 53 size = request_buffer_size; |
47 } | 54 } |
48 | 55 |
114 r->request_body_hunk->last = r->request_body_hunk->start; | 121 r->request_body_hunk->last = r->request_body_hunk->start; |
115 } | 122 } |
116 | 123 |
117 size = r->request_body_hunk->end - r->request_body_hunk->last; | 124 size = r->request_body_hunk->end - r->request_body_hunk->last; |
118 | 125 |
119 if (size > r->request_body_len) { | 126 if (size > r->remaining_body_len) { |
120 size = r->request_body_len; | 127 size = r->remaining_body_len; |
121 } | 128 } |
122 | 129 |
123 n = ngx_recv(c, r->request_body_hunk->last, size); | 130 n = ngx_recv(c, r->request_body_hunk->last, size); |
124 | 131 |
125 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, c->log, 0, | 132 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, c->log, 0, |
145 r->closed = 1; | 152 r->closed = 1; |
146 return NGX_HTTP_BAD_REQUEST; | 153 return NGX_HTTP_BAD_REQUEST; |
147 } | 154 } |
148 | 155 |
149 r->request_body_hunk->last += n; | 156 r->request_body_hunk->last += n; |
150 r->request_body_len -= n; | 157 r->remaining_body_len -= n; |
151 | 158 |
152 if (r->request_body_len == 0) { | 159 if (r->remaining_body_len == 0) { |
153 break; | 160 break; |
154 } | 161 } |
155 | 162 |
156 if (r->request_body_hunk->last < r->request_body_hunk->end) { | 163 if (r->request_body_hunk->last < r->request_body_hunk->end) { |
157 break; | 164 break; |
158 } | 165 } |
159 } | 166 } |
160 | 167 |
161 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, c->log, 0, | 168 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, c->log, 0, |
162 "http client request body left " SIZE_T_FMT, | 169 "http client request body left " SIZE_T_FMT, |
163 r->request_body_len); | 170 r->remaining_body_len); |
164 | 171 |
165 if (r->request_body_len) { | 172 if (r->remaining_body_len) { |
166 return NGX_AGAIN; | 173 return NGX_AGAIN; |
167 } | 174 } |
168 | 175 |
169 if (r->temp_file->file.fd != NGX_INVALID_FILE) { | 176 if (r->temp_file->file.fd != NGX_INVALID_FILE) { |
170 | 177 |