Apache2
Collaboration diagram for mod_proxy:

Modules

 AJP API functions
 
 Private
 

Data Structures

struct  proxy_hcmethods_t
 
struct  proxy_wstat_t
 
struct  proxy_remote
 
struct  proxy_alias
 
struct  dirconn_entry
 
struct  noproxy_entry
 
struct  proxy_server_conf
 
struct  proxy_dir_conf
 
struct  proxy_req_conf
 
struct  proxy_conn_rec
 
struct  proxy_completion
 
struct  proxy_conn_pool
 
struct  proxy_hashes
 
struct  proxy_worker_shared
 
struct  proxy_worker
 
struct  proxy_balancer_shared
 
struct  proxy_balancer
 
struct  proxy_balancer_method
 
struct  proxy_tunnel_rec
 

Macros

#define APR_WANT_STRFUNC
 
#define PROXY_CANONENC_FORCEDEC   0x01
 
#define PROXY_CANONENC_NOENCODEDSLASHENCODING   0x02
 
#define BALANCER_PREFIX   "balancer://"
 
#define CRLF   "\015\012"
 
#define DEFAULT_MAX_FORWARDS   -1
 
#define PROXYPASS_NOCANON   0x01
 
#define PROXYPASS_INTERPOLATE   0x02
 
#define PROXYPASS_NOQUERY   0x04
 
#define PROXYPASS_MAP_ENCODED   0x08
 
#define PROXYPASS_MAP_SERVLET   0x18 /* + MAP_ENCODED */
 
#define AP_VOLATILIZE_T(T, x)   (*(T volatile *)&(x))
 
#define PROXY_WORKER_INITIALIZED   0x0001
 
#define PROXY_WORKER_IGNORE_ERRORS   0x0002
 
#define PROXY_WORKER_DRAIN   0x0004
 
#define PROXY_WORKER_GENERIC   0x0008
 
#define PROXY_WORKER_IN_SHUTDOWN   0x0010
 
#define PROXY_WORKER_DISABLED   0x0020
 
#define PROXY_WORKER_STOPPED   0x0040
 
#define PROXY_WORKER_IN_ERROR   0x0080
 
#define PROXY_WORKER_HOT_STANDBY   0x0100
 
#define PROXY_WORKER_FREE   0x0200
 
#define PROXY_WORKER_HC_FAIL   0x0400
 
#define PROXY_WORKER_HOT_SPARE   0x0800
 
#define PROXY_WORKER_INITIALIZED_FLAG   'O'
 
#define PROXY_WORKER_IGNORE_ERRORS_FLAG   'I'
 
#define PROXY_WORKER_DRAIN_FLAG   'N'
 
#define PROXY_WORKER_GENERIC_FLAG   'G'
 
#define PROXY_WORKER_IN_SHUTDOWN_FLAG   'U'
 
#define PROXY_WORKER_DISABLED_FLAG   'D'
 
#define PROXY_WORKER_STOPPED_FLAG   'S'
 
#define PROXY_WORKER_IN_ERROR_FLAG   'E'
 
#define PROXY_WORKER_HOT_STANDBY_FLAG   'H'
 
#define PROXY_WORKER_FREE_FLAG   'F'
 
#define PROXY_WORKER_HC_FAIL_FLAG   'C'
 
#define PROXY_WORKER_HOT_SPARE_FLAG   'R'
 
#define PROXY_WORKER_NOT_USABLE_BITMAP
 
#define PROXY_WORKER_IS_INITIALIZED(f)   ( (f)->s->status & PROXY_WORKER_INITIALIZED )
 
#define PROXY_WORKER_IS_STANDBY(f)   ( (f)->s->status & PROXY_WORKER_HOT_STANDBY )
 
#define PROXY_WORKER_IS_SPARE(f)   ( (f)->s->status & PROXY_WORKER_HOT_SPARE )
 
#define PROXY_WORKER_IS_USABLE(f)
 
#define PROXY_WORKER_IS_DRAINING(f)   ( (f)->s->status & PROXY_WORKER_DRAIN )
 
#define PROXY_WORKER_IS_GENERIC(f)   ( (f)->s->status & PROXY_WORKER_GENERIC )
 
#define PROXY_WORKER_IS_HCFAILED(f)   ( (f)->s->status & PROXY_WORKER_HC_FAIL )
 
#define PROXY_WORKER_IS_ERROR(f)   ( (f)->s->status & PROXY_WORKER_IN_ERROR )
 
#define PROXY_WORKER_IS(f, b)   ( (f)->s->status & (b) )
 
#define PROXY_WORKER_DEFAULT_RETRY   60
 
#define PROXY_WORKER_MAX_SCHEME_SIZE   16
 
#define PROXY_WORKER_MAX_ROUTE_SIZE   96
 
#define PROXY_BALANCER_MAX_ROUTE_SIZE   64
 
#define PROXY_WORKER_MAX_NAME_SIZE   384
 
#define PROXY_BALANCER_MAX_NAME_SIZE   64
 
#define PROXY_WORKER_MAX_HOSTNAME_SIZE   96
 
#define PROXY_BALANCER_MAX_HOSTNAME_SIZE   64
 
#define PROXY_BALANCER_MAX_STICKY_SIZE   64
 
#define PROXY_WORKER_MAX_SECRET_SIZE   64
 
#define PROXY_WORKER_UDS_PATH_SIZE   256
 
#define PROXY_RFC1035_HOSTNAME_SIZE   256
 
#define PROXY_WORKER_RFC1035_NAME_SIZE   512
 
#define PROXY_MAX_PROVIDER_NAME_SIZE   16
 
#define PROXY_STRNCPY(dst, src)   ap_proxy_strncpy((dst), (src), (sizeof(dst)))
 
#define PROXY_COPY_CONF_PARAMS(w, c)
 
#define PROXY_SHOULD_PING_100_CONTINUE(w, r)
 
#define PROXY_DO_100_CONTINUE(w, r)
 
#define ALIGNED_PROXY_WORKER_SHARED_SIZE   (APR_ALIGN_DEFAULT(sizeof(proxy_worker_shared)))
 
#define HCHECK_WATHCHDOG_DEFAULT_INTERVAL   (30)
 
#define PROXY_FLUSH_WAIT   10000
 
#define ALIGNED_PROXY_BALANCER_SHARED_SIZE   (APR_ALIGN_DEFAULT(sizeof(proxy_balancer_shared)))
 
#define PROXY_THREAD_LOCK(x)   ( (x) && (x)->tmutex ? apr_thread_mutex_lock((x)->tmutex) : APR_SUCCESS)
 
#define PROXY_THREAD_UNLOCK(x)   ( (x) && (x)->tmutex ? apr_thread_mutex_unlock((x)->tmutex) : APR_SUCCESS)
 
#define PROXY_GLOBAL_LOCK(x)   ( (x) && (x)->gmutex ? apr_global_mutex_lock((x)->gmutex) : APR_SUCCESS)
 
#define PROXY_GLOBAL_UNLOCK(x)   ( (x) && (x)->gmutex ? apr_global_mutex_unlock((x)->gmutex) : APR_SUCCESS)
 
#define PROXY_DECLARE(type)   type
 
#define PROXY_DECLARE_NONSTD(type)   type
 
#define PROXY_DECLARE_DATA
 
#define PROXY_DECLARE_OPTIONAL_HOOK   APR_DECLARE_EXTERNAL_HOOK
 
#define AP_PROXY_WORKER_IS_PREFIX   (1u << 0)
 
#define AP_PROXY_WORKER_IS_MATCH   (1u << 1)
 
#define AP_PROXY_WORKER_IS_MALLOCED   (1u << 2)
 
#define AP_PROXY_WORKER_NO_UDS   (1u << 3)
 
#define PROXY_DETERMINE_ADDRESS_CHECK   (1u << 0)
 
#define PROXY_CHECK_CONN_EMPTY   (1 << 0)
 
#define PROXY_LBMETHOD   "proxylbmethod"
 
#define PROXY_DYNAMIC_BALANCER_LIMIT   16
 
#define AP_PROXY_TRANSFER_FLUSH_EACH   (0x00)
 
#define AP_PROXY_TRANSFER_FLUSH_AFTER   (0x01)
 
#define AP_PROXY_TRANSFER_YIELD_PENDING   (0x02)
 
#define AP_PROXY_TRANSFER_YIELD_MAX_READS   (0x04)
 

Typedefs

typedef struct proxy_balancer proxy_balancer
 
typedef struct proxy_worker proxy_worker
 
typedef struct proxy_conn_pool proxy_conn_pool
 
typedef struct proxy_balancer_method proxy_balancer_method
 
