231 lines
		
	
	
		
			9.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			231 lines
		
	
	
		
			9.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /* Licensed to the Apache Software Foundation (ASF) under one or more
 | |
|  * contributor license agreements.  See the NOTICE file distributed with
 | |
|  * this work for additional information regarding copyright ownership.
 | |
|  * The ASF licenses this file to You under the Apache License, Version 2.0
 | |
|  * (the "License"); you may not use this file except in compliance with
 | |
|  * the License.  You may obtain a copy of the License at
 | |
|  *
 | |
|  *     http://www.apache.org/licenses/LICENSE-2.0
 | |
|  *
 | |
|  * Unless required by applicable law or agreed to in writing, software
 | |
|  * distributed under the License is distributed on an "AS IS" BASIS,
 | |
|  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | |
|  * See the License for the specific language governing permissions and
 | |
|  * limitations under the License.
 | |
|  */
 | |
| 
 | |
| /**
 | |
|  * @file ap_socache.h
 | |
|  * @brief Small object cache provider interface.
 | |
|  *
 | |
|  * @defgroup AP_SOCACHE ap_socache
 | |
|  * @ingroup  APACHE_MODS
 | |
|  * @{
 | |
|  */
 | |
| 
 | |
| #ifndef AP_SOCACHE_H
 | |
| #define AP_SOCACHE_H
 | |
| 
 | |
| #include "httpd.h"
 | |
| #include "ap_provider.h"
 | |
| #include "apr_pools.h"
 | |
| #include "apr_time.h"
 | |
| 
 | |
| #ifdef __cplusplus
 | |
