Update and clean Tomato RAF files
[tomato.git] / release / src / router / nginx / src / http / ngx_http_cache.h
blob2a2d722915364004feace71009c66e108cc3b8ea
2 /*
3 * Copyright (C) Igor Sysoev
4 * Copyright (C) Nginx, Inc.
5 */
8 #ifndef _NGX_HTTP_CACHE_H_INCLUDED_
9 #define _NGX_HTTP_CACHE_H_INCLUDED_
12 #include <ngx_config.h>
13 #include <ngx_core.h>
14 #include <ngx_http.h>
17 #define NGX_HTTP_CACHE_MISS 1
18 #define NGX_HTTP_CACHE_BYPASS 2
19 #define NGX_HTTP_CACHE_EXPIRED 3
20 #define NGX_HTTP_CACHE_STALE 4
21 #define NGX_HTTP_CACHE_UPDATING 5
22 #define NGX_HTTP_CACHE_HIT 6
23 #define NGX_HTTP_CACHE_SCARCE 7
25 #define NGX_HTTP_CACHE_KEY_LEN 16
28 typedef struct {
29 ngx_uint_t status;
30 time_t valid;
31 } ngx_http_cache_valid_t;
34 typedef struct {
35 ngx_rbtree_node_t node;
36 ngx_queue_t queue;
38 u_char key[NGX_HTTP_CACHE_KEY_LEN
39 - sizeof(ngx_rbtree_key_t)];
41 unsigned count:20;
42 unsigned uses:10;
43 unsigned valid_msec:10;
44 unsigned error:10;
45 unsigned exists:1;
46 unsigned updating:1;
47 unsigned deleting:1;
48 /* 11 unused bits */
50 ngx_file_uniq_t uniq;
51 time_t expire;
52 time_t valid_sec;
53 size_t body_start;
54 off_t fs_size;
55 } ngx_http_file_cache_node_t;
58 struct ngx_http_cache_s {
59 ngx_file_t file;
60 ngx_array_t keys;
61 uint32_t crc32;
62 u_char key[NGX_HTTP_CACHE_KEY_LEN];
64 ngx_file_uniq_t uniq;
65 time_t valid_sec;
66 time_t last_modified;
67 time_t date;
69 size_t header_start;
70 size_t body_start;
71 off_t length;
72 off_t fs_size;
74 ngx_uint_t min_uses;
75 ngx_uint_t error;
76 ngx_uint_t valid_msec;
78 ngx_buf_t *buf;
80 ngx_http_file_cache_t *file_cache;
81 ngx_http_file_cache_node_t *node;
83 ngx_msec_t lock_timeout;
84 ngx_msec_t wait_time;
86 ngx_event_t wait_event;
88 unsigned lock:1;
89 unsigned waiting:1;
91 unsigned updated:1;
92 unsigned updating:1;
93 unsigned exists:1;
94 unsigned temp_file:1;
98 typedef struct {
99 time_t valid_sec;
100 time_t last_modified;
101 time_t date;
102 uint32_t crc32;
103 u_short valid_msec;
104 u_short header_start;
105 u_short body_start;
106 } ngx_http_file_cache_header_t;
109 typedef struct {
110 ngx_rbtree_t rbtree;
111 ngx_rbtree_node_t sentinel;
112 ngx_queue_t queue;
113 ngx_atomic_t cold;
114 ngx_atomic_t loading;
115 off_t size;
116 } ngx_http_file_cache_sh_t;
119 struct ngx_http_file_cache_s {
120 ngx_http_file_cache_sh_t *sh;
121 ngx_slab_pool_t *shpool;
123 ngx_path_t *path;
125 off_t max_size;
126 size_t bsize;
128 time_t inactive;
130 ngx_uint_t files;
131 ngx_uint_t loader_files;
132 ngx_msec_t last;
133 ngx_msec_t loader_sleep;
134 ngx_msec_t loader_threshold;
136 ngx_shm_zone_t *shm_zone;
140 ngx_int_t ngx_http_file_cache_new(ngx_http_request_t *r);
141 ngx_int_t ngx_http_file_cache_create(ngx_http_request_t *r);
142 void ngx_http_file_cache_create_key(ngx_http_request_t *r);
143 ngx_int_t ngx_http_file_cache_open(ngx_http_request_t *r);
144 void ngx_http_file_cache_set_header(ngx_http_request_t *r, u_char *buf);
145 void ngx_http_file_cache_update(ngx_http_request_t *r, ngx_temp_file_t *tf);
146 ngx_int_t ngx_http_cache_send(ngx_http_request_t *);
147 void ngx_http_file_cache_free(ngx_http_cache_t *c, ngx_temp_file_t *tf);
148 time_t ngx_http_file_cache_valid(ngx_array_t *cache_valid, ngx_uint_t status);
150 char *ngx_http_file_cache_set_slot(ngx_conf_t *cf, ngx_command_t *cmd,
151 void *conf);
152 char *ngx_http_file_cache_valid_set_slot(ngx_conf_t *cf, ngx_command_t *cmd,
153 void *conf);
156 extern ngx_str_t ngx_http_cache_status[];
159 #endif /* _NGX_HTTP_CACHE_H_INCLUDED_ */