typedef const char *(* ap_proxy_header_reverse_map_fn) (request_rec *, proxy_dir_conf *, const char *)
 
typedef int() proxy_is_best_callback_fn_t(proxy_worker *current, proxy_worker *prev_best, void *baton)
 
typedef struct proxy_tunnel_conn proxy_tunnel_conn_t
 

Enumerations

enum  enctype {
  enc_path , enc_search , enc_user , enc_fpath ,
  enc_parm
}
 
enum  hcmethod_t {
  NONE , TCP , OPTIONS , HEAD ,
  GET , CPING , PROVIDER , OPTIONS11 ,
  HEAD11 , GET11 , EOT
}
 
enum  proxy_hash_t { PROXY_HASHFUNC_DEFAULT , PROXY_HASHFUNC_APR , PROXY_HASHFUNC_FNV }
 

Functions

void hc_show_exprs (request_rec *)
 
void hc_select_exprs (request_rec *, const char *)
 
int hc_valid_expr (request_rec *, const char *)
 
const char * set_worker_hc_param (apr_pool_t *, server_rec *, proxy_worker *, const char *, const char *, void *)
 
 PROXY_DECLARE_OPTIONAL_HOOK (proxy, PROXY, int, section_post_config,(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *s, ap_conf_vector_t *section_config)) int proxy_hook_scheme_handler(request_rec *r
 
int proxy_hook_check_trans (request_rec *r, const char *url)
 
int proxy_hook_canon_handler (request_rec *r, char *url)
 
 PROXY_DECLARE_OPTIONAL_HOOK (proxy, PROXY, int, create_req,(request_rec *r, request_rec *pr)) PROXY_DECLARE_OPTIONAL_HOOK(proxy
 
request_rec proxy_conn_rec *backend int proxy_hook_pre_request (proxy_worker **worker, proxy_balancer **balancer, request_rec *r, proxy_server_conf *conf, char **url)
 
int proxy_hook_post_request (proxy_worker *worker, proxy_balancer *balancer, request_rec *r, proxy_server_conf *conf)
 
 PROXY_DECLARE_OPTIONAL_HOOK (proxy, PROXY, int, request_status,(int *status, request_rec *r)) apr_status_t ap_proxy_strncpy(char *dst
 
int ap_proxy_hex2c (const char *x)
 
void ap_proxy_c2hex (int ch, char *x)
 
char * ap_proxy_canonenc_ex (apr_pool_t *p, const char *x, int len, enum enctype t, int flags, int proxyreq)
 
char * ap_proxy_canonenc (apr_pool_t *p, const char *x, int len, enum enctype t, int forcedec, int proxyreq)
 
char * ap_proxy_canon_netloc (apr_pool_t *p, char **const urlp, char **userp, char **passwordp, char **hostp, apr_port_t *port)
 
int ap_proxyerror (request_rec *r, int statuscode, const char *message)
 
int ap_proxy_checkproxyblock (request_rec *r, proxy_server_conf *conf, const char *hostname, apr_sockaddr_t *addr)
 
int ap_proxy_pre_http_request (conn_rec *c, request_rec *r)
 
int ap_proxy_connect_to_backend (apr_socket_t **, const char *, apr_sockaddr_t *, const char *, proxy_server_conf *, request_rec *)
 
apr_status_t ap_proxy_ssl_connection_cleanup (proxy_conn_rec *conn, request_rec *r)
 
int ap_proxy_ssl_enable (conn_rec *c)
 
int ap_proxy_ssl_disable (conn_rec *c)
 
int ap_proxy_ssl_engine (conn_rec *c, ap_conf_vector_t *per_dir_config, int enable)
 
int ap_proxy_conn_is_https (conn_rec *c)
 
const char * ap_proxy_ssl_val (apr_pool_t *p, server_rec *s, conn_rec *c, request_rec *r, const char *var)
 
const char * ap_proxy_location_reverse_map (request_rec *r, proxy_dir_conf *conf, const char *url)
 
const char * ap_proxy_cookie_reverse_map (request_rec *r, proxy_dir_conf *conf, const char *str)
 
char * ap_proxy_worker_name (apr_pool_t *unused, proxy_worker *worker)
 
const char * ap_proxy_worker_get_name (const proxy_worker *worker)
 
int ap_proxy_worker_can_upgrade (apr_pool_t *p, const proxy_worker *worker, const char *upgrade, const char *dflt)
 
proxy_workerap_proxy_get_worker_ex (apr_pool_t *p, proxy_balancer *balancer, proxy_server_conf *conf, const char *url, unsigned int mask)
 
proxy_workerap_proxy_get_worker (apr_pool_t *p, proxy_balancer *balancer, proxy_server_conf *conf, const char *url)
 
char * ap_proxy_define_worker_ex (apr_pool_t *p, proxy_worker **worker, proxy_balancer *balancer, proxy_server_conf *conf, const char *url, unsigned int mask)
 
char * ap_proxy_define_worker (apr_pool_t *p, proxy_worker **worker, proxy_balancer *balancer, proxy_server_conf *conf, const char *url, int do_malloc)
 
char * ap_proxy_define_match_worker (apr_pool_t *p, proxy_worker **worker, proxy_balancer *balancer, proxy_server_conf *conf, const char *url, int do_malloc)
 
apr_status_t ap_proxy_share_worker (proxy_worker *worker, proxy_worker_shared *shm, int i)
 
apr_status_t ap_proxy_initialize_worker (proxy_worker *worker, server_rec *s, apr_pool_t *p)
 
int ap_proxy_valid_balancer_name (char *name, int i)
 
proxy_balancerap_proxy_get_balancer (apr_pool_t *p, proxy_server_conf *conf, const char *url, int careactive)
 
char * ap_proxy_update_balancer (apr_pool_t *p, proxy_balancer *balancer, const char *url)
 
char * ap_proxy_define_balancer (apr_pool_t *p, proxy_balancer **balancer, proxy_server_conf *conf, const char *url, const char *alias, int do_malloc)
 
apr_status_t ap_proxy_share_balancer (proxy_balancer *balancer, proxy_balancer_shared *shm, int i)
 
apr_status_t ap_proxy_initialize_balancer (proxy_balancer *balancer, server_rec *s, apr_pool_t *p)
 
proxy_workerap_proxy_balancer_get_best_worker (proxy_balancer *balancer, request_rec *r, proxy_is_best_callback_fn_t *is_best, void *baton)
 
proxy_workerproxy_balancer_get_best_worker (proxy_balancer *balancer, request_rec *r, proxy_is_best_callback_fn_t *is_best, void *baton)
 
proxy_worker_sharedap_proxy_find_workershm (ap_slotmem_provider_t *storage, ap_slotmem_instance_t *slot, proxy_worker *worker, unsigned int *index)
 
proxy_balancer_sharedap_proxy_find_balancershm (ap_slotmem_provider_t *storage, ap_slotmem_instance_t *slot, proxy_balancer *balancer, unsigned int *index)
 
int ap_proxy_pre_request (proxy_worker **worker, proxy_balancer **balancer, request_rec *r, proxy_server_conf *conf, char **url)
 
int ap_proxy_post_request (proxy_worker *worker, proxy_balancer *balancer, request_rec *r, proxy_server_conf *conf)
 
apr_status_t ap_proxy_determine_address (const char *proxy_function, proxy_conn_rec *conn, const char *hostname, apr_port_t hostport, unsigned int flags, request_rec *r, server_rec *s)
 
int ap_proxy_determine_connection (apr_pool_t *p, request_rec *r, proxy_server_conf *conf, proxy_worker *worker, proxy_conn_rec *conn, apr_uri_t *uri, char **url, const char *proxyname, apr_port_t proxyport, char *server_portstr, int server_portstr_size)
 
int ap_proxy_retry_worker (const char *proxy_function, proxy_worker *worker, server_rec *s)
 
int ap_proxy_acquire_connection (const char *proxy_function, proxy_conn_rec **conn, proxy_worker *worker, server_rec *s)
 
int ap_proxy_release_connection (const char *proxy_function, proxy_conn_rec *conn, server_rec *s)
 
apr_status_t ap_proxy_check_connection (const char *scheme, proxy_conn_rec *conn, server_rec *server, unsigned max_blank_lines, int flags)
 
int ap_proxy_connect_backend (const char *proxy_function, proxy_conn_rec *conn, proxy_worker *worker, server_rec *s)
 
apr_status_t ap_proxy_connect_uds (apr_socket_t *sock, const char *uds_path, apr_pool_t *p)
 
int ap_proxy_connection_create (const char *proxy_function, proxy_conn_rec *conn, conn_rec *c, server_rec *s)
 
int ap_proxy_connection_create_ex (const char *proxy_function, proxy_conn_rec *conn, request_rec *r)
 
int ap_proxy_connection_reusable (proxy_conn_rec *conn)
 
void ap_proxy_fill_error_brigade (request_rec *r, int status, apr_bucket_brigade *bb, int eoc)
 
void ap_proxy_backend_broke (request_rec *r, apr_bucket_brigade *brigade)
 
unsigned int ap_proxy_hashfunc (const char *str, proxy_hash_t method)
 
apr_status_t ap_proxy_set_wstatus (char c, int set, proxy_worker *w)
 
char * ap_proxy_parse_wstatus (apr_pool_t *p, proxy_worker *w)
 
apr_status_t ap_proxy_sync_balancer (proxy_balancer *b, server_rec *s, proxy_server_conf *conf)
 
int ap_proxy_trans_match (request_rec *r, struct proxy_alias *ent, proxy_dir_conf *dconf)
 
int ap_proxy_create_hdrbrgd (apr_pool_t *p, apr_bucket_brigade *header_brigade, request_rec *r, proxy_conn_rec *p_conn, proxy_worker *worker, proxy_server_conf *conf, apr_uri_t *uri, char *url, char *server_portstr, char **old_cl_val, char **old_te_val)
 
int ap_proxy_prefetch_input (request_rec *r, proxy_conn_rec *backend, apr_bucket_brigade *input_brigade, apr_read_type_e block, apr_off_t *bytes_read, apr_off_t max_read)
 
int ap_proxy_spool_input (request_rec *r, proxy_conn_rec *backend, apr_bucket_brigade *input_brigade, apr_off_t *bytes_spooled, apr_off_t max_mem_spool)
 
int ap_proxy_read_input (request_rec *r, proxy_conn_rec *backend, apr_bucket_brigade *input_brigade, apr_off_t max_read)
 
int ap_proxy_pass_brigade (apr_bucket_alloc_t *bucket_alloc, request_rec *r, proxy_conn_rec *p_conn, conn_rec *origin, apr_bucket_brigade *bb, int flush)
 
apr_status_t ap_proxy_tunnel_create (proxy_tunnel_rec **tunnel, request_rec *r, conn_rec *c_o, const char *scheme)
 
int ap_proxy_tunnel_run (proxy_tunnel_rec *tunnel)
 
apr_off_t ap_proxy_tunnel_conn_bytes_in (const proxy_tunnel_conn_t *tc)
 
apr_off_t ap_proxy_tunnel_conn_bytes_out (const proxy_tunnel_conn_t *tc)
 
 PROXY_DECLARE_OPTIONAL_HOOK (proxy, PROXY, int, tunnel_forward,(proxy_tunnel_rec *tunnel, conn_rec *c_i, conn_rec *c_o, apr_bucket_brigade *bb)) int ap_proxy_clear_connection(request_rec *r
 
apr_status_t balancer_manage (request_rec *, apr_table_t *params)
 
apr_status_t ajp_handle_cping_cpong (apr_socket_t *sock, request_rec *r, apr_interval_time_t timeout)
 
int ap_proxy_is_socket_connected (apr_socket_t *socket)
 
int ap_proxy_lb_workers (void)
 
int ap_proxy_should_override (proxy_dir_conf *conf, int code)
 
apr_port_t ap_proxy_port_of_scheme (const char *scheme)
 
const char * ap_proxy_show_hcmethod (hcmethod_t method)
 
const char * ap_proxy_de_socketfy (apr_pool_t *p, const char *url)
 
apr_status_t ap_proxy_buckets_lifetime_transform (request_rec *r, apr_bucket_brigade *from, apr_bucket_brigade *to)
 
apr_status_t ap_proxy_transfer_between_connections (request_rec *r, conn_rec *c_i, conn_rec *c_o, apr_bucket_brigade *bb_i, apr_bucket_brigade *bb_o, const char *name, int *sent, apr_off_t bsize, int flags)
 

Variables

PROXY_DECLARE_DATA proxy_hcmethods_t proxy_hcmethods []
 
PROXY_DECLARE_DATA proxy_wstat_t proxy_wstat_tbl []
 
proxy_workerworker
 
proxy_worker proxy_server_confconf
 
proxy_worker proxy_server_conf char * url
 
proxy_worker proxy_server_conf char const char * proxyhost
 
proxy_worker proxy_server_conf char const char apr_port_t proxyport
 
 PROXY
 
 int
 
 detach_backend
 
request_recr
 
const char * src
 
const char apr_size_t dlen
 
apr_table_theaders
 
module PROXY_DECLARE_DATA proxy_module
 

Detailed Description

Macro Definition Documentation

◆ ALIGNED_PROXY_BALANCER_SHARED_SIZE

#define ALIGNED_PROXY_BALANCER_SHARED_SIZE   (APR_ALIGN_DEFAULT(sizeof(proxy_balancer_shared)))

◆ ALIGNED_PROXY_WORKER_SHARED_SIZE

#define ALIGNED_PROXY_WORKER_SHARED_SIZE   (APR_ALIGN_DEFAULT(sizeof(proxy_worker_shared)))

◆ AP_PROXY_TRANSFER_FLUSH_AFTER

#define AP_PROXY_TRANSFER_FLUSH_AFTER   (0x01)

◆ AP_PROXY_TRANSFER_FLUSH_EACH

#define AP_PROXY_TRANSFER_FLUSH_EACH   (0x00)

◆ AP_PROXY_TRANSFER_YIELD_MAX_READS

#define AP_PROXY_TRANSFER_YIELD_MAX_READS   (0x04)

◆ AP_PROXY_TRANSFER_YIELD_PENDING

#define AP_PROXY_TRANSFER_YIELD_PENDING   (0x02)

◆ AP_PROXY_WORKER_IS_MALLOCED

#define AP_PROXY_WORKER_IS_MALLOCED   (1u << 2)

◆ AP_PROXY_WORKER_IS_MATCH

#define AP_PROXY_WORKER_IS_MATCH   (1u << 1)

◆ AP_PROXY_WORKER_IS_PREFIX

#define AP_PROXY_WORKER_IS_PREFIX   (1u << 0)

◆ AP_PROXY_WORKER_NO_UDS

#define AP_PROXY_WORKER_NO_UDS   (1u << 3)

◆ AP_VOLATILIZE_T

#define AP_VOLATILIZE_T (   T,
 
)    (*(T volatile *)&(x))

◆ APR_WANT_STRFUNC

#define APR_WANT_STRFUNC

◆ BALANCER_PREFIX

#define BALANCER_PREFIX   "balancer://"

◆ CRLF

#define CRLF   "\015\012"

◆ DEFAULT_MAX_FORWARDS

#define DEFAULT_MAX_FORWARDS   -1

◆ HCHECK_WATHCHDOG_DEFAULT_INTERVAL

#define HCHECK_WATHCHDOG_DEFAULT_INTERVAL   (30)

◆ PROXY_BALANCER_MAX_HOSTNAME_SIZE

#define PROXY_BALANCER_MAX_HOSTNAME_SIZE   64

◆ PROXY_BALANCER_MAX_NAME_SIZE

#define PROXY_BALANCER_MAX_NAME_SIZE   64

◆ PROXY_BALANCER_MAX_ROUTE_SIZE

#define PROXY_BALANCER_MAX_ROUTE_SIZE   64

◆ PROXY_BALANCER_MAX_STICKY_SIZE

#define PROXY_BALANCER_MAX_STICKY_SIZE   64

◆ PROXY_CANONENC_FORCEDEC

#define PROXY_CANONENC_FORCEDEC   0x01

◆ PROXY_CANONENC_NOENCODEDSLASHENCODING

#define PROXY_CANONENC_NOENCODEDSLASHENCODING   0x02

◆ PROXY_CHECK_CONN_EMPTY

#define PROXY_CHECK_CONN_EMPTY   (1 << 0)

◆ PROXY_COPY_CONF_PARAMS

#define PROXY_COPY_CONF_PARAMS (   w,
 
)
Value:
do { \
(w)->s->timeout = (c)->timeout; \
(w)->s->timeout_set = (c)->timeout_set; \
(w)->s->recv_buffer_size = (c)->recv_buffer_size; \
(w)->s->recv_buffer_size_set = (c)->recv_buffer_size_set; \
(w)->s->io_buffer_size = (c)->io_buffer_size; \
(w)->s->io_buffer_size_set = (c)->io_buffer_size_set; \
} while (0)
const char * s
Definition: mod_dav.h:1327

◆ PROXY_DECLARE

#define PROXY_DECLARE (   type)    type

◆ PROXY_DECLARE_DATA

#define PROXY_DECLARE_DATA

◆ PROXY_DECLARE_NONSTD

#define PROXY_DECLARE_NONSTD (   type)    type

◆ PROXY_DECLARE_OPTIONAL_HOOK

#define PROXY_DECLARE_OPTIONAL_HOOK   APR_DECLARE_EXTERNAL_HOOK

◆ PROXY_DETERMINE_ADDRESS_CHECK

#define PROXY_DETERMINE_ADDRESS_CHECK   (1u << 0)

◆ PROXY_DO_100_CONTINUE

#define PROXY_DO_100_CONTINUE (   w,
  r 
)
Value:
&& !apr_table_get((r)->subprocess_env, "force-proxy-request-1.0"))
#define PROXY_SHOULD_PING_100_CONTINUE(w, r)
Definition: mod_proxy.h:412
request_rec * r
Definition: mod_proxy.h:675
const char * apr_table_get(const apr_table_t *t, const char *key)

