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