| /* | |
| * 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_ */ |