Apache2
mod_proxy.h File Reference

Proxy Extension Module for Apache. More...

#include "apr_hooks.h"
#include "apr_optional.h"
#include "apr.h"
#include "apr_lib.h"
#include "apr_strings.h"
#include "apr_buckets.h"
#include "apr_md5.h"
#include "apr_network_io.h"
#include "apr_pools.h"
#include "apr_uri.h"
#include "apr_date.h"
#include "apr_strmatch.h"
#include "apr_fnmatch.h"
#include "apr_reslist.h"
#include "apr_want.h"
#include "apr_uuid.h"
#include "util_mutex.h"
#include "apr_global_mutex.h"
#include "apr_thread_mutex.h"
#include "httpd.h"
#include "http_config.h"
#include "ap_config.h"
#include "http_core.h"
#include "http_protocol.h"
#include "http_request.h"
#include "http_vhost.h"
#include "http_main.h"
#include "http_log.h"
#include "http_connection.h"
#include "http_ssl.h"
#include "util_filter.h"
#include "util_ebcdic.h"
#include "ap_provider.h"
#include "ap_slotmem.h"
Include dependency graph for mod_proxy.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

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

Proxy Extension Module for Apache.