◆ PROXY_DYNAMIC_BALANCER_LIMIT

#define PROXY_DYNAMIC_BALANCER_LIMIT   16

◆ PROXY_FLUSH_WAIT

#define PROXY_FLUSH_WAIT   10000

◆ PROXY_GLOBAL_LOCK

#define PROXY_GLOBAL_LOCK (   x)    ( (x) && (x)->gmutex ? apr_global_mutex_lock((x)->gmutex) : APR_SUCCESS)

◆ PROXY_GLOBAL_UNLOCK

#define PROXY_GLOBAL_UNLOCK (   x)    ( (x) && (x)->gmutex ? apr_global_mutex_unlock((x)->gmutex) : APR_SUCCESS)

◆ PROXY_LBMETHOD

#define PROXY_LBMETHOD   "proxylbmethod"

◆ PROXY_MAX_PROVIDER_NAME_SIZE

#define PROXY_MAX_PROVIDER_NAME_SIZE   16

◆ PROXY_RFC1035_HOSTNAME_SIZE

#define PROXY_RFC1035_HOSTNAME_SIZE   256

◆ PROXY_SHOULD_PING_100_CONTINUE

#define PROXY_SHOULD_PING_100_CONTINUE (   w,
  r 
)
Value:
((w)->s->ping_timeout_set \
&& (PROXYREQ_REVERSE == (r)->proxyreq) \
int ap_request_has_body(request_rec *r)
#define PROXYREQ_REVERSE
Definition: httpd.h:1173

◆ PROXY_STRNCPY

#define PROXY_STRNCPY (   dst,
  src 
)    ap_proxy_strncpy((dst), (src), (sizeof(dst)))

