Apache2
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
cache_util.h
Go to the documentation of this file.
1 /* Licensed to the Apache Software Foundation (ASF) under one or more
2  * contributor license agreements. See the NOTICE file distributed with
3  * this work for additional information regarding copyright ownership.
4  * The ASF licenses this file to You under the Apache License, Version 2.0
5  * (the "License"); you may not use this file except in compliance with
6  * the License. You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
26 #ifndef CACHE_UTIL_H
27 #define CACHE_UTIL_H
28 
29 #ifdef __cplusplus
30 extern "C" {
31 #endif
32 
33 #include "mod_cache.h"
34 
35 #include "apr_hooks.h"
36 #include "apr.h"
37 #include "apr_lib.h"
38 #include "apr_strings.h"
39 #include "apr_buckets.h"
40 #include "apr_md5.h"
41 #include "apr_pools.h"
42 #include "apr_strings.h"
43 #include "apr_optional.h"
44 #define APR_WANT_STRFUNC
45 #include "apr_want.h"
46 
47 #include "httpd.h"
48 #include "http_config.h"
49 #include "ap_config.h"
50 #include "http_core.h"
51 #include "http_protocol.h"
52 #include "http_request.h"
53 #include "http_vhost.h"
54 #include "http_main.h"
55 #include "http_log.h"
56 #include "http_connection.h"
57 #include "util_filter.h"
58 #include "apr_uri.h"
59 
60 #ifdef HAVE_NETDB_H
61 #include <netdb.h>
62 #endif
63 
64 #ifdef HAVE_SYS_SOCKET_H
65 #include <sys/socket.h>
66 #endif
67 
68 #ifdef HAVE_NETINET_IN_H
69 #include <netinet/in.h>
70 #endif
71 
72 #ifdef HAVE_ARPA_INET_H
73 #include <arpa/inet.h>
74 #endif
75 
76 #include "apr_atomic.h"
77 
78 #ifndef MAX
79 #define MAX(a,b) ((a) > (b) ? (a) : (b))
80 #endif
81 #ifndef MIN
82 #define MIN(a,b) ((a) < (b) ? (a) : (b))
83 #endif
84 
85 #define MSEC_ONE_DAY ((apr_time_t)(86400*APR_USEC_PER_SEC)) /* one day, in microseconds */
86 #define MSEC_ONE_HR ((apr_time_t)(3600*APR_USEC_PER_SEC)) /* one hour, in microseconds */
87 #define MSEC_ONE_MIN ((apr_time_t)(60*APR_USEC_PER_SEC)) /* one minute, in microseconds */
88 #define MSEC_ONE_SEC ((apr_time_t)(APR_USEC_PER_SEC)) /* one second, in microseconds */
89 
90 #define DEFAULT_CACHE_MAXEXPIRE MSEC_ONE_DAY
91 #define DEFAULT_CACHE_MINEXPIRE 0
92 #define DEFAULT_CACHE_EXPIRE MSEC_ONE_HR
93 #define DEFAULT_CACHE_LMFACTOR (0.1)
94 #define DEFAULT_CACHE_MAXAGE 5
95 #define DEFAULT_X_CACHE 0
96 #define DEFAULT_X_CACHE_DETAIL 0
97 #define DEFAULT_CACHE_STALE_ON_ERROR 1
98 #define DEFAULT_CACHE_LOCKPATH "mod_cache-lock"
99 #define CACHE_LOCKNAME_KEY "mod_cache-lockname"
100 #define CACHE_LOCKFILE_KEY "mod_cache-lockfile"
101 #define CACHE_CTX_KEY "mod_cache-ctx"
102 #define CACHE_SEPARATOR ", \t"
103 
108 struct cache_enable {
110  const char *type;
112 };
113 
117 };
118 
119 /* static information about the local cache */
120 typedef struct {
121  apr_array_header_t *cacheenable; /* URLs to cache */
122  apr_array_header_t *cachedisable; /* URLs not to cache */
127  const char *lockpath;
131  unsigned int ignorecachecontrol:1;
133  unsigned int ignorequerystring:1;
135  unsigned int quick:1;
136  /* thundering herd lock */
137  unsigned int lock:1;
138  unsigned int x_cache:1;
139  unsigned int x_cache_detail:1;
140  /* flag if CacheIgnoreHeader has been set */
141  #define CACHE_IGNORE_HEADERS_SET 1
142  #define CACHE_IGNORE_HEADERS_UNSET 0
143  unsigned int ignore_headers_set:1;
144  /* flag if CacheIgnoreURLSessionIdentifiers has been set */
145  #define CACHE_IGNORE_SESSION_ID_SET 1
146  #define CACHE_IGNORE_SESSION_ID_UNSET 0
147  unsigned int ignore_session_id_set:1;
148  unsigned int base_uri_set:1;
149  unsigned int ignorecachecontrol_set:1;
150  unsigned int ignorequerystring_set:1;
151  unsigned int quick_set:1;
152  unsigned int lock_set:1;
153  unsigned int lockpath_set:1;
154  unsigned int lockmaxage_set:1;
155  unsigned int x_cache_set:1;
156  unsigned int x_cache_detail_set:1;
158 
159 typedef struct {
160  /* Minimum time to keep cached files in msecs */
162  /* Maximum time to keep cached files in msecs */
164  /* default time to keep cached file in msecs */
166  /* factor for estimating expires date */
167  double factor;
168  /* cache enabled for this location */
170  /* cache disabled for this location */
171  unsigned int disable:1;
172  /* set X-Cache headers */
173  unsigned int x_cache:1;
174  unsigned int x_cache_detail:1;
175  /* serve stale on error */
176  unsigned int stale_on_error:1;
178  unsigned int no_last_mod_ignore:1;
180  unsigned int store_expired:1;
182  unsigned int store_private:1;
184  unsigned int store_nostore:1;
185  unsigned int minex_set:1;
186  unsigned int maxex_set:1;
187  unsigned int defex_set:1;
188  unsigned int factor_set:1;
189  unsigned int x_cache_set:1;
190  unsigned int x_cache_detail_set:1;
191  unsigned int stale_on_error_set:1;
192  unsigned int no_last_mod_ignore_set:1;
193  unsigned int store_expired_set:1;
194  unsigned int store_private_set:1;
195  unsigned int store_nostore_set:1;
196  unsigned int enable_set:1;
197  unsigned int disable_set:1;
199 
200 /* A linked-list of authn providers. */
202 
204  const char *provider_name;
207 };
208 
209 /* per request cache information */
210 typedef struct {
211  cache_provider_list *providers; /* possible cache providers */
212  const cache_provider *provider; /* current cache provider */
213  const char *provider_name; /* current cache provider name */
214  int fresh; /* is the entity fresh? */
215  cache_handle_t *handle; /* current cache handle */
216  cache_handle_t *stale_handle; /* stale cache handle */
217  apr_table_t *stale_headers; /* original request headers. */
218  int in_checked; /* CACHE_SAVE must cache the entity */
219  int block_response; /* CACHE_SAVE must block response. */
220  apr_bucket_brigade *saved_brigade; /* copy of partial response */
221  apr_off_t saved_size; /* length of saved_brigade */
222  apr_time_t exp; /* expiration */
223  apr_time_t lastmod; /* last-modified time */
224  cache_info *info; /* current cache info */
225  ap_filter_t *save_filter; /* Enable us to restore the filter on error */
226  ap_filter_t *remove_url_filter; /* Enable us to remove the filter */
227  const char *key; /* The cache key created for this
228  * request
229  */
230  apr_off_t size; /* the content length from the headers, or -1 */
231  apr_bucket_brigade *out; /* brigade to reuse for upstream responses */
232  cache_control_t control_in; /* cache control incoming */
234 
243 
252 
261  request_rec *r);
262 
285  request_rec *r);
286 
301 
304 
315 const char *cache_table_getm(apr_pool_t *p, const apr_table_t *t,
316  const char *key);
317 
322 char *cache_strqtok(char *str, const char *sep, char **last);
323 
329 
335 
336 #ifdef __cplusplus
337 }
338 #endif
339 
340 #endif /* !CACHE_UTIL_H */
341 
size_t apr_size_t
Definition: apr.h:375
cache_provider_list * cache_get_providers(request_rec *r, cache_server_conf *conf)
int block_response
Definition: cache_util.h:219
const char * lockpath
Definition: cache_util.h:127
Apache Configuration.
apr_array_header_t * ignore_headers
Definition: cache_util.h:124
Main include file for the Apache Transparent Cache.
Definition: apr_tables.h:62
cache_provider_list * providers
Definition: cache_util.h:211
cache_control_t control_in
Definition: cache_util.h:232
int ap_cache_check_no_cache(cache_request_rec *cache, request_rec *r)
Definition: mod_cache.h:99
The representation of a filter chain.
Definition: util_filter.h:273
const char * type
Definition: cache_util.h:110
apr_uri_t url
Definition: cache_util.h:109
apr_size_t pathlen
Definition: cache_util.h:116
cache_handle_t * handle
Definition: cache_util.h:215
const char * cache_table_getm(apr_pool_t *p, const apr_table_t *t, const char *key)
apr_off_t size
Definition: cache_util.h:230
int ap_cache_check_no_store(cache_request_rec *cache, request_rec *r)
int fresh
Definition: cache_util.h:214
APR Standard Headers Support.
cache_handle_t * stale_handle
Definition: cache_util.h:216
CORE HTTP Daemon.
apr_size_t pathlen
Definition: cache_util.h:111
Definition: cache_common.h:30
Apache connection library.
apr_time_t exp
Definition: cache_util.h:222
Definition: cache_util.h:203
Definition: apr_buckets.h:258
ap_filter_t * save_filter
Definition: cache_util.h:225
Virtual Host package.
APR-UTIL registration of functions exported by modules.
Symbol export macros and hook functions.
apr_time_t maxex
Definition: cache_util.h:163
ap_filter_t * remove_url_filter
Definition: cache_util.h:226
Apache Logging library.
apr_int64_t apr_time_t
Definition: apr_time.h:45
Command line options.
apr_time_t lastmod
Definition: cache_util.h:223
APR memory allocation.
apr_bucket_brigade * bb
Definition: mod_dav.h:552
const char * provider_name
Definition: cache_util.h:204
HTTP Daemon routines.
Apache hook functions.
apr_status_t cache_try_lock(cache_server_conf *conf, cache_request_rec *cache, request_rec *r)
Definition: cache_util.h:108
const char * provider_name
Definition: cache_util.h:213
Definition: cache_util.h:114
apr_uri_t url
Definition: cache_util.h:115
apr_bucket_brigade * out
Definition: cache_util.h:231
Definition: mod_cache.h:59
const cache_provider * provider
Definition: cache_util.h:205
APR-UTIL Buckets/Bucket Brigades.
cache_provider_list * next
Definition: cache_util.h:206
cache_info * info
Definition: cache_util.h:224
APR Platform Definitions.
APR MD5 Routines.
APR general purpose library routines.
const char * key
Definition: cache_util.h:227
char * cache_strqtok(char *str, const char *sep, char **last)
Definition: mod_cache.h:91
HTTP protocol handling.
int in_checked
Definition: cache_util.h:218
apr_array_header_t * cacheenable
Definition: cache_util.h:169
apr_status_t cache_remove_lock(cache_server_conf *conf, cache_request_rec *cache, request_rec *r, apr_bucket_brigade *bb)
Definition: apr_uri.h:85
double factor
Definition: cache_util.h:167
apr_pool_t * p
apr_bucket_brigade * saved_brigade
Definition: cache_util.h:220
apr_time_t lockmaxage
Definition: cache_util.h:128
apr_time_t defex
Definition: cache_util.h:165
Apache Request library.
A structure that represents the current request.
Definition: httpd.h:806
apr_array_header_t * ignore_session_id
Definition: cache_util.h:126
Apache filter library.
APR Strings library.
dav_buffer const char * str
Definition: mod_dav.h:461
apr_array_header_t * cacheenable
Definition: cache_util.h:121
apr_table_t * cache_merge_headers_out(request_rec *r)
Definition: cache_util.h:159
APR Atomic Operations.
struct apr_table_t apr_table_t
Definition: apr_tables.h:56
apr_table_t * stale_headers
Definition: cache_util.h:217
Definition: cache_util.h:120
int cache_check_freshness(cache_handle_t *h, cache_request_rec *cache, request_rec *r)
apr_time_t minex
Definition: cache_util.h:161
struct apr_pool_t apr_pool_t
Definition: apr_pools.h:60
apr_uri_t * base_uri
Definition: cache_util.h:129
int apr_status_t
Definition: apr_errno.h:44
request_rec * r
Definition: mod_dav.h:515
APR-UTIL URI Routines.
apr_off_t saved_size
Definition: cache_util.h:221
proxy_worker proxy_server_conf * conf
Definition: mod_proxy.h:611
int cache_use_early_url(request_rec *r)
Definition: cache_util.h:210
apr_array_header_t * cachedisable
Definition: cache_util.h:122
off_t apr_off_t
Definition: apr.h:377
const cache_provider * provider
Definition: cache_util.h:212