123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230 |
- /* 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 */
- /** @} */
|