◆ PROXY_THREAD_LOCK

#define PROXY_THREAD_LOCK (   x)    ( (x) && (x)->tmutex ? apr_thread_mutex_lock((x)->tmutex) : APR_SUCCESS)

◆ PROXY_THREAD_UNLOCK

#define PROXY_THREAD_UNLOCK (   x)    ( (x) && (x)->tmutex ? apr_thread_mutex_unlock((x)->tmutex) : APR_SUCCESS)

◆ PROXY_WORKER_DEFAULT_RETRY

#define PROXY_WORKER_DEFAULT_RETRY   60

◆ PROXY_WORKER_DISABLED

#define PROXY_WORKER_DISABLED   0x0020

◆ PROXY_WORKER_DISABLED_FLAG

#define PROXY_WORKER_DISABLED_FLAG   'D'

◆ PROXY_WORKER_DRAIN

#define PROXY_WORKER_DRAIN   0x0004

◆ PROXY_WORKER_DRAIN_FLAG

#define PROXY_WORKER_DRAIN_FLAG   'N'

◆ PROXY_WORKER_FREE

#define PROXY_WORKER_FREE   0x0200

◆ PROXY_WORKER_FREE_FLAG

#define PROXY_WORKER_FREE_FLAG   'F'

◆ PROXY_WORKER_GENERIC

#define PROXY_WORKER_GENERIC   0x0008

◆ PROXY_WORKER_GENERIC_FLAG

#define PROXY_WORKER_GENERIC_FLAG   'G'

◆ PROXY_WORKER_HC_FAIL

#define PROXY_WORKER_HC_FAIL   0x0400

◆ PROXY_WORKER_HC_FAIL_FLAG

#define PROXY_WORKER_HC_FAIL_FLAG   'C'

◆ PROXY_WORKER_HOT_SPARE

#define PROXY_WORKER_HOT_SPARE   0x0800

◆ PROXY_WORKER_HOT_SPARE_FLAG

#define PROXY_WORKER_HOT_SPARE_FLAG   'R'

◆ PROXY_WORKER_HOT_STANDBY

#define PROXY_WORKER_HOT_STANDBY   0x0100

◆ PROXY_WORKER_HOT_STANDBY_FLAG

#define PROXY_WORKER_HOT_STANDBY_FLAG   'H'

◆ PROXY_WORKER_IGNORE_ERRORS

#define PROXY_WORKER_IGNORE_ERRORS   0x0002

◆ PROXY_WORKER_IGNORE_ERRORS_FLAG

#define PROXY_WORKER_IGNORE_ERRORS_FLAG   'I'

◆ PROXY_WORKER_IN_ERROR

#define PROXY_WORKER_IN_ERROR   0x0080

◆ PROXY_WORKER_IN_ERROR_FLAG

#define PROXY_WORKER_IN_ERROR_FLAG   'E'

◆ PROXY_WORKER_IN_SHUTDOWN

#define PROXY_WORKER_IN_SHUTDOWN   0x0010

◆ PROXY_WORKER_IN_SHUTDOWN_FLAG

#define PROXY_WORKER_IN_SHUTDOWN_FLAG   'U'

◆ PROXY_WORKER_INITIALIZED

#define PROXY_WORKER_INITIALIZED   0x0001

◆ PROXY_WORKER_INITIALIZED_FLAG

#define PROXY_WORKER_INITIALIZED_FLAG   'O'

◆ PROXY_WORKER_IS

#define PROXY_WORKER_IS (   f,
 
)    ( (f)->s->status & (b) )

◆ PROXY_WORKER_IS_DRAINING

#define PROXY_WORKER_IS_DRAINING (   f)    ( (f)->s->status & PROXY_WORKER_DRAIN )

◆ PROXY_WORKER_IS_ERROR

#define PROXY_WORKER_IS_ERROR (   f)    ( (f)->s->status & PROXY_WORKER_IN_ERROR )

◆ PROXY_WORKER_IS_GENERIC

#define PROXY_WORKER_IS_GENERIC (   f)    ( (f)->s->status & PROXY_WORKER_GENERIC )

◆ PROXY_WORKER_IS_HCFAILED

#define PROXY_WORKER_IS_HCFAILED (   f)    ( (f)->s->status & PROXY_WORKER_HC_FAIL )

◆ PROXY_WORKER_IS_INITIALIZED

#define PROXY_WORKER_IS_INITIALIZED (   f)    ( (f)->s->status & PROXY_WORKER_INITIALIZED )

◆ PROXY_WORKER_IS_SPARE

#define PROXY_WORKER_IS_SPARE (   f)    ( (f)->s->status & PROXY_WORKER_HOT_SPARE )

◆ PROXY_WORKER_IS_STANDBY

#define PROXY_WORKER_IS_STANDBY (   f)    ( (f)->s->status & PROXY_WORKER_HOT_STANDBY )

◆ PROXY_WORKER_IS_USABLE

#define PROXY_WORKER_IS_USABLE (   f)
Value:
( ( !( (f)->s->status & PROXY_WORKER_NOT_USABLE_BITMAP) ) && \
#define PROXY_WORKER_IS_INITIALIZED(f)
Definition: mod_proxy.h:357
#define PROXY_WORKER_NOT_USABLE_BITMAP
Definition: mod_proxy.h:352

◆ PROXY_WORKER_MAX_HOSTNAME_SIZE

#define PROXY_WORKER_MAX_HOSTNAME_SIZE   96

◆ PROXY_WORKER_MAX_NAME_SIZE

#define PROXY_WORKER_MAX_NAME_SIZE   384

◆ PROXY_WORKER_MAX_ROUTE_SIZE

#define PROXY_WORKER_MAX_ROUTE_SIZE   96

◆ PROXY_WORKER_MAX_SCHEME_SIZE

#define PROXY_WORKER_MAX_SCHEME_SIZE   16

◆ PROXY_WORKER_MAX_SECRET_SIZE

#define PROXY_WORKER_MAX_SECRET_SIZE   64

◆ PROXY_WORKER_NOT_USABLE_BITMAP

#define PROXY_WORKER_NOT_USABLE_BITMAP
Value:
PROXY_WORKER_DISABLED | PROXY_WORKER_STOPPED | PROXY_WORKER_IN_ERROR | \
PROXY_WORKER_HC_FAIL )
#define PROXY_WORKER_STOPPED
Definition: mod_proxy.h:331
#define PROXY_WORKER_IN_ERROR
Definition: mod_proxy.h:332
#define PROXY_WORKER_IN_SHUTDOWN
Definition: mod_proxy.h:329

