| |
| /* |
| * Copyright (C) Igor Sysoev |
| */ |
| |
| |
| #ifndef _NGX_HTTP_CACHE_H_INCLUDED_ |
| #define _NGX_HTTP_CACHE_H_INCLUDED_ |
| |
| |
| #include <ngx_config.h> |
| #include <ngx_core.h> |
| #include <ngx_http.h> |
| |
| |
| /* |
| * The 3 bits allows the 7 uses before the cache entry allocation. |
| * We can use maximum 7 bits, i.e up to the 127 uses. |
| */ |
| #define NGX_HTTP_CACHE_LAZY_ALLOCATION_BITS 3 |
| |
| |
| typedef struct { |
| uint32_t crc; |
| ngx_str_t key; |
| time_t accessed; |
| |
| unsigned refs:20; /* 1048576 references */ |
| |
| unsigned count:NGX_HTTP_CACHE_LAZY_ALLOCATION_BITS; |
| |
| unsigned deleted:1; |
| unsigned expired:1; |
| unsigned memory:1; |
| unsigned mmap:1; |
| unsigned notify:1; |
| |
| ngx_fd_t fd; |
| #if (NGX_USE_HTTP_FILE_CACHE_UNIQ) |
| ngx_file_uniq_t uniq; /* no needed with kqueue */ |
| #endif |
| time_t last_modified; |
| time_t updated; |
| |
| union { |
| off_t size; |
| ngx_str_t value; |
| } data; |
| } ngx_http_cache_entry_t; |
| |
| |
| typedef struct { |
| time_t expires; |
| time_t last_modified; |
| time_t date; |
| off_t length; |
| size_t key_len; |
| char key[1]; |
| } ngx_http_cache_header_t; |
| |
| |
| #define NGX_HTTP_CACHE_HASH 7 |
| #define NGX_HTTP_CACHE_NELTS 4 |
| |
| typedef struct { |
| ngx_http_cache_entry_t *elts; |
| size_t hash; |
| size_t nelts; |
| time_t life; |
| time_t update; |
| #if (NGX_THREADS) |
| ngx_mutex_t mutex; |
| #endif |
| ngx_pool_t *pool; |
| } ngx_http_cache_hash_t; |
| |
| |
| typedef struct { |
| ngx_http_cache_hash_t *hash; |
| ngx_http_cache_entry_t *cache; |
| ngx_file_t file; |
| ngx_array_t key; |
| uint32_t crc; |
| u_char md5[16]; |
| ngx_path_t *path; |
| ngx_buf_t *buf; |
| time_t expires; |
| time_t last_modified; |
| time_t date; |
| off_t length; |
| size_t key_len; |
| size_t file_start; |
| ngx_file_uniq_t uniq; |
| ngx_log_t *log; |
| |
| /* STUB */ |
| ssize_t header_size; |
| ngx_str_t key0; |
| } ngx_http_cache_t; |
| |
| |
| typedef struct { |
| ngx_path_t *path; |
| ngx_str_t key; |
| ngx_buf_t *buf; |
| |
| unsigned file:1; |
| unsigned memory:1; |
| unsigned primary:1; |
| } ngx_http_cache_ctx_t; |
| |
| |
| #define NGX_HTTP_CACHE_STALE 1 |
| #define NGX_HTTP_CACHE_AGED 2 |
| #define NGX_HTTP_CACHE_THE_SAME 3 |
| |
| |
| ngx_int_t ngx_http_cache_get(ngx_http_request_t *r, ngx_http_cache_ctx_t *ctx); |
| |
| ngx_int_t ngx_http_file_cache_get(ngx_http_request_t *r, |
| ngx_http_cache_ctx_t *ctx); |
| |
| ngx_int_t ngx_http_file_cache_open(ngx_http_cache_t *c); |
| |
| ngx_int_t ngx_http_cache_cleaner_handler(ngx_gc_t *gc, ngx_str_t *name, |
| ngx_dir_t *dir); |
| |
| |
| #if 0 |
| |
| ngx_http_cache_t *ngx_http_cache_get(ngx_http_cache_hash_t *cache, |
| ngx_http_cleanup_t *cleanup, |
| ngx_str_t *key, uint32_t *crc); |
| |
| ngx_http_cache_t *ngx_http_cache_alloc(ngx_http_cache_hash_t *hash, |
| ngx_http_cache_t *cache, |
| ngx_http_cleanup_t *cleanup, |
| ngx_str_t *key, uint32_t crc, |
| ngx_str_t *value, ngx_log_t *log); |
| void ngx_http_cache_free(ngx_http_cache_t *cache, |
| ngx_str_t *key, ngx_str_t *value, ngx_log_t *log); |
| void ngx_http_cache_lock(ngx_http_cache_hash_t *hash, ngx_http_cache_t *cache); |
| void ngx_http_cache_unlock(ngx_http_cache_hash_t *hash, |
| ngx_http_cache_t *cache, ngx_log_t *log); |
| |
| int ngx_http_cache_update_file(ngx_http_request_t *r,ngx_http_cache_ctx_t *ctx, |
| ngx_str_t *temp_file); |
| |
| int ngx_http_send_cached(ngx_http_request_t *r); |
| |
| |
| char *ngx_http_set_cache_slot(ngx_conf_t *cf, ngx_command_t *cmd, void *conf); |
| |
| #endif |
| |
| |
| #endif /* _NGX_HTTP_CACHE_H_INCLUDED_ */ |