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;