Mercurial > hg > ngx_http_compose_filter_module
comparison ngx_http_compose_filter_module.c @ 6:27628b3310ab
Better handle absence of controlling headers.
Don't do any processing if there is no X-Compose headers. If there is no
X-Compose-Length, clear content length and disallow ranges.
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Thu, 24 Jul 2008 02:39:59 +0400 |
parents | fc206607251c |
children | 88272d0f29f9 |
comparison
equal
deleted
inserted
replaced
5:fc206607251c | 6:27628b3310ab |
---|---|
106 | 106 |
107 | 107 |
108 static ngx_int_t | 108 static ngx_int_t |
109 ngx_http_compose_header_filter(ngx_http_request_t *r) | 109 ngx_http_compose_header_filter(ngx_http_request_t *r) |
110 { | 110 { |
111 off_t len; | |
111 ngx_uint_t i; | 112 ngx_uint_t i; |
112 ngx_str_t *uri; | 113 ngx_str_t *uri; |
113 ngx_list_part_t *part; | 114 ngx_list_part_t *part; |
114 ngx_table_elt_t *header; | 115 ngx_table_elt_t *header; |
115 ngx_http_compose_conf_t *conf; | 116 ngx_http_compose_conf_t *conf; |
144 * response. | 145 * response. |
145 */ | 146 */ |
146 | 147 |
147 part = &r->headers_out.headers.part; | 148 part = &r->headers_out.headers.part; |
148 header = part->elts; | 149 header = part->elts; |
150 len = -1; | |
149 | 151 |
150 for (i = 0; /* void */; i++) { | 152 for (i = 0; /* void */; i++) { |
151 | 153 |
152 if (i >= part->nelts) { | 154 if (i >= part->nelts) { |
153 if (part->next == NULL) { | 155 if (part->next == NULL) { |
172 "compose body filter: bingo, %V, %V", | 174 "compose body filter: bingo, %V, %V", |
173 &header[i].key, &header[i].value); | 175 &header[i].key, &header[i].value); |
174 | 176 |
175 header[i].hash = 0; | 177 header[i].hash = 0; |
176 | 178 |
177 r->headers_out.content_length_n = ngx_atoof(header[i].value.data, | 179 len = ngx_atoof(header[i].value.data, header[i].value.len); |
178 header[i].value.len); | |
179 | |
180 if (r->headers_out.content_length) { | |
181 r->headers_out.content_length->hash = 0; | |
182 r->headers_out.content_length = NULL; | |
183 } | |
184 } | 180 } |
185 | 181 |
186 if (header[i].key.len == sizeof("X-Compose") - 1 | 182 if (header[i].key.len == sizeof("X-Compose") - 1 |
187 && ngx_strncasecmp(header[i].key.data, "X-Compose", | 183 && ngx_strncasecmp(header[i].key.data, "X-Compose", |
188 sizeof("X-Compose") - 1) | 184 sizeof("X-Compose") - 1) |
206 | 202 |
207 *uri = header[i].value; | 203 *uri = header[i].value; |
208 } | 204 } |
209 } | 205 } |
210 | 206 |
207 if (ctx->parts.nelts == 0) { | |
208 return ngx_http_next_header_filter(r); | |
209 } | |
210 | |
211 r->headers_out.content_length_n = len; | |
212 | |
213 if (r->headers_out.content_length) { | |
214 r->headers_out.content_length->hash = 0; | |
215 r->headers_out.content_length = NULL; | |
216 } | |
211 | 217 |
212 ngx_http_set_ctx(r, ctx, ngx_http_compose_filter_module); | 218 ngx_http_set_ctx(r, ctx, ngx_http_compose_filter_module); |
213 | 219 |
214 r->allow_ranges = 1; | 220 if (len != -1) { |
215 r->late_ranges = 1; | 221 r->allow_ranges = 1; |
222 r->late_ranges = 1; | |
223 | |
224 } else { | |
225 ngx_http_clear_accept_ranges(r); | |
226 } | |
216 | 227 |
217 return ngx_http_next_header_filter(r); | 228 return ngx_http_next_header_filter(r); |
218 } | 229 } |
219 | 230 |
220 | 231 |