| extern "C" {
 | |
| #endif
 | |
| 
 | |
| /** If this flag is set, the store/retrieve/remove/status interfaces
 | |
|  * of the provider are NOT safe to be called concurrently from
 | |
|  * multiple processes or threads, and an external global mutex must be
 | |
|  * used to serialize access to the provider.
 | |
|  */
 | |
| /* XXX: Even if store/retrieve/remove is atomic, isn't it useful to note
 | |
|  * independently that status and iterate may or may not be?
 | |
|  */
 | |
| #define AP_SOCACHE_FLAG_NOTMPSAFE (0x0001)
 | |
| 
 | |
| /** A cache instance. */
 | |
| typedef struct ap_socache_instance_t ap_socache_instance_t;
 | |
| 
 | |
| /** Hints which may be passed to the init function; providers may
 | |
|  * ignore some or all of these hints. */
 | |
| struct ap_socache_hints {
 | |
|     /** Approximate average length of IDs: */
 | |
|     apr_size_t avg_id_len;
 | |
|     /** Approximate average size of objects: */
 | |
|     apr_size_t avg_obj_size;
 | |
|     /** Suggested interval between expiry cleanup runs; */
 | |
|     apr_interval_time_t expiry_interval;
 | |
| };
 | |
| 
 | |
| /**
 | |
|  * Iterator callback prototype for the ap_socache_provider_t->iterate() method
 | |
|  * @param instance The cache instance
 | |
|  * @param s Associated server context (for logging)
 | |
|  * @param userctx User defined pointer passed from the iterator call
 | |
|  * @param id Unique ID for the object (binary blob)
 | |
|  * with a trailing null char for convenience
 | |
|  * @param idlen Length of id blob
 | |
|  * @param data Output buffer to place retrieved data (binary blob)
 | |
|  * with a trailing null char for convenience
 | |
|  * @param datalen Length of data buffer
 | |
|  * @param pool Pool for temporary allocations
 | |
|  * @return APR status value; return APR_SUCCESS or the iteration will halt;
 | |
|  * this value is returned to the ap_socache_provider_t->iterate() caller
 | |
|  */
 | |
| typedef apr_status_t (ap_socache_iterator_t)(ap_socache_instance_t *instance,
 | |
|                                              server_rec *s,
 | |
|                                              void *userctx,
 | |
|                                              const unsigned char *id,
 | |
|                                              unsigned int idlen,
 | |
|                                              const unsigned char *data,
 | |
|                                              unsigned int datalen,
 | |
|                                              apr_pool_t *pool);
 | |
| 
 | |
| /** A socache provider structure.  socache providers are registered
 | |
|  * with the ap_provider.h interface using the AP_SOCACHE_PROVIDER_*
 | |
|  * constants. */
 | |
| typedef struct ap_socache_provider_t {
 | |
|     /** Canonical provider name. */
 | |
|     const char *name;
 | |
| 
 | |
|     /** Bitmask of AP_SOCACHE_FLAG_* flags. */
 | |
|     unsigned int flags;
 | |
| 
 | |
|     /**
 | |
|      * Create a session cache based on the given configuration string.
 | |
|      * The instance pointer returned in the instance parameter will be
 | |
|      * passed as the first argument to subsequent invocations.
 | |
|      *
 | |
|      * @param instance Output parameter to which instance object is written.
 | |
|      * @param arg User-specified configuration string.  May be NULL to
 | |
|      *        force use of defaults.
 | |
|      * @param tmp Pool to be used for any temporary allocations
 | |
|      * @param p Pool to be use for any allocations lasting as long as
 | |
|      * the created instance
 | |
|      * @return NULL on success, or an error string on failure.
 | |
|      */
 | |
|     const char *(*create)(ap_socache_instance_t **instance, const char *arg,
 | |
|                           apr_pool_t *tmp, apr_pool_t *p);
 | |
| 
 | |
|     /**
 | |
|      * Initialize the cache.  The cname must be of maximum length 16
 | |
|      * characters, and uniquely identifies the consumer of the cache
 | |
|      * within the server; using the module name is recommended, e.g.
 | |
|      * "mod_ssl-sess".  This string may be used within a filesystem
 | |
|      * path so use of only alphanumeric [a-z0-9_-] characters is
 | |
|      * recommended.  If hints is non-NULL, it gives a set of hints for
 | |
|      * the provider.  Returns APR error code.
 | |
|      *
 | |
|      * @param instance The cache instance
 | |
|      * @param cname A unique string identifying the consumer of this API
 | |
|      * @param hints Optional hints argument describing expected cache use
 | |
|      * @param s Server structure to which the cache is associated
 | |
|      * @param pool Pool for long-lived allocations
 | |
|      * @return APR status value indicating success.
 | |
|      */
 | |
|     apr_status_t (*init)(ap_socache_instance_t *instance, const char *cname,
 | |
|                          const struct ap_socache_hints *hints,
 | |
|                          server_rec *s, apr_pool_t *pool);
 | |
| 
 | |
|     /**
 | |
|      * Destroy a given cache instance object.
 | |
|      * @param instance The cache instance to destroy.
 | |
|      * @param s Associated server structure (for logging purposes)
 | |
|      */
 | |
|     void (*destroy)(ap_socache_instance_t *instance, server_rec *s);
 | |
| 
 | |
|     /**
 | |
|      * Store an object in a cache instance.
 | |
|      * @param instance The cache instance
 | |
|      * @param s Associated server structure (for logging purposes)
 | |
|      * @param id Unique ID for the object; binary blob
 | |
|      * @param idlen Length of id blob
 | |
|      * @param expiry Absolute time at which the object expires
 | |
|      * @param data Data to store; binary blob
 | |
|      * @param datalen Length of data blob
 | |
|      * @param pool Pool for temporary allocations.
 | |
|      * @return APR status value.
 | |
|      */
 | |
|     apr_status_t (*store)(ap_socache_instance_t *instance, server_rec *s,
 | |
|                           const unsigned char *id, unsigned int idlen,
 | |
|                           apr_time_t expiry,
 | |
|                           unsigned char *data, unsigned int datalen,
 | |
|                           apr_pool_t *pool);
 | |
| 
 | |
|     /**
 | |
|      * Retrieve a cached object.
 | |
|      * 
 | |
|      * @param instance The cache instance
 | |
|      * @param s Associated server structure (for logging purposes)
 | |
|      * @param id Unique ID for the object; binary blob
 | |
|      * @param idlen Length of id blob
 | |
|      * @param data Output buffer to place retrievd data (binary blob)
 | |
|      * @param datalen On entry, length of data buffer; on exit, the
 | |
|      * number of bytes written to the data buffer.
 | |
|      * @param pool Pool for temporary allocations.
 | |
|      * @return APR status value; APR_NOTFOUND if the object was not
 | |
|      * found
 | |
|      */
 | |
|     apr_status_t (*retrieve)(ap_socache_instance_t *instance, server_rec *s,
 | |
|                              const unsigned char *id, unsigned int idlen,
 | |
|                              unsigned char *data, unsigned int *datalen,
 | |
|                              apr_pool_t *pool);
 | |
| 
 | |
|     /**
 | |
|      * Remove an object from the cache
 | |
|      *
 | |
|      * @param instance The cache instance
 | |
|      * @param s Associated server structure (for logging purposes)
 | |
|      * @param id Unique ID for the object; binary blob
 | |
|      * @param idlen Length of id blob
 | |
|      * @param pool Pool for temporary allocations.
 | |
|      */
 | |
|     apr_status_t (*remove)(ap_socache_instance_t *instance, server_rec *s,
 | |
|                            const unsigned char *id, unsigned int idlen,
 | |
|                            apr_pool_t *pool);
 | |
| 
 | |
|     /** 
 | |
|      * Dump the status of a cache instance for mod_status.  Will use
 | |
|      * the ap_r* interfaces to produce appropriate status output.
 | |
|      * XXX: ap_r* are deprecated, bad dogfood
 | |
|      *
 | |
|      * @param instance The cache instance
 | |
|      * @param r The request structure
 | |
|      * @param flags The AP_STATUS_* constants used (see mod_status.h)
 | |
|      */
 | |
|     void (*status)(ap_socache_instance_t *instance, request_rec *r, int flags);
 | |
| 
 | |
|     /**
 | |
|      * Dump all cached objects through an iterator callback.
 | |
|      * @param instance The cache instance
 | |
|      * @param s Associated server context (for processing and logging)
 | |
|      * @param userctx User defined pointer passed through to the iterator
 | |
|      * @param iterator The user provided callback function which will receive
 | |
|      * individual calls for each unexpired id/data pair
 | |
|      * @param pool Pool for temporary allocations.
 | |
|      * @return APR status value; APR_NOTFOUND if the object was not
 | |
|      * found
 | |
|      */
 | |
|     apr_status_t (*iterate)(ap_socache_instance_t *instance, server_rec *s,
 | |
|                             void *userctx, ap_socache_iterator_t *iterator,
 | |
|                             apr_pool_t *pool);
 | |
| 
 | |
| } ap_socache_provider_t;
 | |
| 
 | |
| /** The provider group used to register socache providers. */
 | |
| #define AP_SOCACHE_PROVIDER_GROUP "socache"
 | |
| /** The provider version used to register socache providers. */
 | |
| #define AP_SOCACHE_PROVIDER_VERSION "0"
 | |
| 
 | |
| /** Default provider name. */
 | |
| #define AP_SOCACHE_DEFAULT_PROVIDER "default"
 | |
| 
 | |
| #ifdef __cplusplus
 | |
| }
 | |
| #endif
 | |
| 
 | |
| #endif /* AP_SOCACHE_H */
 | |
| /** @} */
 | 