◆ PROXY_WORKER_RFC1035_NAME_SIZE

#define PROXY_WORKER_RFC1035_NAME_SIZE   512

◆ PROXY_WORKER_STOPPED

#define PROXY_WORKER_STOPPED   0x0040

◆ PROXY_WORKER_STOPPED_FLAG

#define PROXY_WORKER_STOPPED_FLAG   'S'

◆ PROXY_WORKER_UDS_PATH_SIZE

#define PROXY_WORKER_UDS_PATH_SIZE   256

◆ PROXYPASS_INTERPOLATE

#define PROXYPASS_INTERPOLATE   0x02

◆ PROXYPASS_MAP_ENCODED

#define PROXYPASS_MAP_ENCODED   0x08

◆ PROXYPASS_MAP_SERVLET

#define PROXYPASS_MAP_SERVLET   0x18 /* + MAP_ENCODED */

◆ PROXYPASS_NOCANON

#define PROXYPASS_NOCANON   0x01

◆ PROXYPASS_NOQUERY

#define PROXYPASS_NOQUERY   0x04

Typedef Documentation

◆ ap_proxy_header_reverse_map_fn

typedef const char*(* ap_proxy_header_reverse_map_fn) (request_rec *, proxy_dir_conf *, const char *)

◆ proxy_balancer

◆ proxy_balancer_method

◆ proxy_conn_pool

◆ proxy_is_best_callback_fn_t

typedef int() proxy_is_best_callback_fn_t(proxy_worker *current, proxy_worker *prev_best, void *baton)

◆ proxy_tunnel_conn_t

typedef struct proxy_tunnel_conn proxy_tunnel_conn_t

◆ proxy_worker

typedef struct proxy_worker proxy_worker

Enumeration Type Documentation

◆ enctype

enum enctype
Enumerator
enc_path 
enc_search 
enc_user 
enc_fpath 
enc_parm 

◆ hcmethod_t

enum hcmethod_t
Enumerator
NONE 
TCP 
OPTIONS 
HEAD 
GET 
CPING 
PROVIDER 
OPTIONS11 
HEAD11 
GET11 
EOT 

◆ proxy_hash_t

Return a hash based on the passed string

Parameters
strstring to produce hash from
methodhashing method to use
Returns
hash as unsigned int
Enumerator
PROXY_HASHFUNC_DEFAULT 
PROXY_HASHFUNC_APR 
PROXY_HASHFUNC_FNV 

Function Documentation

◆ ajp_handle_cping_cpong()

apr_status_t ajp_handle_cping_cpong ( apr_socket_t sock,
request_rec r,
apr_interval_time_t  timeout 
)

Do a AJP CPING and wait for CPONG on the socket

◆ ap_proxy_acquire_connection()

int ap_proxy_acquire_connection ( const char *  proxy_function,
proxy_conn_rec **  conn,
proxy_worker worker,
server_rec s 
)

Acquire a connection from worker connection pool

Parameters
proxy_functioncalling proxy scheme (http, ajp, ...)
connacquired connection
workerworker used for obtaining connection
scurrent server record
Returns
OK or HTTP_XXX error
Note
If the connection limit has been reached, the function will block until a connection becomes available or the timeout has elapsed.

◆ ap_proxy_backend_broke()

void ap_proxy_backend_broke ( request_rec r,
apr_bucket_brigade brigade 
)

Fill a brigade that can be sent downstream to signal that the connection to the backend broke in the middle of the response. The brigade will contain an error bucket with status HTTP_BAD_GATEWAY and an EOS bucket.

Parameters
rcurrent request record of client request
brigadethe brigade to fill
Deprecated:
To be removed in v2.6 (see ap_proxy_fill_error_brigade).

◆ ap_proxy_balancer_get_best_worker()

proxy_worker* ap_proxy_balancer_get_best_worker ( proxy_balancer balancer,
request_rec r,
proxy_is_best_callback_fn_t is_best,
void *  baton 
)

Retrieve the best worker in a balancer for the current request

Parameters
balancerbalancer for which to find the best worker
rcurrent request record
is_besta callback function provide by the lbmethod that determines if the current worker is best
batonan lbmethod-specific context pointer (baton) passed to the is_best callback
Returns
the best worker to be used for the request

◆ ap_proxy_buckets_lifetime_transform()

apr_status_t ap_proxy_buckets_lifetime_transform ( request_rec r,
apr_bucket_brigade from,
apr_bucket_brigade to 
)

◆ ap_proxy_c2hex()

void ap_proxy_c2hex ( int  ch,
char *  x 
)

◆ ap_proxy_canon_netloc()

char* ap_proxy_canon_netloc ( apr_pool_t p,
char **const  urlp,
char **  userp,
char **  passwordp,
char **  hostp,
apr_port_t port 
)

◆ ap_proxy_canonenc()

char* ap_proxy_canonenc ( apr_pool_t p,
const char *  x,
int  len,
enum enctype  t,
int  forcedec,
int  proxyreq 
)

◆ ap_proxy_canonenc_ex()

char* ap_proxy_canonenc_ex ( apr_pool_t p,
const char *  x,
int  len,
enum enctype  t,
int  flags,
int  proxyreq 
)

◆ ap_proxy_check_connection()

apr_status_t ap_proxy_check_connection ( const char *  scheme,
proxy_conn_rec conn,
server_rec server,
unsigned  max_blank_lines,
int  flags 
)

Check a connection to the backend

Parameters
schemecalling proxy scheme (http, ajp, ...)
connacquired connection
servercurrent server record
max_blank_lineshow many blank lines to consume, or zero for none (considered data)
flagsPROXY_CHECK_* bitmask
Returns
APR_SUCCESS: connection established, APR_ENOTEMPTY: connection established with data, APR_ENOSOCKET: not connected, APR_EINVAL: worker in error state (unusable), other: connection closed/aborted (remotely)

◆ ap_proxy_checkproxyblock()

int ap_proxy_checkproxyblock ( request_rec r,
proxy_server_conf conf,
const char *  hostname,
apr_sockaddr_t addr 
)

Test whether the hostname/address of the request are blocked by the ProxyBlock configuration.

Parameters
rrequest
confserver configuration
hostnamehostname from request URI
addrresolved address of hostname, or NULL if not known
Returns
OK on success, or else an error

◆ ap_proxy_conn_is_https()

int ap_proxy_conn_is_https ( conn_rec c)

◆ ap_proxy_connect_backend()

int ap_proxy_connect_backend ( const char *  proxy_function,
proxy_conn_rec conn,
proxy_worker worker,
server_rec s 
)

Make a connection to the backend

Parameters
proxy_functioncalling proxy scheme (http, ajp, ...)
connacquired connection
workerconnection worker
scurrent server record
Returns
OK or HTTP_XXX error
Note
In case the socket already exists for conn, just check the link status.

◆ ap_proxy_connect_to_backend()

int ap_proxy_connect_to_backend ( apr_socket_t **  ,
const char *  ,
apr_sockaddr_t ,
const char *  ,
proxy_server_conf ,
request_rec  
)

◆ ap_proxy_connect_uds()

apr_status_t ap_proxy_connect_uds ( apr_socket_t sock,
const char *  uds_path,
apr_pool_t p 
)

Make a connection to a Unix Domain Socket (UDS) path

Parameters
sockUDS to connect
uds_pathUDS path to connect to
ppool to make the sock addr
Returns
APR_SUCCESS or error status

◆ ap_proxy_connection_create()

int ap_proxy_connection_create ( const char *  proxy_function,
proxy_conn_rec conn,
conn_rec c,
server_rec s 
)

Make a connection record for backend connection

Parameters
proxy_functioncalling proxy scheme (http, ajp, ...)
connacquired connection
cclient connection record (unused, deprecated)
scurrent server record
Returns
OK or HTTP_XXX error
Note
The function will return immediately if conn->connection is already set,

◆ ap_proxy_connection_create_ex()

int ap_proxy_connection_create_ex ( const char *  proxy_function,
proxy_conn_rec conn,
request_rec r 
)

Make a connection record for backend connection, using request dir config

Parameters
proxy_functioncalling proxy scheme (http, ajp, ...)
connacquired connection
rcurrent request record
Returns
OK or HTTP_XXX error
Note
The function will return immediately if conn->connection is already set,

