parent
966315a1e9
commit
70f3ec2922
|
@ -134,6 +134,7 @@ ngx_http_range_header_filter(ngx_http_request_t *r)
|
|||
u_char *p;
|
||||
size_t len;
|
||||
off_t start, end;
|
||||
time_t if_range;
|
||||
ngx_int_t rc;
|
||||
ngx_uint_t suffix, i;
|
||||
ngx_atomic_uint_t boundary;
|
||||
|
@ -156,18 +157,21 @@ ngx_http_range_header_filter(ngx_http_request_t *r)
|
|||
(u_char *) "bytes=", 6)
|
||||
!= 0)
|
||||
{
|
||||
r->headers_out.accept_ranges = ngx_list_push(&r->headers_out.headers);
|
||||
if (r->headers_out.accept_ranges == NULL) {
|
||||
return NGX_ERROR;
|
||||
goto next_filter;
|
||||
}
|
||||
|
||||
if (r->headers_in.if_range && r->headers_out.last_modified_time != -1) {
|
||||
|
||||
if_range = ngx_http_parse_time(r->headers_in.if_range->value.data,
|
||||
r->headers_in.if_range->value.len);
|
||||
|
||||
ngx_log_debug2(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
|
||||
"http ir:%d lm:%d",
|
||||
if_range, r->headers_out.last_modified_time);
|
||||
|
||||
if (if_range != r->headers_out.last_modified_time) {
|
||||
goto next_filter;
|
||||
}
|
||||
|
||||
r->headers_out.accept_ranges->hash = 1;
|
||||
r->headers_out.accept_ranges->key.len = sizeof("Accept-Ranges") - 1;
|
||||
r->headers_out.accept_ranges->key.data = (u_char *) "Accept-Ranges";
|
||||
r->headers_out.accept_ranges->value.len = sizeof("bytes") - 1;
|
||||
r->headers_out.accept_ranges->value.data = (u_char *) "bytes";
|
||||
|
||||
return ngx_http_next_header_filter(r);
|
||||
}
|
||||
|
||||
ctx = ngx_pcalloc(r->pool, sizeof(ngx_http_range_filter_ctx_t));
|
||||
|
@ -460,6 +464,21 @@ ngx_http_range_header_filter(ngx_http_request_t *r)
|
|||
r->headers_out.content_length = NULL;
|
||||
}
|
||||
|
||||
return ngx_http_next_header_filter(r);
|
||||
|
||||
next_filter:
|
||||
|
||||
r->headers_out.accept_ranges = ngx_list_push(&r->headers_out.headers);
|
||||
if (r->headers_out.accept_ranges == NULL) {
|
||||
return NGX_ERROR;
|
||||
}
|
||||
|
||||
r->headers_out.accept_ranges->hash = 1;
|
||||
r->headers_out.accept_ranges->key.len = sizeof("Accept-Ranges") - 1;
|
||||
r->headers_out.accept_ranges->key.data = (u_char *) "Accept-Ranges";
|
||||
r->headers_out.accept_ranges->value.len = sizeof("bytes") - 1;
|
||||
r->headers_out.accept_ranges->value.data = (u_char *) "bytes";
|
||||
|
||||
return ngx_http_next_header_filter(r);
|
||||
}
|
||||
|
||||
|
|
|
@ -97,6 +97,10 @@ ngx_http_header_t ngx_http_headers_in[] = {
|
|||
{ ngx_string("Range"), offsetof(ngx_http_headers_in_t, range),
|
||||
ngx_http_process_header_line },
|
||||
|
||||
{ ngx_string("If-Range"),
|
||||
offsetof(ngx_http_headers_in_t, if_range),
|
||||
ngx_http_process_unique_header_line },
|
||||
|
||||
{ ngx_string("Transfer-Encoding"),
|
||||
offsetof(ngx_http_headers_in_t, transfer_encoding),
|
||||
ngx_http_process_header_line },
|
||||
|
|
|
@ -168,6 +168,7 @@ typedef struct {
|
|||
ngx_table_elt_t *content_type;
|
||||
|
||||
ngx_table_elt_t *range;
|
||||
ngx_table_elt_t *if_range;
|
||||
|
||||
ngx_table_elt_t *transfer_encoding;
|
||||
|
||||
|
|
Loading…
Reference in New Issue