Mercurial > hg > nginx
comparison src/http/modules/ngx_http_range_filter.c @ 117:f6e3c5d019b6
nginx-0.0.1-2003-07-11-19:17:50 import
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Fri, 11 Jul 2003 15:17:50 +0000 |
parents | d7f606e25b99 |
children | b27548f540ad |
comparison
equal
deleted
inserted
replaced
116:571bcbff82c5 | 117:f6e3c5d019b6 |
---|---|
41 static int ngx_http_range_header_filter(ngx_http_request_t *r) | 41 static int ngx_http_range_header_filter(ngx_http_request_t *r) |
42 { | 42 { |
43 int rc, boundary, len, i; | 43 int rc, boundary, len, i; |
44 char *p; | 44 char *p; |
45 off_t start, end; | 45 off_t start, end; |
46 ngx_table_elt_t *accept_ranges; | |
46 ngx_http_range_t *range; | 47 ngx_http_range_t *range; |
47 ngx_http_range_filter_ctx_t *ctx; | 48 ngx_http_range_filter_ctx_t *ctx; |
48 | 49 |
49 if (r->main | 50 if (r->main |
50 || r->http_version < NGX_HTTP_VERSION_10 | 51 || r->http_version < NGX_HTTP_VERSION_10 |
51 || r->headers_out.status != NGX_HTTP_OK | 52 || r->headers_out.status != NGX_HTTP_OK |
52 || r->headers_out.content_length == -1 | 53 || r->headers_out.content_length == -1 |
53 /* STUB: we currently support ranges for file hunks only */ | 54 /* STUB: we currently support ranges for file hunks only */ |
54 || r->filter & NGX_HTTP_FILTER_NEED_IN_MEMORY | 55 || r->filter & NGX_HTTP_FILTER_NEED_IN_MEMORY) |
55 || r->headers_in.range == NULL | 56 { |
57 return next_header_filter(r); | |
58 } | |
59 | |
60 if (r->headers_in.range == NULL | |
56 || r->headers_in.range->value.len < 7 | 61 || r->headers_in.range->value.len < 7 |
57 || ngx_strncasecmp(r->headers_in.range->value.data, "bytes=", 6) != 0) | 62 || ngx_strncasecmp(r->headers_in.range->value.data, "bytes=", 6) != 0) |
58 { | 63 { |
64 ngx_test_null(accept_ranges, | |
65 ngx_push_table(r->headers_out.headers), | |
66 NGX_ERROR); | |
67 | |
68 accept_ranges->key.len = sizeof("Accept-Ranges") - 1; | |
69 accept_ranges->key.data = "Accept-Ranges"; | |
70 accept_ranges->value.len = sizeof("bytes") - 1; | |
71 accept_ranges->value.data = "bytes"; | |
72 | |
59 return next_header_filter(r); | 73 return next_header_filter(r); |
60 } | 74 } |
61 | 75 |
62 ngx_init_array(r->headers_out.ranges, r->pool, 5, sizeof(ngx_http_range_t), | 76 ngx_init_array(r->headers_out.ranges, r->pool, 5, sizeof(ngx_http_range_t), |
63 NGX_ERROR); | 77 NGX_ERROR); |