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