* 20100609.2 (2.3.7-dev) Add deferred write pool to core_output_filter_ctx
* 20100625.0 (2.3.7-dev) Add 'userctx' to socache iterator callback prototype
* 20100630.0 (2.3.7-dev) make module_levels vector of char instead of int
+ * 20100701.0 (2.3.7-dev) re-order struct members to improve alignment
*/
#define MODULE_MAGIC_COOKIE 0x41503234UL /* "AP24" */
void *info;
/** Which allow-override bits are set */
int override;
+ /** Which allow-override-opts bits are set */
+ int override_opts;
/** Which methods are <Limit>ed */
apr_int64_t limited;
/** methods which are limited */
/** directive with syntax error */
const ap_directive_t *err_directive;
- /** Which allow-override-opts bits are set */
- int override_opts;
};
/**
*/
void **notes;
+ /** Custom response strings registered via ap_custom_response(),
+ * or NULL; check per-dir config if nothing found here
+ */
+ char **response_code_strings; /* from ap_custom_response(), not from
+ * ErrorDocument
+ */
+
/** There is a script processor installed on the output filter chain,
* so it needs the default_handler to deliver a (script) file into
* the chain so it can process it. Normally, default_handler only
*/
int deliver_script;
- /** Custom response strings registered via ap_custom_response(),
- * or NULL; check per-dir config if nothing found here
- */
- char **response_code_strings; /* from ap_custom_response(), not from
- * ErrorDocument
- */
/** Should addition of charset= be suppressed for this request?
*/
int suppress_charset;
apr_pool_t *pool;
/** Configuration pool. Cleared upon restart */
apr_pool_t *pconf;
- /** Number of command line arguments passed to the program */
- int argc;
- /** The command line arguments */
- const char * const *argv;
/** The program name used to execute the program */
const char *short_name;
+ /** The command line arguments */
+ const char * const *argv;
+ /** Number of command line arguments passed to the program */
+ int argc;
};
/**
int proxyreq;
/** HEAD request, as opposed to GET */
int header_only;
- /** Protocol string, as given to us, or HTTP/0.9 */
- char *protocol;
/** Protocol version number of protocol; 1.1 = 1001 */
int proto_num;
+ /** Protocol string, as given to us, or HTTP/0.9 */
+ char *protocol;
/** Host, as set by full URI or Host: */
const char *hostname;
* look, but don't touch.
*/
- /** Request method (eg. GET, HEAD, POST, etc.) */
- const char *method;
/** M_GET, M_POST, etc. */
int method_number;
+ /** Request method (eg. GET, HEAD, POST, etc.) */
+ const char *method;
/**
* 'allowed' is a bitvector of the allowed methods.
/* HTTP/1.1 connection-level features */
- /** sending chunked transfer-coding */
- int chunked;
/** The Range: header */
const char *range;
/** The "real" content length */
apr_off_t clength;
+ /** sending chunked transfer-coding */
+ int chunked;
- /** Remaining bytes left to read from the request body */
- apr_off_t remaining;
- /** Number of bytes that have been read from the request body */
- apr_off_t read_length;
/** Method for reading the request body
* (eg. REQUEST_CHUNKED_ERROR, REQUEST_NO_BODY,
* REQUEST_CHUNKED_DECHUNK, etc...) */
int read_chunked;
/** is client waiting for a 100 response? */
unsigned expecting_100;
+ /** The optional kept body of the request. */
+ apr_bucket_brigade *kept_body;
+ /** For ap_body_to_table(): parsed body */
+ /* XXX: ap_body_to_table has been removed. Remove body_table too or
+ * XXX: keep it to reintroduce ap_body_to_table without major bump? */
+ apr_table_t *body_table;
+ /** Remaining bytes left to read from the request body */
+ apr_off_t remaining;
+ /** Number of bytes that have been read from the request body */
+ apr_off_t read_length;
/* MIME header environments, in and out. Also, an array containing
* environment variables to be passed to subprocesses, so people can
/** If an authentication check was made, this gets set to the auth type. */
char *ap_auth_type;
- /** This response can not be cached */
- int no_cache;
- /** There is no local copy of this response */
- int no_local_copy;
-
/* What object is being requested (either directly, or via include
* or content-negotiation mapping).
*/
char *path_info;
/** The QUERY_ARGS extracted from this request */
char *args;
- /** finfo.protection (st_mode) set to zero if no such file */
- apr_finfo_t finfo;
- /** A struct containing the components of URI */
- apr_uri_t parsed_uri;
/**
* Flag for the handler to accept or reject path_info on
*/
int used_path_info;
+ /** A flag to determine if the eos bucket has been sent yet */
+ int eos_sent;
+
/* Various other config info which may change with .htaccess files
* These are config vectors, with one void* pointer for each module
* (the thing pointed to being the module's business).
/** Notes on *this* request */
struct ap_conf_vector_t *request_config;
+ /** Optional request log level configuration. Will usually point
+ * to a server or per_dir config, i.e. must be copied before
+ * modifying */
+ const struct ap_logconf *log;
+
/**
* A linked list of the .htaccess configuration directives
* accessed by this request.
* request */
struct ap_filter_t *proto_input_filters;
- /** Optional request log level configuration. Will usually point
- * to a server or per_dir config, i.e. must be copied before
- * modifying */
- const struct ap_logconf *log;
-
- /** A flag to determine if the eos bucket has been sent yet */
- int eos_sent;
-
- /** The optional kept body of the request. */
- apr_bucket_brigade *kept_body;
+ /** This response can not be cached */
+ int no_cache;
+ /** There is no local copy of this response */
+ int no_local_copy;
+ /** Mutex protect callbacks registered with ap_mpm_register_timed_callback
+ * from being run before the original handler finishes running
+ */
apr_thread_mutex_t *invoke_mtx;
- apr_table_t *body_table;
-
-/* Things placed at the end of the record to avoid breaking binary
- * compatibility. It would be nice to remember to reorder the entire
- * record to improve 64bit alignment the next time we need to break
- * binary compatibility for some other reason.
- */
+ /** A struct containing the components of URI */
+ apr_uri_t parsed_uri;
+ /** finfo.protection (st_mode) set to zero if no such file */
+ apr_finfo_t finfo;
};
/**
* get_remote_logname() */
char *remote_logname;
- /** Are we still talking? */
- unsigned aborted:1;
-
- /** Are we going to keep the connection alive for another request?
- * @see ap_conn_keepalive_e */
- ap_conn_keepalive_e keepalive;
-
- /** have we done double-reverse DNS? -1 yes/failure, 0 not yet,
- * 1 yes/success */
- signed int double_reverse:2;
-
- /** How many times have we used it? */
- int keepalives;
/** server IP address */
char *local_ip;
/** used for ap_get_server_name when UseCanonicalName is set to DNS
/** Are there any filters that clogg/buffer the input stream, breaking
* the event mpm.
*/
- int clogging_input_filters;
+ unsigned int clogging_input_filters:1;
+ /** have we done double-reverse DNS? -1 yes/failure, 0 not yet,
+ * 1 yes/success */
+ signed int double_reverse:2;
+
+ /** Are we still talking? */
+ unsigned aborted;
+
+ /** Are we going to keep the connection alive for another request?
+ * @see ap_conn_keepalive_e */
+ ap_conn_keepalive_e keepalive;
+
+ /** How many times have we used it? */
+ int keepalives;
+
/** Optional connection log level configuration. May point to a server or
* per_dir config, i.e. must be copied before modifying */
const struct ap_logconf *log;
APR_RING_ENTRY(conn_state_t) timeout_list;
/** the expiration time of the next keepalive timeout */
apr_time_t expiration_time;
- /** Current state of the connection */
- conn_state_e state;
/** connection record this struct refers to */
conn_rec *c;
/** memory pool to allocate from */
apr_bucket_alloc_t *bucket_alloc;
/** poll file decriptor information */
apr_pollfd_t pfd;
+ /** Current state of the connection */
+ conn_state_e state;
};
/* Per-vhost config... */
struct server_addr_rec {
/** The next server in the list */
server_addr_rec *next;
+ /** The name given in "<VirtualHost>" */
+ char *virthost;
/** The bound address, for this server */
apr_sockaddr_t *host_addr;
/** The bound port, for this server */
apr_port_t host_port;
- /** The name given in "<VirtualHost>" */
- char *virthost;
};
struct ap_logconf {
/** The next server in the list */
server_rec *next;
- /** The name of the server */
- const char *defn_name;
- /** The line of the config file that the server was defined on */
- unsigned defn_line_number;
-
- /* Contact information */
-
- /** The admin's contact information */
- char *server_admin;
- /** The server hostname */
- char *server_hostname;
- /** for redirects, etc. */
- apr_port_t port;
-
/* Log files --- note that transfer log is now in the modules... */
/** The name of the error log */
/* Module-specific configuration for server, and defaults... */
- /** true if this is the virtual server */
- int is_virtual;
/** Config vector containing pointers to modules' per-server config
* structures. */
struct ap_conf_vector_t *module_config;
/** MIME type info, etc., before we start checking per-directory info */
struct ap_conf_vector_t *lookup_defaults;
+ /** The name of the server */
+ const char *defn_name;
+ /** The line of the config file that the server was defined on */
+ unsigned defn_line_number;
+ /** true if this is the virtual server */
+ char is_virtual;
+
+
+ /* Information for redirects */
+
+ /** for redirects, etc. */
+ apr_port_t port;
+ /** The server request scheme for redirect responses */
+ const char *server_scheme;
+
+ /* Contact information */
+
+ /** The admin's contact information */
+ char *server_admin;
+ /** The server hostname */
+ char *server_hostname;
+
/* Transaction handling */
/** I haven't got a clue */
/** Use persistent connections? */
int keep_alive;
- /** Pathname for ServerPath */
- const char *path;
- /** Length of path */
- int pathlen;
-
/** Normal names for ServerAlias servers */
apr_array_header_t *names;
/** Wildcarded names for ServerAlias servers */
apr_array_header_t *wild_names;
+ /** Pathname for ServerPath */
+ const char *path;
+ /** Length of path */
+ int pathlen;
+
/** limit on size of the HTTP request line */
int limit_req_line;
/** limit on size of any request header field */
/** limit on number of request header fields */
int limit_req_fields;
- /** The server request scheme for redirect responses */
- const char *server_scheme;
/** Opaque storage location */
void *context;
typedef struct core_output_filter_ctx {
apr_bucket_brigade *buffered_bb;
- apr_size_t bytes_in;
- apr_size_t bytes_written;
apr_bucket_brigade *tmp_flush_bb;
apr_pool_t *deferred_write_pool;
+ apr_size_t bytes_in;
+ apr_size_t bytes_written;
} core_output_filter_ctx_t;
typedef struct core_filter_ctx {
/* stuff which is worker specific */
typedef struct worker_score worker_score;
struct worker_score {
- int thread_num;
#if APR_HAS_THREADS
apr_os_thread_t tid;
#endif
+ int thread_num;
/* With some MPMs (e.g., worker), a worker_score can represent
* a thread in a terminating process which is no longer
* represented by the corresponding process_score. These MPMs
pid_t pid;
ap_generation_t generation;
unsigned char status;
+ unsigned short conn_count;
+ apr_off_t conn_bytes;
unsigned long access_count;
apr_off_t bytes_served;
unsigned long my_access_count;
apr_off_t my_bytes_served;
- apr_off_t conn_bytes;
- unsigned short conn_count;
apr_time_t start_time;
apr_time_t stop_time;
+ apr_time_t last_used;
#ifdef HAVE_TIMES
struct tms times;
#endif
- apr_time_t last_used;
char client[32]; /* Keep 'em small... */
char request[64]; /* We just want an idea... */
char vhost[32]; /* What virtual host is being accessed? */
*/
ap_init_filter_func filter_init_func;
+ /** The next filter_rec in the list */
+ struct ap_filter_rec_t *next;
+
+ /** Providers for this filter */
+ ap_filter_provider_t *providers;
+
/** The type of filter, either AP_FTYPE_CONTENT or AP_FTYPE_CONNECTION.
* An AP_FTYPE_CONTENT filter modifies the data based on information
* found in the content. An AP_FTYPE_CONNECTION filter modifies the
*/
ap_filter_type ftype;
- /** The next filter_rec in the list */
- struct ap_filter_rec_t *next;
-
- /** Providers for this filter */
- ap_filter_provider_t *providers;
-
/** Trace level for this filter */
int debug;
#if APR_HAS_THREADS
apr_thread_mutex_t *lock; /* Lock to indicate this connection is in use */
#endif
- int bound; /* Flag to indicate whether this connection is bound yet */
const char *host; /* Name of the LDAP server (or space separated list) */
int port; /* Port of the LDAP server */
const char *binddn; /* DN to bind to server (can be NULL) */
const char *bindpw; /* Password to bind to server (can be NULL) */
+ int bound; /* Flag to indicate whether this connection is bound yet */
+
int secure; /* SSL/TLS mode of the connection */
apr_array_header_t *client_certs; /* Client certificates on this connection */
long compare_cache_size; /* Size (in entries) of compare cache */
struct util_ldap_connection_t *connections;
- int ssl_supported;
apr_array_header_t *global_certs; /* Global CA certificates */
+ int ssl_supported;
int secure;
int secure_set;
+ int verify_svr_cert;
#if APR_HAS_SHARED_MEMORY
apr_shm_t *cache_shm;
/* cache ald */
void *util_ldap_cache;
+
long connectionTimeout;
- int verify_svr_cert;
- int debug_level; /* SDK debug level */
struct timeval *opTimeout;
+ int debug_level; /* SDK debug level */
+
} util_ldap_state_t;
/* Used to store arrays of attribute labels/values. */
const char *message_qop;
const char *nonce_count;
/* the following fields are not (directly) from the header */
- apr_time_t nonce_time;
- enum hdr_sts auth_hdr_sts;
const char *raw_request_uri;
apr_uri_t *psd_request_uri;
+ apr_time_t nonce_time;
+ enum hdr_sts auth_hdr_sts;
int needed_auth;
client_entry *client;
} digest_header_rec;
apr_time_t maxex;
int maxex_set;
/* default time to keep cached file in msecs */
- apr_time_t defex;
int defex_set;
+ apr_time_t defex;
/* factor for estimating expires date */
double factor;
int factor_set;
/** ignore Cache-Control: no-store header from client or server */
int store_nostore;
int store_nostore_set;
- /** store the headers that should not be stored in the cache */
- apr_array_header_t *ignore_headers;
/* flag if CacheIgnoreHeader has been set */
#define CACHE_IGNORE_HEADERS_SET 1
#define CACHE_IGNORE_HEADERS_UNSET 0
int ignore_headers_set;
+ /** store the headers that should not be stored in the cache */
+ apr_array_header_t *ignore_headers;
/* Minimum time to keep cached files in msecs */
apr_time_t minex;
int minex_set;
/** ignore query-string when caching */
int ignorequerystring;
int ignorequerystring_set;
- /** store the identifiers that should not be used for key calculation */
- apr_array_header_t *ignore_session_id;
/* flag if CacheIgnoreURLSessionIdentifiers has been set */
#define CACHE_IGNORE_SESSION_ID_SET 1
#define CACHE_IGNORE_SESSION_ID_UNSET 0
int ignore_session_id_set;
+ /** store the identifiers that should not be used for key calculation */
+ apr_array_header_t *ignore_session_id;
/* thundering herd lock */
int lock;
int lock_set;
const char *lockpath;
int lockpath_set;
- apr_time_t lockmaxage;
int lockmaxage_set;
+ apr_time_t lockmaxage;
/** run within the quick handler */
int quick;
int quick_set;
/* cache info information */
typedef struct cache_info cache_info;
struct cache_info {
- /**
- * HTTP status code of the cached entity. Though not necessarily the
- * status code finally issued to the request.
- */
- int status;
/**
* the original time corresponding to the 'Date:' header of the request
* served
apr_time_t request_time;
/** apr_time_now() at the time the entity was acutally cached */
apr_time_t response_time;
+ /**
+ * HTTP status code of the cached entity. Though not necessarily the
+ * status code finally issued to the request.
+ */
+ int status;
};
/* cache handle information */
{
dav_propdb *propdb;
+ apr_xml_elem *prop; /* property to affect */
+
int operation;
#define DAV_PROP_OP_SET 1 /* set a property value */
#define DAV_PROP_OP_DELETE 2 /* delete a prop value */
/* ### add a GET? */
- apr_xml_elem *prop; /* property to affect */
-
- dav_error *err; /* error (if any) */
-
/* private items to the propdb */
int is_liveprop;
void *liveprop_ctx;
struct dav_rollback_item *rollback; /* optional rollback info */
+ dav_error *err; /* error (if any) */
+
/* private to mod_dav.c */
request_rec *r;
const char *scheme; /* the schemes handled by this proxy, or '*' */
const char *protocol; /* the scheme used to talk to this proxy */
const char *hostname; /* the hostname of this proxy */
- apr_port_t port; /* the port for this proxy */
- ap_regex_t *regexp; /* compiled regex (if any) for the remote */
+ ap_regex_t *regexp; /* compiled regex (if any) for the remote */
int use_regex; /* simple boolean. True if we have a regex pattern */
+ apr_port_t port; /* the port for this proxy */
};
#define PROXYPASS_NOCANON 0x01
proxy_worker *forward; /* forward proxy worker */
proxy_worker *reverse; /* reverse "module-driven" proxy worker */
const char *domain; /* domain name to use in absence of a domain name in the request */
+ apr_pool_t *pool; /* Pool used for allocating this struct */
int req; /* true if proxy requests are enabled */
- char req_set;
enum {
via_off,
via_on,
via_block,
via_full
} viaopt; /* how to deal with proxy Via: headers */
- char viaopt_set;
apr_size_t recv_buffer_size;
- char recv_buffer_size_set;
apr_size_t io_buffer_size;
- char io_buffer_size_set;
long maxfwd;
- char maxfwd_set;
+ apr_interval_time_t timeout;
/**
* the following setting masks the error page
* returned from the 'proxied server' and just
* returned from the rest of the system
*/
int error_override;
- int error_override_set;
- apr_interval_time_t timeout;
- char timeout_set;
enum {
bad_error,
bad_ignore,
bad_body
} badopt; /* how to deal with bad headers */
- char badopt_set;
-/* putting new stuff on the end maximises binary back-compatibility.
- * the strmatch_patterns are really a const just to have a
- * case-independent strstr.
- */
enum {
status_off,
status_on,
status_full
} proxy_status; /* Status display options */
+
+ char req_set;
+ char viaopt_set;
+ char recv_buffer_size_set;
+ char io_buffer_size_set;
+ char maxfwd_set;
+ char timeout_set;
+ char error_override_set;
+ char badopt_set;
char proxy_status_set;
- apr_pool_t *pool; /* Pool used for allocating this struct */
} proxy_server_conf;
typedef struct {
const char *p; /* The path */
- int p_is_fnmatch; /* Is this path an fnmatch candidate? */
ap_regex_t *r; /* Is this a regex? */
/* ProxyPassReverse and friends are documented as working inside
apr_array_header_t* cookie_domains;
const apr_strmatch_pattern* cookie_path_str;
const apr_strmatch_pattern* cookie_domain_str;
- int interpolate_env;
- int preserve_host;
- int preserve_host_set;
+
+ signed char p_is_fnmatch; /* Is the path an fnmatch candidate? */
+ signed char interpolate_env;
+ signed char preserve_host;
+ signed char preserve_host_set;
} proxy_dir_conf;
/* if we interpolate env vars per-request, we'll need a per-request
typedef struct {
conn_rec *connection;
- const char *hostname;
- apr_port_t port;
- int is_ssl;
+ request_rec *r; /* Request record of the frontend request
+ * which the backend currently answers. */
+ proxy_worker *worker; /* Connection pool this connection belongs to */
apr_pool_t *pool; /* Subpool for hostname and addr data */
- apr_socket_t *sock; /* Connection socket */
+ const char *hostname;
apr_sockaddr_t *addr; /* Preparsed remote address info */
- apr_uint32_t flags; /* Connection flags */
- int close; /* Close 'this' connection */
- proxy_worker *worker; /* Connection pool this connection belongs to */
+ apr_pool_t *scpool; /* Subpool used for socket and connection data */
+ apr_socket_t *sock; /* Connection socket */
void *data; /* per scheme connection data */
+ void *forward; /* opaque forward proxy data */
+ apr_uint32_t flags; /* Connection flags */
+ apr_port_t port;
+ char is_ssl;
+ char close; /* Close 'this' connection */
+ char need_flush;/* Flag to decide whether we need to flush the
+ * filter chain or not */
#if APR_HAS_THREADS
- int inreslist; /* connection in apr_reslist? */
+ char inreslist; /* connection in apr_reslist? */
#endif
- apr_pool_t *scpool; /* Subpool used for socket and connection data */
- request_rec *r; /* Request record of the frontend request
- * which the backend currently answers. */
- int need_flush;/* Flag to decide whether we need to flush the
- * filter chain or not */
- void *forward; /* opaque forward proxy data */
} proxy_conn_rec;
typedef struct {
/* Runtime worker status informations. Shared in scoreboard */
typedef struct {
- int status;
apr_time_t error_time; /* time of the last error */
+ int status;
int retries; /* number of retries on this worker */
int lbstatus; /* Current lbstatus */
int lbfactor; /* dynamic lbfactor */
/* Worker configuration */
struct proxy_worker {
- int id; /* scoreboard id */
- apr_interval_time_t retry; /* retry interval */
- int lbfactor; /* initial load balancing factor */
const char *name;
const char *scheme; /* scheme to use ajp|http|https */
const char *hostname; /* remote backend address */
const char *route; /* balancing route */
const char *redirect; /* temporary balancing redirection route */
+ int id; /* scoreboard id */
int status; /* temporary worker status */
- apr_port_t port;
+ int lbfactor; /* initial load balancing factor */
+ int lbset; /* load balancer cluster set */
int min; /* Desired minimum number of available connections */
int smax; /* Soft maximum on the total number of connections */
int hmax; /* Hard maximum on the total number of connections */
apr_interval_time_t ttl; /* maximum amount of time in seconds a connection
* may be available while exceeding the soft limit */
+ apr_interval_time_t retry; /* retry interval */
apr_interval_time_t timeout; /* connection timeout */
- char timeout_set;
apr_interval_time_t acquire; /* acquire timeout when the maximum number of connections is exceeded */
- char acquire_set;
+ apr_interval_time_t ping_timeout;
+ apr_interval_time_t conn_timeout;
apr_size_t recv_buffer_size;
- char recv_buffer_size_set;
apr_size_t io_buffer_size;
- char io_buffer_size_set;
+ apr_port_t port;
char keepalive;
- char keepalive_set;
+ char disablereuse;
+ int is_address_reusable;
proxy_conn_pool *cp; /* Connection pool to use */
proxy_worker_stat *s; /* Shared data */
void *opaque; /* per scheme worker data */
- int is_address_reusable;
-#if APR_HAS_THREADS
- apr_thread_mutex_t *mutex; /* Thread lock for updating address cache */
-#endif
void *context; /* general purpose storage */
enum {
flush_off,
flush_auto
} flush_packets; /* control AJP flushing */
int flush_wait; /* poll wait time in microseconds if flush_auto */
- apr_interval_time_t ping_timeout;
- char ping_timeout_set;
- int lbset; /* load balancer cluster set */
+ const char *flusher; /* flush provider used by mod_proxy_fdpass */
+#if APR_HAS_THREADS
+ apr_thread_mutex_t *mutex; /* Thread lock for updating address cache */
+#endif
+
char retry_set;
- char disablereuse;
- char disablereuse_set;
- apr_interval_time_t conn_timeout;
+ char timeout_set;
+ char acquire_set;
+ char ping_timeout_set;
char conn_timeout_set;
- const char *flusher; /* flush provider used by mod_proxy_fdpass */
+ char recv_buffer_size_set;
+ char io_buffer_size_set;
+ char keepalive_set;
+ char disablereuse_set;
};
/*
struct proxy_balancer {
apr_array_header_t *workers; /* array of proxy_workers */
const char *name; /* name of the load balancer */
- const char *sticky; /* sticky session identifier */
- int sticky_force; /* Disable failover for sticky sessions */
apr_interval_time_t timeout; /* Timeout for waiting on free connection */
- int max_attempts; /* Number of attempts before failing */
- char max_attempts_set;
proxy_balancer_method *lbmethod;
+ const char *sticky_path; /* URL sticky session identifier */
+ apr_array_header_t *errstatuses; /* statuses to force members into error */
+ const char *sticky; /* sticky session identifier */
+ int sticky_force; /* Disable failover for sticky sessions */
+ int scolonsep; /* true if ';' seps sticky session paths */
+
+ int max_attempts; /* Number of attempts before failing */
+ char max_attempts_set;
+
/* XXX: Perhaps we will need the proc mutex too.
* Altrough we are only using arithmetic operations
* it may lead to a incorrect calculations.
#if APR_HAS_THREADS
apr_thread_mutex_t *mutex; /* Thread lock for updating lb params */
#endif
- void *context; /* general purpose storage */
- const char *sticky_path; /* URL sticky session identifier */
- int scolonsep; /* true if ';' seps sticky session paths */
- apr_array_header_t *errstatuses; /* statuses to force members into error */
+ void *context; /* general purpose storage */
};
struct proxy_balancer_method {
*/
static cmd_parms default_parms =
-{NULL, 0, -1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL};
+{NULL, 0, 0, -1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL};
AP_DECLARE(char *) ap_server_root_relative(apr_pool_t *p, const char *file)
{