Mercurial > hg > nginx
comparison src/http/ngx_http_request_body.c @ 162:96993d4d5067
nginx-0.0.1-2003-10-28-00:01:00 import
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Mon, 27 Oct 2003 21:01:00 +0000 |
parents | e7e094d34162 |
children | 84036764e215 |
comparison
equal
deleted
inserted
replaced
161:88abd07d9f62 | 162:96993d4d5067 |
---|---|
28 ngx_alloc_link_and_set_hunk(r->request_hunks, h, r->pool, | 28 ngx_alloc_link_and_set_hunk(r->request_hunks, h, r->pool, |
29 NGX_HTTP_INTERNAL_SERVER_ERROR); | 29 NGX_HTTP_INTERNAL_SERVER_ERROR); |
30 | 30 |
31 if (size >= r->headers_in.content_length_n) { | 31 if (size >= r->headers_in.content_length_n) { |
32 r->header_in->pos += r->headers_in.content_length_n; | 32 r->header_in->pos += r->headers_in.content_length_n; |
33 | |
33 return NGX_OK; | 34 return NGX_OK; |
34 } | 35 } |
36 | |
37 r->header_in->pos = r->header_in->last; | |
35 } | 38 } |
36 | 39 |
37 r->request_body_len = r->headers_in.content_length_n - size; | 40 r->request_body_len = r->headers_in.content_length_n - size; |
38 | 41 |
39 if (r->request_body_len < request_buffer_size + (request_buffer_size >> 2)) | 42 if (r->request_body_len < request_buffer_size + (request_buffer_size >> 2)) |
71 } | 74 } |
72 | 75 |
73 | 76 |
74 static void ngx_http_read_client_request_body_handler(ngx_event_t *rev) | 77 static void ngx_http_read_client_request_body_handler(ngx_event_t *rev) |
75 { | 78 { |
76 ssize_t n, size; | 79 ssize_t n, size; |
77 ngx_hunk_t *h; | 80 ngx_hunk_t *h; |
78 ngx_connection_t *c; | 81 ngx_connection_t *c; |
79 ngx_http_request_t *r; | 82 ngx_http_request_t *r; |
83 ngx_http_core_loc_conf_t *clcf; | |
80 | 84 |
81 c = rev->data; | 85 c = rev->data; |
82 r = c->data; | 86 r = c->data; |
83 | 87 |
84 if (r->request_body_hunk->end - r->request_body_hunk->last == 0) { | 88 if (r->request_body_hunk->end - r->request_body_hunk->last == 0) { |
85 n = ngx_write_chain_to_temp_file(r->temp_file, | 89 n = ngx_write_chain_to_temp_file(r->temp_file, |
86 r->request_hunks->next ? r->request_hunks->next: | 90 r->request_hunks->next ? r->request_hunks->next: |
87 r->request_hunks); | 91 r->request_hunks); |
88 /* TODO: n == 0 or not complete and level event */ | 92 /* TODO: n == 0 or not complete and level event */ |
93 | |
94 if (n == NGX_ERROR) { | |
95 ngx_http_finalize_request(r, NGX_HTTP_INTERNAL_SERVER_ERROR); | |
96 return; | |
97 } | |
89 | 98 |
90 r->request_body_hunk->pos = r->request_body_hunk->start; | 99 r->request_body_hunk->pos = r->request_body_hunk->start; |
91 r->request_body_hunk->last = r->request_body_hunk->start; | 100 r->request_body_hunk->last = r->request_body_hunk->start; |
92 } | 101 } |
93 | 102 |
98 } | 107 } |
99 | 108 |
100 n = ngx_recv(c, r->request_body_hunk->last, size); | 109 n = ngx_recv(c, r->request_body_hunk->last, size); |
101 | 110 |
102 if (n == NGX_AGAIN) { | 111 if (n == NGX_AGAIN) { |
112 clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module); | |
113 ngx_add_timer(rev, clcf->client_body_timeout); | |
114 | |
103 if (ngx_handle_read_event(rev) == NGX_ERROR) { | 115 if (ngx_handle_read_event(rev) == NGX_ERROR) { |
104 ngx_http_finalize_request(r, NGX_HTTP_INTERNAL_SERVER_ERROR); | 116 ngx_http_finalize_request(r, NGX_HTTP_INTERNAL_SERVER_ERROR); |
105 } | 117 } |
106 | 118 |
107 return; | 119 return; |
130 n = ngx_write_chain_to_temp_file(r->temp_file, | 142 n = ngx_write_chain_to_temp_file(r->temp_file, |
131 r->request_hunks->next ? r->request_hunks->next: | 143 r->request_hunks->next ? r->request_hunks->next: |
132 r->request_hunks); | 144 r->request_hunks); |
133 /* TODO: n == 0 or not complete and level event */ | 145 /* TODO: n == 0 or not complete and level event */ |
134 | 146 |
147 if (n == NGX_ERROR) { | |
148 ngx_http_finalize_request(r, NGX_HTTP_INTERNAL_SERVER_ERROR); | |
149 return; | |
150 } | |
135 | 151 |
136 h = ngx_calloc_hunk(r->pool); | 152 h = ngx_calloc_hunk(r->pool); |
137 if (h == NULL) { | 153 if (h == NULL) { |
138 ngx_http_finalize_request(r, NGX_HTTP_INTERNAL_SERVER_ERROR); | 154 ngx_http_finalize_request(r, NGX_HTTP_INTERNAL_SERVER_ERROR); |
139 return; | 155 return; |