◆ ap_proxy_connection_reusable()

int ap_proxy_connection_reusable ( proxy_conn_rec conn)

Determine if proxy connection can potentially be reused at the end of this request.

Parameters
connproxy connection
Returns
non-zero if reusable, 0 otherwise
Note
Even if this function returns non-zero, the connection may be subsequently marked for closure.

◆ ap_proxy_cookie_reverse_map()

const char* ap_proxy_cookie_reverse_map ( request_rec r,
proxy_dir_conf conf,
const char *  str 
)

◆ ap_proxy_create_hdrbrgd()

int ap_proxy_create_hdrbrgd ( apr_pool_t p,
apr_bucket_brigade header_brigade,
request_rec r,
proxy_conn_rec p_conn,
proxy_worker worker,
proxy_server_conf conf,
apr_uri_t uri,
char *  url,
char *  server_portstr,
char **  old_cl_val,
char **  old_te_val 
)

Create a HTTP request header brigade, old_cl_val and old_te_val as required.

Parameters
ppool
header_brigadeheader brigade to use/fill
rrequest
p_connproxy connection rec
workerselected worker
confper-server proxy config
uriuri
urlurl
server_portstrport as string
old_cl_valstored old content-len val
old_te_valstored old TE val
Returns
OK or HTTP_EXPECTATION_FAILED

◆ ap_proxy_de_socketfy()

const char* ap_proxy_de_socketfy ( apr_pool_t p,
const char *  url 
)

Strip a unix domain socket (UDS) prefix from the input URL

Parameters
ppool to allocate result from
urla URL potentially prefixed with a UDS path
Returns
URL with the UDS prefix removed

◆ ap_proxy_define_balancer()

char* ap_proxy_define_balancer ( apr_pool_t p,
proxy_balancer **  balancer,
proxy_server_conf conf,
const char *  url,
const char *  alias,
int  do_malloc 
)

Define and Allocate space for the balancer to proxy configuration

Parameters
pmemory pool to allocate balancer from
balancerthe new balancer
confcurrent proxy server configuration
urlurl containing balancer name
aliasalias/fake-path to this balancer
do_malloctrue if shared struct should be malloced
Returns
error message or NULL if successful

◆ ap_proxy_define_match_worker()

char* ap_proxy_define_match_worker ( apr_pool_t p,
proxy_worker **  worker,
proxy_balancer balancer,
proxy_server_conf conf,
const char *  url,
int  do_malloc 
)

Define and Allocate space for the ap_strcmp_match()able worker to proxy configuration.

Parameters
pmemory pool to allocate worker from
workerthe new worker
balancerthe balancer that the worker belongs to
confcurrent proxy server configuration
urlurl containing worker name (produces match pattern)
do_malloctrue if shared struct should be malloced
Returns
error message or NULL if successful (*worker is new worker)
Deprecated:
Replaced by ap_proxy_define_worker_ex()

◆ ap_proxy_define_worker()

char* ap_proxy_define_worker ( apr_pool_t p,
proxy_worker **  worker,
proxy_balancer balancer,
proxy_server_conf conf,
const char *  url,
int  do_malloc 
)

Define and Allocate space for the worker to proxy configuration

Parameters
pmemory pool to allocate worker from
workerthe new worker
balancerthe balancer that the worker belongs to
confcurrent proxy server configuration
urlurl containing worker name
do_malloctrue if shared struct should be malloced
Returns
error message or NULL if successful (*worker is new worker)

◆ ap_proxy_define_worker_ex()

char* ap_proxy_define_worker_ex ( apr_pool_t p,
proxy_worker **  worker,
proxy_balancer balancer,
proxy_server_conf conf,
const char *  url,
unsigned int  mask 
)

Define and Allocate space for the worker to proxy configuration, of either PREFIXED or MATCHED type according to given mask

Parameters
pmemory pool to allocate worker from
workerthe new worker
balancerthe balancer that the worker belongs to
confcurrent proxy server configuration
urlurl containing worker name
maskbitmask of AP_PROXY_WORKER_IS_*
Returns
error message or NULL if successful (*worker is new worker)

◆ ap_proxy_determine_address()

apr_status_t ap_proxy_determine_address ( const char *  proxy_function,
proxy_conn_rec conn,
const char *  hostname,
apr_port_t  hostport,
unsigned int  flags,
request_rec r,
server_rec s 
)

Resolve an address, reusing the one of the worker if any.

