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