diff src/http/ngx_http_file_cache.c @ 5737:44b9ab7752e3

Cache: ETag now saved into cache header.
author Maxim Dounin <mdounin@mdounin.ru>
date Thu, 26 Jun 2014 02:28:23 +0400
parents 2fe1967f8854
children 063f7e75f9ef
line wrap: on
line diff
--- a/src/http/ngx_http_file_cache.c
+++ b/src/http/ngx_http_file_cache.c
@@ -525,6 +525,8 @@ ngx_http_file_cache_read(ngx_http_reques
     c->valid_msec = h->valid_msec;
     c->header_start = h->header_start;
     c->body_start = h->body_start;
+    c->etag.len = h->etag_len;
+    c->etag.data = h->etag;
 
     r->cached = 1;
 
@@ -890,6 +892,11 @@ ngx_http_file_cache_set_header(ngx_http_
     h->header_start = (u_short) c->header_start;
     h->body_start = (u_short) c->body_start;
 
+    if (c->etag.len <= NGX_HTTP_CACHE_ETAG_LEN) {
+        h->etag_len = (u_char) c->etag.len;
+        ngx_memcpy(h->etag, c->etag.data, c->etag.len);
+    }
+
     p = buf + sizeof(ngx_http_file_cache_header_t);
 
     p = ngx_cpymem(p, ngx_http_file_cache_key, sizeof(ngx_http_file_cache_key));
@@ -1077,6 +1084,11 @@ ngx_http_file_cache_update_header(ngx_ht
     h.header_start = (u_short) c->header_start;
     h.body_start = (u_short) c->body_start;
 
+    if (c->etag.len <= NGX_HTTP_CACHE_ETAG_LEN) {
+        h.etag_len = (u_char) c->etag.len;
+        ngx_memcpy(h.etag, c->etag.data, c->etag.len);
+    }
+
     (void) ngx_write_file(&file, (u_char *) &h,
                           sizeof(ngx_http_file_cache_header_t), 0);