Parameters
proxy_functioncalling proxy scheme (http, ajp, ...)
connproxy connection the address is used for
hostnamehost to resolve (should be the worker's if reusable)
hostportport to resolve (should be the worker's if reusable)
flagsbitmask of PROXY_DETERMINE_ADDRESS_*
rcurrent request (if any)
scurrent server (or NULL if r != NULL and ap_proxyerror() should be called on error)
Returns
APR_SUCCESS or an error, APR_EEXIST if the address is still the same and PROXY_DETERMINE_ADDRESS_CHECK is asked

◆ ap_proxy_determine_connection()

int ap_proxy_determine_connection ( apr_pool_t p,
request_rec r,
proxy_server_conf conf,
proxy_worker worker,
proxy_conn_rec conn,
apr_uri_t uri,
char **  url,
const char *  proxyname,
apr_port_t  proxyport,
char *  server_portstr,
int  server_portstr_size 
)

Determine backend hostname and port

Parameters
pmemory pool used for processing
rcurrent request
confcurrent proxy server configuration
workerworker used for processing request
connproxy connection struct
uriprocessed uri
urlrequest url
proxynameare we connecting directly or via a proxy
proxyportproxy host port
server_portstrVia headers server port, must be non-NULL
server_portstr_sizesize of the server_portstr buffer; must be at least one, even if the protocol doesn't use this
Returns
OK or HTTP_XXX error

◆ ap_proxy_fill_error_brigade()

void ap_proxy_fill_error_brigade ( request_rec r,
int  status,
apr_bucket_brigade bb,
int  eoc 
)

Fill a brigade that can be sent downstream to signal that the connection to the backend broke in the middle of the response. The brigade will contain an error bucket with the given status and eventually an EOC bucket if asked to or heuristically if the response header was sent already.

Parameters
rcurrent request record of client request
statusthe error status
bbthe brigade to fill
eoc0 do not add an EOC bucket, > 0 always add one, < 0 add one only if the response header was sent already

◆ ap_proxy_find_balancershm()

proxy_balancer_shared* ap_proxy_find_balancershm ( ap_slotmem_provider_t storage,
ap_slotmem_instance_t slot,
proxy_balancer balancer,
unsigned int index 
)

Find the shm of the balancer as needed

Parameters
storageslotmem provider
slotslotmem instance
balancerbalancer of shm to find
indexpointer to index within slotmem of balancer
Returns
pointer to shm of balancer, or NULL

◆ ap_proxy_find_workershm()

proxy_worker_shared* ap_proxy_find_workershm ( ap_slotmem_provider_t storage,
ap_slotmem_instance_t slot,
proxy_worker worker,
unsigned int index 
)

Find the shm of the worker as needed

Parameters
storageslotmem provider
slotslotmem instance
workerworker to find
indexpointer to index within slotmem of worker
Returns
pointer to shm of worker, or NULL

◆ ap_proxy_get_balancer()

proxy_balancer* ap_proxy_get_balancer ( apr_pool_t p,
proxy_server_conf conf,
const char *  url,
int  careactive 
)

Get the balancer from proxy configuration

Parameters
pmemory pool used for temporary storage while finding balancer
confcurrent proxy server configuration
urlurl to find the worker from; must have balancer:// prefix
careactivetrue if we care if the balancer is active or not
Returns
proxy_balancer or NULL if not found

◆ ap_proxy_get_worker()

proxy_worker* ap_proxy_get_worker ( apr_pool_t p,
proxy_balancer balancer,
proxy_server_conf conf,
const char *  url 
)

Get the worker from proxy configuration, both types

Parameters
pmemory pool used for finding worker
balancerthe balancer that the worker belongs to
confcurrent proxy server configuration
urlurl to find the worker from
Returns
proxy_worker or NULL if not found

◆ ap_proxy_get_worker_ex()

proxy_worker* ap_proxy_get_worker_ex ( apr_pool_t p,
proxy_balancer balancer,
proxy_server_conf conf,
const char *  url,
unsigned int  mask 
)

Get the worker from proxy configuration, looking for either PREFIXED or MATCHED or both types of workers according to given mask

Parameters
pmemory pool used for finding worker
balancerthe balancer that the worker belongs to
confcurrent proxy server configuration
urlurl to find the worker from
maskbitmask of AP_PROXY_WORKER_IS_*
Returns
proxy_worker or NULL if not found

◆ ap_proxy_hashfunc()

unsigned int ap_proxy_hashfunc ( const char *  str,
proxy_hash_t  method 
)

◆ ap_proxy_hex2c()

int ap_proxy_hex2c ( const char *  x)

◆ ap_proxy_initialize_balancer()

apr_status_t ap_proxy_initialize_balancer ( proxy_balancer balancer,
server_rec s,
apr_pool_t p 
)

Initialize the balancer as needed

Parameters
balancerbalancer to initialize
scurrent server record
pmemory pool used for mutex and connection pool
Returns
APR_SUCCESS or error code

◆ ap_proxy_initialize_worker()

apr_status_t ap_proxy_initialize_worker ( proxy_worker worker,
server_rec s,
apr_pool_t p 
)

Initialize the worker by setting up worker connection pool and mutex

Parameters
workerworker to initialize
scurrent server record
pmemory pool used for mutex and connection pool
Returns
APR_SUCCESS or error code

◆ ap_proxy_is_socket_connected()

int ap_proxy_is_socket_connected ( apr_socket_t socket)
Parameters
socketsocket to test
Returns
TRUE if socket is connected/active

◆ ap_proxy_lb_workers()

int ap_proxy_lb_workers ( void  )

Calculate maximum number of workers in scoreboard.

Returns
number of workers to allocate in the scoreboard

◆ ap_proxy_location_reverse_map()

const char* ap_proxy_location_reverse_map ( request_rec r,
proxy_dir_conf conf,
const char *  url 
)

◆ ap_proxy_parse_wstatus()

char* ap_proxy_parse_wstatus ( apr_pool_t p,
proxy_worker w 
)

Create readable representation of worker status bitfield

Parameters
ppool
wworker to use
Returns
string representation of status

◆ ap_proxy_pass_brigade()

int ap_proxy_pass_brigade ( apr_bucket_alloc_t bucket_alloc,
request_rec r,
proxy_conn_rec p_conn,
conn_rec origin,
apr_bucket_brigade bb,
int  flush 
)
Parameters
bucket_allocbucket allocator
rrequest
p_connproxy connection
originconnection rec of origin
bbbrigade to send to origin
flushflush
Returns
status (OK)

◆ ap_proxy_port_of_scheme()

apr_port_t ap_proxy_port_of_scheme ( const char *  scheme)

Return the port number of a known scheme (eg: http -> 80).

Parameters
schemescheme to test
Returns
port number or 0 if unknown

◆ ap_proxy_post_request()

int ap_proxy_post_request ( proxy_worker worker,
proxy_balancer balancer,
request_rec r,
proxy_server_conf conf 
)

Post request worker and balancer cleanup

Parameters
workerworker used for processing request
balancerbalancer used for processing request
rcurrent request
confcurrent proxy server configuration
Returns
OK or HTTP_XXX error
Note
Whenever the pre_request is called, the post_request has to be called too.

◆ ap_proxy_pre_http_request()

int ap_proxy_pre_http_request ( conn_rec c,
request_rec r 
)

◆ ap_proxy_pre_request()

int ap_proxy_pre_request ( proxy_worker **  worker,
proxy_balancer **  balancer,
request_rec r,
proxy_server_conf conf,
char **  url 
)

Get the most suitable worker and/or balancer for the request

Parameters
workerworker used for processing request
balancerbalancer used for processing request
rcurrent request
confcurrent proxy server configuration
urlrequest url that balancer can rewrite.
Returns
OK or HTTP_XXX error
Note
It calls balancer pre_request hook if the url starts with balancer:// The balancer then rewrites the url to particular worker, like http://host:port

◆ ap_proxy_prefetch_input()

int ap_proxy_prefetch_input ( request_rec r,
proxy_conn_rec backend,
apr_bucket_brigade input_brigade,
apr_read_type_e  block,
apr_off_t bytes_read,
apr_off_t  max_read 
)

Prefetch the client request body (in memory), up to a limit. Read what's in the client pipe. If nonblocking is set and read is EAGAIN, pass a FLUSH bucket to the backend and read again in blocking mode.

Parameters
rclient request
backendbackend connection
input_brigadeinput brigade to use/fill
blockblocking or non-blocking mode
bytes_readnumber of bytes read
max_readmaximum number of bytes to read
Returns
OK or HTTP_* error code
Note
max_read is rounded up to APR_BUCKET_BUFF_SIZE

◆ ap_proxy_read_input()

int ap_proxy_read_input ( request_rec r,
proxy_conn_rec backend,
apr_bucket_brigade input_brigade,
apr_off_t  max_read 
)

Read what's in the client pipe. If the read would block (EAGAIN), pass a FLUSH bucket to the backend and read again in blocking mode.

Parameters
rclient request
backendbackend connection
input_brigadebrigade to use/fill
max_readmaximum number of bytes to read
Returns
OK or HTTP_* error code

◆ ap_proxy_release_connection()

int ap_proxy_release_connection ( const char *  proxy_function,
proxy_conn_rec conn,
server_rec s 
)

Release a connection back to worker connection pool

Parameters
proxy_functioncalling proxy scheme (http, ajp, ...)
connacquired connection
scurrent server record
Returns
OK or HTTP_XXX error
Note
The connection will be closed if conn->close_on_release is set

◆ ap_proxy_retry_worker()

int ap_proxy_retry_worker ( const char *  proxy_function,
proxy_worker worker,
server_rec s 
)

Mark a worker for retry

Parameters
proxy_functioncalling proxy scheme (http, ajp, ...)
workerworker used for retrying
scurrent server record
Returns
OK if marked for retry, DECLINED otherwise
Note
The error status of the worker will cleared if the retry interval has elapsed since the last error.

◆ ap_proxy_set_wstatus()

apr_status_t ap_proxy_set_wstatus ( char  c,
int  set,
proxy_worker w 
)

Set/unset the worker status bitfield depending on flag

Parameters
cflag
setset or unset bit
wworker to use
Returns
APR_SUCCESS if valid flag

◆ ap_proxy_share_balancer()

apr_status_t ap_proxy_share_balancer ( proxy_balancer balancer,
proxy_balancer_shared shm,
int  i 
)

Share a defined proxy balancer via shm

Parameters
balancerbalancer to be shared
shmlocation of shared info
iindex into shm
Returns
APR_SUCCESS or error code

◆ ap_proxy_share_worker()

apr_status_t ap_proxy_share_worker ( proxy_worker worker,
proxy_worker_shared shm,
int  i 
)

Share a defined proxy worker via shm

Parameters
workerworker to be shared
shmlocation of shared info
iindex into shm
Returns
APR_SUCCESS or error code

◆ ap_proxy_should_override()

int ap_proxy_should_override ( proxy_dir_conf conf,
int  code 
)

Returns 1 if a response with the given status should be overridden.

Parameters
confproxy directory configuration
codehttp status code
Returns
1 if code is considered an error-code, 0 otherwise

◆ ap_proxy_show_hcmethod()

const char* ap_proxy_show_hcmethod ( hcmethod_t  method)

Return the name of the health check method (eg: "OPTIONS").

Parameters
methodmethod enum
Returns
name of method

◆ ap_proxy_spool_input()

int ap_proxy_spool_input ( request_rec r,
proxy_conn_rec backend,
apr_bucket_brigade input_brigade,
apr_off_t bytes_spooled,
apr_off_t  max_mem_spool 
)

Spool the client request body to memory, or disk above given limit.

Parameters
rclient request
backendbackend connection
input_brigadeinput brigade to use/fill
bytes_spoolednumber of bytes spooled
max_mem_spoolmaximum number of in-memory bytes
Returns
OK or HTTP_* error code

◆ ap_proxy_ssl_connection_cleanup()

apr_status_t ap_proxy_ssl_connection_cleanup ( proxy_conn_rec conn,
request_rec r 
)

◆ ap_proxy_ssl_disable()

int ap_proxy_ssl_disable ( conn_rec c)

◆ ap_proxy_ssl_enable()

int ap_proxy_ssl_enable ( conn_rec c)

◆ ap_proxy_ssl_engine()

int ap_proxy_ssl_engine ( conn_rec c,
ap_conf_vector_t per_dir_config,
int  enable 
)

◆ ap_proxy_ssl_val()

const char* ap_proxy_ssl_val ( apr_pool_t p,
server_rec s,
conn_rec c,
request_rec r,
const char *  var 
)

◆ ap_proxy_sync_balancer()

apr_status_t ap_proxy_sync_balancer ( proxy_balancer b,
server_rec s,
proxy_server_conf conf 
)

Sync balancer and workers based on any updates w/i shm

Parameters
bbalancer to check/update member list of
sserver rec
confconfig
Returns
APR_SUCCESS if all goes well

◆ ap_proxy_trans_match()

int ap_proxy_trans_match ( request_rec r,
struct proxy_alias ent,
proxy_dir_conf dconf 
)

Find the matched alias for this request and setup for proxy handler

Parameters
rrequest
entproxy_alias record
dconfper-dir config or NULL
Returns
OK if the alias matched, DONE if the alias matched and r->uri was normalized so no further transformation should happen on it, DECLINED if proxying is disabled for this alias, HTTP_CONTINUE if the alias did not match

◆ ap_proxy_transfer_between_connections()

apr_status_t ap_proxy_transfer_between_connections ( request_rec r,
conn_rec c_i,
conn_rec c_o,
apr_bucket_brigade bb_i,
apr_bucket_brigade bb_o,
const char *  name,
int sent,
apr_off_t  bsize,
int  flags 
)

◆ ap_proxy_tunnel_conn_bytes_in()

apr_off_t ap_proxy_tunnel_conn_bytes_in ( const proxy_tunnel_conn_t tc)

◆ ap_proxy_tunnel_conn_bytes_out()

apr_off_t ap_proxy_tunnel_conn_bytes_out ( const proxy_tunnel_conn_t tc)

◆ ap_proxy_tunnel_create()

apr_status_t ap_proxy_tunnel_create ( proxy_tunnel_rec **  tunnel,
request_rec r,
conn_rec c_o,
const char *  scheme 
)

Create a tunnel, to be activated by ap_proxy_tunnel_run().

Parameters
tunneltunnel created
rclient request
c_oconnection to origin
schemecaller proxy scheme (connect, ws(s), http(s), ...)
Returns
APR_SUCCESS or error status

◆ ap_proxy_tunnel_run()

int ap_proxy_tunnel_run ( proxy_tunnel_rec tunnel)

Forward anything from either side of the tunnel to the other, until one end aborts or a polling timeout/error occurs.

Parameters
tunneltunnel to run
Returns
OK if completion is full, HTTP_GATEWAY_TIME_OUT on timeout or another HTTP_ error otherwise.

◆ ap_proxy_update_balancer()

char* ap_proxy_update_balancer ( apr_pool_t p,
proxy_balancer balancer,
const char *  url 
)

Update the balancer's vhost related fields

Parameters
pmemory pool used for temporary storage while finding balancer
balancerbalancer to be updated
urlurl to find vhost info
Returns
error string or NULL if OK

◆ ap_proxy_valid_balancer_name()

int ap_proxy_valid_balancer_name ( char *  name,
int  i 
)

Verifies valid balancer name (eg: balancer://foo)

Parameters
namename to test
inumber of chars to test; 0 for all.
Returns
true/false

◆ ap_proxy_worker_can_upgrade()

int ap_proxy_worker_can_upgrade ( apr_pool_t p,
const proxy_worker worker,
const char *  upgrade,
const char *  dflt 
)

Return whether a worker upgrade configuration matches Upgrade header

Parameters
pmemory pool used for displaying worker name
workerthe worker
upgradethe Upgrade header to match
dfltdefault protocol (NULL for none)
Returns
1 (true) or 0 (false)

◆ ap_proxy_worker_get_name()

const char* ap_proxy_worker_get_name ( const proxy_worker worker)

Return the user-land, UDS aware worker name

Parameters
workerthe worker
Returns
the name

◆ ap_proxy_worker_name()

char* ap_proxy_worker_name ( apr_pool_t unused,
proxy_worker worker 
)

Return the user-land, UDS aware worker name

Parameters
unusedmemory pool unused
workerthe worker
Returns
the name
Note
Even though the returned name is non constant char*, the string it points to is shared and should not be modified by the caller!
Deprecated:
Replaced by ap_proxy_worker_get_name()

◆ ap_proxyerror()

int ap_proxyerror ( request_rec r,
int  statuscode,
const char *  message 
)

◆ balancer_manage()

apr_status_t balancer_manage ( request_rec ,
apr_table_t params 
)

Configure and create workers (and balancer) in mod_balancer.

Parameters
rrequest
paramstable with the parameters like b=mycluster etc.
Returns
404 when the worker/balancer doesn't exist, 400 if something is invalid 200 for success.

◆ hc_select_exprs()

void hc_select_exprs ( request_rec ,
const char *   
)

◆ hc_show_exprs()

void hc_show_exprs ( request_rec )

◆ hc_valid_expr()

int hc_valid_expr ( request_rec ,
const char *   
)

◆ proxy_balancer_get_best_worker()

proxy_worker* proxy_balancer_get_best_worker ( proxy_balancer balancer,
request_rec r,
proxy_is_best_callback_fn_t is_best,
void *  baton 
)

◆ PROXY_DECLARE_OPTIONAL_HOOK() [1/4]

PROXY_DECLARE_OPTIONAL_HOOK ( proxy  ,
PROXY  ,
int  ,
create_req  ,
(request_rec *r, request_rec *pr)   
)

Let modules perform processing when the connection to the origin is being detached from the request.

Parameters
rThe client request
backendThe proxy representation of the backend connection

◆ PROXY_DECLARE_OPTIONAL_HOOK() [2/4]

PROXY_DECLARE_OPTIONAL_HOOK ( proxy  ,
PROXY  ,
int  ,
request_status  ,
(int *status, request_rec *r  
)

request status hook It is called after all proxy processing has been done. This gives other modules a chance to create default content on failure, for example

◆ PROXY_DECLARE_OPTIONAL_HOOK() [3/4]

PROXY_DECLARE_OPTIONAL_HOOK ( proxy  ,
PROXY  ,
int  ,
section_post_config  ,
(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *s, ap_conf_vector_t *section_config)   
)

◆ PROXY_DECLARE_OPTIONAL_HOOK() [4/4]

PROXY_DECLARE_OPTIONAL_HOOK ( proxy  ,
PROXY  ,
int  ,
tunnel_forward  ,
(proxy_tunnel_rec *tunnel, conn_rec *c_i, conn_rec *c_o, apr_bucket_brigade *bb  
)

Tunnel forwarding hook Called for every brigade forwarded by a tunnel from/to the client to/from the origin. Each hook receives incoming buckets in bb and produces outgoing buckets in the same bb, much like an output filter.

Parameters
tunnelthe tunnel
cthe connection the data are going to
bbthe incoming data
Returns
OK/DECLINED to pass to the next hooks, DONE to not pass to the next hooks, an HTTP_ error on failure.
Note
A hook must not return DONE unless it consumes/sets-aside all the incoming buckets, and it must produce (non-meta-)data buckets only. Clear the headers referenced by the Connection header from the given table, and remove the Connection header.
Parameters
rrequest
headerstable of headers to clear
Returns
1 if "close" was present, 0 otherwise.

◆ proxy_hook_canon_handler()

int proxy_hook_canon_handler ( request_rec r,
char *  url 
)

◆ proxy_hook_check_trans()

int proxy_hook_check_trans ( request_rec r,
const char *  url 
)

◆ proxy_hook_post_request()

int proxy_hook_post_request ( proxy_worker worker,
proxy_balancer balancer,
request_rec r,
proxy_server_conf conf 
)

post request hook. It is called after request for updating runtime balancer status.

◆ proxy_hook_pre_request()

request_rec proxy_conn_rec* backend int proxy_hook_pre_request ( proxy_worker **  worker,
proxy_balancer **  balancer,
request_rec r,
proxy_server_conf conf,
char **  url 
)

pre request hook. It will return the most suitable worker at the moment and corresponding balancer. The url is rewritten from balancer://cluster/uri to scheme://host:port/uri and then the scheme_handler is called.

◆ set_worker_hc_param()

const char* set_worker_hc_param ( apr_pool_t ,
server_rec ,
proxy_worker ,
const char *  ,
const char *  ,
void *   
)

Variable Documentation

◆ conf

◆ detach_backend

detach_backend

◆ dlen

const char apr_size_t dlen

◆ headers

apr_table_t* headers

◆ int

int

◆ PROXY

PROXY

◆ proxy_hcmethods

PROXY_DECLARE_DATA proxy_hcmethods_t proxy_hcmethods[]
extern

◆ proxy_module

module PROXY_DECLARE_DATA proxy_module
extern

◆ proxy_wstat_tbl

PROXY_DECLARE_DATA proxy_wstat_t proxy_wstat_tbl[]
extern

◆ proxyhost

proxy_worker proxy_server_conf char const char* proxyhost

◆ proxyport

proxy_worker proxy_server_conf char const char apr_port_t proxyport

◆ r

◆ src

const char* src

◆ url

◆ worker

proxy_worker* worker