41#if (APR_MAJOR_VERSION < 2)
122#if !APR_CHARSET_EBCDIC
141 i +=
ch - (
'A' - 10);
144 i +=
ch - (
'a' - 10);
162 if (1 ==
sscanf(x,
"%2x", &
i)) {
175#if !APR_CHARSET_EBCDIC
179 i = (
ch & 0xF0) >> 4;
181 x[1] = (
'A' - 10) +
i;
189 x[2] = (
'A' - 10) +
i;
195 static const char ntoa[] = {
"0123456789ABCDEF" };
204 x[1] =
ntoa[(
buf[0] >> 4) & 0x0F];
240 allowed =
"~$-_.+!*'(),;:@&=";
243 allowed =
"$-_.!*'(),;:@&=";
246 allowed =
"$-_.+!*'(),;@&=";
249 allowed =
"$-_.+!*'(),?:@&=";
252 allowed =
"$-_.+!*'(),?/:@&=";
267 for (
i = 0, j = 0;
i <
len;
i++, j++) {
350 if (
url[0] !=
'/' ||
url[1] !=
'/') {
351 return "Malformed URL";
376 return "Bad %-escape in URL (password)";
382 return "Bad %-escape in URL (username)";
398 return "Invalid host/port";
420 "The proxy server could not handle the request<p>"
561 "Warning: NetMask not supplied with IP-Addr; guessing: %s/%ld",
568 if (*
addr ==
'\0' && (
This->addr.s_addr & ~
This->mask.s_addr) != 0) {
570 "Warning: NetMask and IP-Addr disagree in %s/%ld",
572 This->addr.s_addr &=
This->mask.s_addr;
582 return (*
addr ==
'\0');
601 for (
addr.s_addr = 0,
i = 0;
i < 4; ++
i) {
608 if (
This->addr.s_addr == (
addr.s_addr &
This->mask.s_addr)) {
637 "2)IP-NoMatch: hostname=%s msg=Host not found",
host);
681 if (
addr[0] !=
'.') {
691 if (
addr[
i] ==
':') {
693 "@@@@ handle optional port in proxy_is_domainname()");
698 if (
addr[
i] !=
'\0') {
703 for (
i = strlen(
addr) - 1;
i > 0 &&
addr[
i] ==
'.'; --
i) {
743 if (
host[0] ==
'.') {
756 for (
i = strlen(
host) - 1;
i > 0 &&
host[
i] ==
'.'; --
i) {
822#define MAX_IP_STR_LEN (46)
835 "checking remote machine [%s] against [%s]",
839 "connect to remote machine %s blocked: name %s "
861 "ProxyBlock comparing %s and %s",
caddr,
uaddr);
864 "connect to remote machine %s blocked: "
940 l2 = strlen((*worker)->s->name_ex);
943 if ((*worker)->s->name_ex[
l2 - 1] ==
'/')
968 if (
real[0] ==
'/') {
1145 if (
c ==
NULL ||
c[1] !=
'/' ||
c[2] !=
'/' ||
c[3] ==
'\0') {
1180 return apr_psprintf(
p,
"balancer %s front-end virtual-path (%s) too long",
1184 return apr_psprintf(
p,
"balancer %s front-end vhost name (%s) too long",
1190#define PROXY_UNSET_NONCE '\n'
1207 if (
c ==
NULL ||
c[1] !=
'/' ||
c[2] !=
'/' ||
c[3] ==
'\0')
1222 (*balancer)->lbmethod = lbmethod;
1226 (*balancer)->gmutex =
NULL;
1227 (*balancer)->tmutex =
NULL;
1243 (*balancer)->lbmethod_set = 1;
1254 return apr_psprintf(
p,
"balancer safe-name (%s) too long", sname);
1258 (*balancer)->hash =
bshared->hash;
1261 bshared->sticky_separator =
'.';
1265 (*balancer)->sconf = conf;
1279 char *action =
"copying";
1289 action =
"re-using";
1294 "%s shm[%d] (0x%pp) for %s", action,
i, (
void *)
shm,
1350 "Failed to reopen mutex %s in child",
1367 "can not create balancer thread mutex");
1391 "proxy: Entering %s for BALANCER (%s)",
1484 "proxy: %s selected worker \"%s\" : busy %" APR_SIZE_T_FMT " : lbstatus %d",
1554 "failed to create %s pool",
tag);
1606 return !(conn->
close
1645 "Pooled connection 0x%pp for worker %s has been"
1646 " already returned to the connection pool.", conn,
1662 else if (conn->
close
1710 "SSL cleanup brigade contained %"
1774 const char *upgrade,
1801 for (x = 0,
y = 0; expected[
y]; ++
y, ++x) {
1805 }
while (expected[
y] ==
'$' &&
apr_isdigit(expected[
y + 1]));
1818 else if (expected[
y] ==
'\\' && !expected[++
y]) {
1822 if (
str[x] != expected[
y])
1857 if (
c ==
NULL ||
c[1] !=
'/' ||
c[2] !=
'/' ||
c[3] ==
'\0') {
1999#define IS_REF(x) (x[0] == '$' && apr_isdigit(x[1]))
2003 while (*pos && *pos !=
':' && *pos !=
'/') {
2011 while (*pos && !
IS_REF(pos) && *pos !=
'/') {
2016 const char *
path = pos + 2;
2021 vec[0].iov_base = (
void *)ptr;
2022 vec[0].iov_len = pos - ptr;
2023 vec[1].iov_base = (
void *)
path;
2024 vec[1].iov_len = strlen(
path);
2041 if (!
uri.hostname) {
2044 uri.hostname =
"localhost";
2100 "Alert! worker name (%s) too long; truncated to: %s", ptr,
wshared->name_ex);
2104 "worker name (%s) too long; truncated for legacy modules that do not use "
2105 "proxy_worker_shared->name_ex: %s", ptr,
wshared->name);
2109 "Alert! worker scheme (%s) too long; truncated to: %s",
uri.scheme,
wshared->scheme);
2116 "worker hostname (%s) too long; truncated for legacy modules that do not use "
2117 "proxy_worker_shared->hostname_ex: %s",
uri.hostname,
wshared->hostname);
2120 wshared->flush_packets = flush_off;
2134 wshared->is_name_matchable = 1;
2170 (*worker)->hash =
wshared->hash;
2171 (*worker)->context =
NULL;
2172 (*worker)->cp =
NULL;
2173 (*worker)->balancer = balancer;
2212 char *action =
"copying";
2213 if (!
shm || !worker->
s)
2222 action =
"re-using";
2232 "%s shm[%d] (0x%pp) for worker: %s", action,
i, (
void *)
shm,
2250 "worker %s shared already initialized",
2255 "initializing worker %s shared",
2274 "enablereuse/disablereuse ignored for worker %s",
2298 if (worker->
s->
hmax == 0) {
2318 "worker %s local already initialized",
2326 "initializing worker %s local",
2330 if (worker->tmutex ==
NULL) {
2334 "can not create worker thread mutex");
2342 if (worker->
cp ==
NULL) {
2344 "can not create connection pool");
2349 if (worker->
s->
hmax) {
2354 worker, worker->
cp->
pool);
2357 "initialized pool in child %" APR_PID_T_FMT " for (%s:%d) min=%d max=%d smax=%d",
2374 "initialized single connection worker in child %" APR_PID_T_FMT " for (%s:%d)",
2376 (
int)worker->
s->
port);
2397 "%s: Won't retry worker (%s:%d): stopped",
2399 (
int)worker->
s->
port);
2407 "%s: worker for (%s:%d) has been marked for retry",
2409 (
int)worker->
s->
port);
2414 "%s: too soon to retry worker for (%s:%d)",
2416 (
int)worker->
s->
port);
2451 "Invalid proxy UDS filename (%s)",
r->
filename);
2458 "*: fixup UDS from %s: %s (%s)",
2470 else if (
end[1] ==
'/' &&
end[2] ==
'/' && !
end[3]) {
2537 for (
i = 0;
i <
hdr->nelts; ++
i) {
2605 "%s: found worker %s for %s",
2606 (*worker)->s->scheme, (*worker)->s->name_ex, *
url);
2612 "*: found forward proxy worker for %s", *
url);
2626 "*: using default reverse proxy worker for %s "
2627 "(no keepalive)", *
url);
2642 "all workers are busy. Unable to serve %s", *
url);
2683 "%s: error creating fam %d socket for target %s",
2698 "apr_socket_opt_set(SO_RCVBUF): Failed to set "
2699 "ProxyReceiveBufferSize, using default");
2705 "apr_socket_opt_set(APR_TCP_NODELAY): "
2718 "%s: fam %d socket created to connect to %s",
2732 "%s: failed to bind socket to local address",
2745 "%s: attempt to connect to %pI (%s) failed",
2752 return connected ? 0 : 1;
2768 "%s: disabled connection for (%s:%d)",
2770 (
int)worker->
s->
port);
2784 *conn = worker->
cp->
conn;
2792 "%s: failed to acquire connection for (%s:%d)",
2794 (
int)worker->
s->
port);
2798 "%s: has acquired connection for (%s:%d)",
2800 (
int)worker->
s->
port);
2802 (*conn)->worker = worker;
2804 (*conn)->inreslist = 0;
2814 "%s: has released connection for (%s:%d)",
2877 "DNS lookup failure for: ",
2883 "%s: resolving worker %s address",
2888 "%s: resolving worker %s address",
2906 "%s: %s resolved to %s",
2911 "%s: %s resolved to %s",
2963 conn->
port = hostport;
2966 hostport, 0, conn->
pool);
2975 "%s: resolving backend %s address",
2980 "%s: resolving backend %s address",
3079 if (prev ==
address->expiry) {
3084 }
while (prev <=
now);
3145#if defined(WIN32) || defined(OS2)
3149 if (
addr == remote_addr) {
3165 "%s: closing connection to %s (%pI<>%pI) on "
3167 local_addr, remote_addr);
3171 "%s: closing connection to %s (%pI<>%pI) on "
3173 local_addr, remote_addr);
3215 char *server_portstr,
3219 const char *uds_path;
3232 if (!
uri->hostname) {
3263 uri->query ?
uri->query :
"",
3264 uri->fragment ?
"#" :
"",
3277 uds_path = (*worker->s->uds_path
3278 ? worker->s->uds_path
3281 if (!conn->uds_path ||
strcmp(conn->uds_path, uds_path) != 0) {
3283 if (conn->uds_path) {
3285 if (!conn->uds_pool) {
3288 pool = conn->uds_pool;
3294#if APR_HAVE_SOCKADDR_UN
3296 if (conn->addr && conn->addr->hostname) {
3297 conn->uds_path = conn->addr->hostname;
3307 conn->port =
uri->port;
3310 "%s: has determined UDS as %s (for %s:%hu)",
3311 uri->scheme, conn->uds_path, conn->
hostname, conn->port);
3318 conn->forward =
NULL;
3331 const char *proxy_auth;
3340 if (proxy_auth ==
NULL
3345 if (proxy_auth !=
NULL && proxy_auth[0] ==
'\0') {
3350 if (!(forward = conn->forward)
3357 if (worker->s->is_address_reusable) {
3358 if (conn->fwd_pool) {
3364 fwd_pool = conn->fwd_pool;
3367 conn->forward = forward;
3383 && (conn->port != hostport
3399 server_portstr[0] =
'\0';
3410 "Connect to remote machine blocked");
3419 const char *ssl_hostname;
3429 else if (conn->forward
3430 && ((
forward_info *)(conn->forward))->use_http_connect) {
3431 ssl_hostname = ((
forward_info *)conn->forward)->target_host;
3434 ssl_hostname = conn->hostname;
3440 if ((conn->ssl_hostname && (!ssl_hostname ||
3442 ssl_hostname) != 0)) ||
3443 (!conn->ssl_hostname && ssl_hostname && conn->sock)) {
3446 if (conn->ssl_hostname ==
NULL) {
3447 conn->ssl_hostname =
apr_pstrdup(conn->scpool, ssl_hostname);
3451 "connecting %s to %pI (%s:%hu)", *
url,
3452 conn->addr, conn->
hostname, conn->port);
3456#define USE_ALTERNATE_IS_CONNECTED 1
3458#if !defined(APR_MSG_PEEK) && defined(MSG_PEEK)
3459#define APR_MSG_PEEK MSG_PEEK
3462#if USE_ALTERNATE_IS_CONNECTED && defined(APR_MSG_PEEK)
3545 "CONNECT: sending the CONNECT request for %s:%d "
3546 "to the remote proxy %pI (%s)",
3551 "CONNECT %s:%d HTTP/1.0" CRLF,
3557 "Proxy-Authorization: %s" CRLF,
3568 left =
sizeof(
buffer) - 1;
3597 unsigned int major, minor;
3602 "send_http_connect: response from the forward proxy: %s",
3613 "send_http_connect: the forward proxy returned code is '%s'",
3626 const char *uds_path,
3629#if APR_HAVE_SYS_UN_H
3646 pathlen = strlen(uds_path);
3650 memcpy(
sa->sun_path, uds_path, pathlen + 1);
3659#if APR_MAJOR_VERSION < 2
3720 else if (conn->
sock) {
3735 "%s: reusing backend connection %pI<>%pI",
3736 scheme, local_addr, conn->
addr);
3739 else if (conn->
sock) {
3748 ssl_hostname[0] =
'\0';
3754 "%s: backend socket is disconnected.", scheme);
3758 "%s: reusable backend connection is not empty: "
3759 "forcibly closed", scheme);
3762 if (ssl_hostname[0]) {
3782 void *
sconf =
s->module_config;
3804#if APR_HAVE_SYS_UN_H
3812 "%s: error creating Unix domain socket "
3825 "%s: attempt to connect to Unix domain socket "
3826 "%s (%s:%hu) failed",
3833 "%s: connection established with Unix domain socket "
3847 "%s: error creating fam %d socket to %pI for "
3866 "apr_socket_opt_set(SO_RCVBUF): Failed to set "
3867 "ProxyReceiveBufferSize, using default");
3873 "apr_socket_opt_set(APR_TCP_NODELAY): "
3895 "apr_socket_opt_set(SO_KEEPALIVE): Failed to set"
3900 "%s: fam %d socket created for %pI (%s:%hu)",
3911 "%s: failed to bind socket to local address",
3924 "%s: attempt to connect to %pI (%s:%hu) failed",
3957 "%s: connection established with %pI (%s:%hu)",
3991 "%s: attempt to connect to %s:%hu "
3992 "via http CONNECT through %pI (%s:%hu) failed",
4015 "ap_proxy_connect_backend disabling worker for (%s:%hu) "
4069 "proxy: connection shutdown");
4111 s,
APLOGNO(00960)
"%s: an error occurred creating a "
4123 s,
APLOGNO(00961)
"%s: failed to enable ssl support "
4145 "%s: connection complete to %pI (%s)",
4159 "%s: pre_connection setup failed (%d)",
4276 const unsigned int fnv_prime = 0x811C9DC5;
4339 if (
b->s->wupdated <=
b->wupdated)
4344 b->lbmethod = lbmethod;
4347 "Cannot find LB Method: %s",
b->s->lbpname);
4360 for (index = 0; index <
b->max_workers; index++) {
4370 if (!
shm->hash.def || !
shm->hash.fnv)
4374 for (
i = 0;
i <
b->workers->nelts;
i++,
workers++) {
4379 "re-grabbing shm[%d] (0x%pp) for worker: %s",
i, (
void *)
shm,
4391 (*runtime)->hash =
shm->hash;
4392 (*runtime)->balancer =
b;
4393 (*runtime)->s =
shm;
4401 "grabbing shm[%d] (0x%pp) for worker: %s",
i, (
void *)
shm,
4402 (*runtime)->s->name_ex);
4405 if (
b->s->need_reset) {
4406 if (
b->lbmethod &&
b->lbmethod->reset)
4407 b->lbmethod->reset(
b,
s);
4408 b->s->need_reset = 0;
4410 b->wupdated =
b->s->wupdated;
4417 unsigned int *index)
4420 unsigned int i, limit;
4422 for (
i = 0;
i < limit;
i++) {
4438 unsigned int *index)
4441 unsigned int i, limit;
4443 for (
i = 0;
i < limit;
i++) {
4469 while (*
val ==
',' || *
val ==
';') {
4530 char *
url,
char *server_portstr,
4543 int force10 = 0, do_100_continue = 0;
4545 const char *
host, *creds, *
val;
4558 do_100_continue = 1;
4599 "Transfer-Encoding"))) {
4603 "Content-Length"))) {
4621 if (!
uri->hostname) {
4650 "no HTTP 0.9 request (with no host line) "
4651 "on incoming request and preserve host set "
4652 "forcing hostname to be %s for uri %s",
4659 if (conf->
viaopt == via_block) {
4662 }
else if (conf->
viaopt != via_off) {
4674 (conf->
viaopt == via_full)
4690 if (do_100_continue) {
4796 if (headers_in[counter].
key ==
NULL
4797 || headers_in[counter].
val ==
NULL) {
4802 headers_in[counter].
val,
CRLF,
4865 "prefetch request body failed to %pI (%s)"
4866 " from %s (%s)", backend->
addr,
4868 c->client_ip,
c->remote_host ?
c->remote_host :
"");
4887 "processing prefetched request body failed"
4888 " to %pI (%s) from %s (%s)", backend->
addr,
4890 c->client_ip,
c->remote_host ?
c->remote_host :
"");
4932 "read request body failed to %pI (%s)"
4933 " from %s (%s)", backend->
addr,
4935 c->client_ip,
c->remote_host ?
c->remote_host :
"");
4949 int seen_eos = 0, rv =
OK;
4985 "search for temporary directory failed");
4989 "modproxy.tmp.XXXXXX",
4994 "creation of temporary file in directory "
5014 "write to temporary file %s failed",
5042 }
while (!seen_eos);
5075 if (transferred != -1)
5083 "pass request body failed to %pI (%s)",
5091 "Error during SSL Handshake with"
5142 return f->c->data_in_output_filters;
5151 if (
f->frec->filter_func.out_func(
f,
NULL)) {
5187 "Unhandled bucket type of type %s in"
5188 " ap_proxy_buckets_lifetime_transform",
e->
type->
name);
5203#define PROXY_TRANSFER_MAX_READS 10000
5241 "ap_proxy_transfer_between_connections: "
5242 "error on %s - ap_get_brigade",
5268 "ap_proxy_transfer_between_connections: "
5295 "ap_proxy_transfer_between_connections: "
5296 "error on %s - ap_pass_brigade",
5310 "ap_proxy_transfer_between_connections: "
5311 "yield (output pending)");
5327 "ap_proxy_transfer_between_connections: "
5328 "yield (max reads)");
5341 "ap_proxy_transfer_between_connections complete (%s %pI)",
5344 :
c_i->client_addr);
5395 tunnel->client->name =
"client";
5411 tunnel->origin->name =
"origin";
5427 "SSL/TLS Coalescing Filter");
5429 "SSL/TLS Coalescing Filter");
5469 tunnel->client->pfd->reqevents = 0;
5479 tunnel->client->down_in = 1;
5551 "proxy: %s: %s input ready",
5571 "proxy: %s: %s wait writable",
5579 "proxy: %s: %s read shutdown",
5581 if (
tunnel->nohalfclose) {
5608 "proxy: %s: %s write shutdown",
5623 *origin =
tunnel->origin;
5625 const char *scheme =
tunnel->scheme;
5629 "proxy: %s: tunnel running (timeout %lf)",
5641 "proxy: %s: polling (client=%hx, origin=%hx)",
5642 scheme, client->
pfd->
reqevents, origin->pfd->reqevents);
5650 "proxy: %s: polling timed out "
5651 "(client=%hx, origin=%hx)",
5653 origin->pfd->reqevents);
5658 "proxy: %s: polling failed", scheme);
5665 "proxy: %s: woken up, %i result(s)", scheme,
nresults);
5672 "proxy: %s: #%i: %s: %hx/%hx", scheme,
i,
5677 &&
pfd->
desc.
s != origin->pfd->desc.s) {
5679 "proxy: %s: unknown socket in pollset", scheme);
5688 "proxy: %s: polling events error (%x)",
5708 "proxy: %s: %s output ready",
5719 "proxy: %s: %s flushing failed (%i)",
5720 scheme,
out->name,
rc);
5732 "proxy: %s: %s write shutdown",
5739 "proxy: %s: %s resume writable",
5773 }
while (!client->
down_out || !origin->down_out);
5777 "proxy: %s: tunneling returns (%i)", scheme,
status);
5787 for (;
m->name;
m++) {
5803 if (start_time ==
NULL) {
5805 sizeof(*start_time));
Apache Multi-Processing Module library.
const char apr_size_t len
#define AP_SERVER_BASEVERSION
char * strstr(char *s1, char *s2)
APR Versioning Interface.
apr_uint32_t apr_atomic_add32(volatile apr_uint32_t *mem, apr_uint32_t val)
apr_uint32_t apr_atomic_inc32(volatile apr_uint32_t *mem)
void apr_atomic_set32(volatile apr_uint32_t *mem, apr_uint32_t val)
apr_uint32_t apr_atomic_cas32(volatile apr_uint32_t *mem, apr_uint32_t swap, apr_uint32_t cmp)
apr_uint32_t apr_atomic_read32(volatile apr_uint32_t *mem)
int ap_run_pre_connection(conn_rec *c, void *csd)
apr_status_t ap_shutdown_conn(conn_rec *c, int flush)
conn_rec * ap_run_create_connection(apr_pool_t *p, server_rec *server, apr_socket_t *csd, long conn_id, void *sbh, apr_bucket_alloc_t *alloc)
#define APLOG_USE_MODULE(foo)
char * ap_runtime_dir_relative(apr_pool_t *p, const char *fname)
#define ap_get_module_config(v, m)
struct ap_conf_vector_t ap_conf_vector_t
#define ap_set_module_config(v, m, val)
void * ap_retained_data_create(const char *key, apr_size_t size)
request_rec int int apr_table_t const char * path
void * ap_retained_data_get(const char *key)
#define HTTP_VERSION_MAJOR(number)
#define HTTP_VERSION_MINOR(number)
#define DEFAULT_HTTPS_PORT
#define DEFAULT_HTTP_PORT
#define ap_is_default_port(port, r)
const char * ap_get_server_banner(void)
#define ap_xlate_proto_to_ascii(x, y)
#define ap_xlate_proto_from_ascii(x, y)
apr_status_t ap_fflush(ap_filter_t *f, apr_bucket_brigade *bb)
apr_status_t ap_pass_brigade(ap_filter_t *filter, apr_bucket_brigade *bucket)
ap_filter_t * ap_add_input_filter(const char *name, void *ctx, request_rec *r, conn_rec *c)
apr_status_t ap_remove_input_filter_byhandle(ap_filter_t *next, const char *handle)
apr_status_t ap_remove_output_filter_byhandle(ap_filter_t *next, const char *handle)
apr_status_t ap_save_brigade(ap_filter_t *f, apr_bucket_brigade **save_to, apr_bucket_brigade **b, apr_pool_t *p)
apr_status_t ap_get_brigade(ap_filter_t *filter, apr_bucket_brigade *bucket, ap_input_mode_t mode, apr_read_type_e block, apr_off_t readbytes)
apr_port_t ap_get_server_port(const request_rec *r)
const char * ap_get_server_name(request_rec *r)
apr_size_t ap_get_read_buf_size(const request_rec *r)
apr_socket_t * ap_get_conn_socket(conn_rec *c)
apr_status_t ap_get_pollfd_from_conn(conn_rec *c, struct apr_pollfd_t *pfd, apr_interval_time_t *ptimeout)
char * ap_construct_url(apr_pool_t *p, const char *uri, request_rec *r)
server_rec * ap_server_conf
const unsigned char * buf
int ap_map_http_request_error(apr_status_t rv, int status)
apr_bucket * ap_bucket_error_create(int error, const char *buf, apr_pool_t *p, apr_bucket_alloc_t *list)
void * ap_lookup_provider(const char *provider_group, const char *provider_name, const char *provider_version)
apr_status_t ap_check_pipeline(conn_rec *c, apr_bucket_brigade *bb, unsigned int max_blank_lines)
const char apr_port_t port
ap_vhost_iterate_conn_cb void * baton
apr_uint32_t ap_max_mem_free
#define APR_STATUS_IS_EINTR(s)
#define APR_STATUS_IS_INCOMPLETE(s)
#define APR_STATUS_IS_ECONNRESET(s)
#define APR_STATUS_IS_TIMEUP(s)
#define APR_STATUS_IS_EAGAIN(s)
#define APR_STATUS_IS_EOF(s)
#define APR_UUID_FORMATTED_LENGTH
#define APR_BUCKET_IS_FLUSH(e)
#define APR_BRIGADE_LAST(b)
#define APR_BUCKET_IS_METADATA(e)
#define APR_BRIGADE_INSERT_TAIL(b, e)
apr_file_t apr_off_t start
#define APR_BUCKET_NEXT(e)
#define APR_BRIGADE_CONCAT(a, b)
#define APR_BUCKET_BUFF_SIZE
#define APR_BRIGADE_EMPTY(b)
#define APR_BRIGADE_SENTINEL(b)
#define APR_BUCKET_IS_EOS(e)
#define APR_BRIGADE_FIRST(b)
#define apr_bucket_read(e, str, len, block)
apr_pool_t const char * params
const char apr_ssize_t int flags
const char apr_ssize_t slen
const char apr_ssize_t const char const char * reserved
apr_memcache_server_t * server
#define APR_IMPLEMENT_OPTIONAL_HOOK_RUN_ALL(ns, link, ret, name, args_decl, args_use, ok, decline)
#define APR_RETRIEVE_OPTIONAL_FN(name)
#define APR_OPTIONAL_FN_TYPE(name)
#define APR_REGISTER_OPTIONAL_FN(name)
#define APR_URI_UNP_REVEALPASSWORD
#define HTTP_SERVICE_UNAVAILABLE
#define HTTP_INTERNAL_SERVER_ERROR
#define ap_is_HTTP_ERROR(x)
#define HTTP_GATEWAY_TIME_OUT
const apr_strmatch_pattern * ap_proxy_strmatch_path
const apr_strmatch_pattern * ap_proxy_strmatch_domain
void proxy_util_register_hooks(apr_pool_t *p)
#define PROXY_DECLARE_DATA
int ap_proxy_ssl_engine(conn_rec *c, ap_conf_vector_t *per_dir_config, int enable)
#define PROXY_WORKER_IS_USABLE(f)
#define PROXY_CHECK_CONN_EMPTY
int ap_proxy_connect_backend(const char *proxy_function, proxy_conn_rec *conn, proxy_worker *worker, server_rec *s)
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)
#define AP_PROXY_TRANSFER_YIELD_MAX_READS
#define AP_PROXY_WORKER_IS_MALLOCED
apr_status_t ap_proxy_set_wstatus(char c, int set, proxy_worker *w)
int ap_proxy_should_override(proxy_dir_conf *conf, int code)
#define PROXY_DECLARE(type)
#define PROXY_WORKER_STOPPED
#define PROXY_WORKER_IS_SPARE(f)
#define PROXY_STRNCPY(dst, src)
#define AP_PROXY_TRANSFER_FLUSH_AFTER
int ap_proxy_read_input(request_rec *r, proxy_conn_rec *backend, apr_bucket_brigade *bb, apr_off_t max_read)
char * ap_proxy_canon_netloc(apr_pool_t *p, char **const urlp, char **userp, char **passwordp, char **hostp, apr_port_t *port)
int ap_proxy_release_connection(const char *proxy_function, proxy_conn_rec *conn, server_rec *s)
int ap_proxy_tunnel_run(proxy_tunnel_rec *tunnel)
#define PROXY_WORKER_IN_ERROR
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)
int ap_proxy_acquire_connection(const char *proxy_function, proxy_conn_rec **conn, proxy_worker *worker, server_rec *s)
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)
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)
int ap_proxy_hex2c(const char *x)
proxy_worker * ap_proxy_get_worker(apr_pool_t *p, proxy_balancer *balancer, proxy_server_conf *conf, const char *url)
#define PROXY_WORKER_IGNORE_ERRORS
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)
const char * ap_proxy_de_socketfy(apr_pool_t *p, const char *url)
proxy_worker_shared * ap_proxy_find_workershm(ap_slotmem_provider_t *storage, ap_slotmem_instance_t *slot, proxy_worker *worker, unsigned int *index)
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)
#define PROXY_THREAD_LOCK(x)
char * ap_proxy_canonenc_ex(apr_pool_t *p, const char *x, int len, enum enctype t, int flags, int proxyreq)
int proxy_run_post_request(proxy_worker *worker, proxy_balancer *balancer, request_rec *r, proxy_server_conf *conf)
#define PROXYPASS_INTERPOLATE
#define PROXY_WORKER_INITIALIZED
void ap_proxy_c2hex(int ch, char *x)
#define PROXY_WORKER_IS_DRAINING(f)
void ap_proxy_backend_broke(request_rec *r, apr_bucket_brigade *brigade)
const char * ap_proxy_location_reverse_map(request_rec *r, proxy_dir_conf *conf, const char *url)
int() proxy_is_best_callback_fn_t(proxy_worker *current, proxy_worker *prev_best, void *baton)
apr_status_t ap_proxy_tunnel_create(proxy_tunnel_rec **ptunnel, request_rec *r, conn_rec *c_o, const char *scheme)
apr_status_t ap_proxy_check_connection(const char *scheme, proxy_conn_rec *conn, server_rec *server, unsigned max_blank_lines, int flags)
#define AP_VOLATILIZE_T(T, x)
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)
int ap_proxy_post_request(proxy_worker *worker, proxy_balancer *balancer, request_rec *r, proxy_server_conf *conf)
int ap_proxy_checkproxyblock(request_rec *r, proxy_server_conf *conf, apr_sockaddr_t *uri_addr)
#define PROXY_WORKER_DEFAULT_RETRY
int ap_proxy_checkproxyblock2(request_rec *r, proxy_server_conf *conf, const char *hostname, apr_sockaddr_t *addr)
proxy_worker * ap_proxy_get_worker_ex(apr_pool_t *p, proxy_balancer *balancer, proxy_server_conf *conf, const char *url, unsigned int mask)
proxy_balancer * ap_proxy_get_balancer(apr_pool_t *p, proxy_server_conf *conf, const char *url, int care)
int ap_proxy_connection_reusable(proxy_conn_rec *conn)
#define PROXY_THREAD_UNLOCK(x)
#define AP_PROXY_WORKER_NO_UDS
#define PROXY_CANONENC_NOENCODEDSLASHENCODING
int ap_proxy_valid_balancer_name(char *name, int i)
#define AP_PROXY_WORKER_IS_MATCH
int ap_proxy_pre_http_request(conn_rec *c, request_rec *r)
apr_status_t ap_proxy_strncpy(char *dst, const char *src, apr_size_t dlen)
apr_status_t ap_proxy_share_worker(proxy_worker *worker, proxy_worker_shared *shm, int i)
int ap_proxy_worker_can_upgrade(apr_pool_t *p, const proxy_worker *worker, const char *upgrade, const char *dflt)
int proxy_run_fixups(request_rec *r)
apr_status_t ap_proxy_buckets_lifetime_transform(request_rec *r, apr_bucket_brigade *from, apr_bucket_brigade *to)
int proxy_run_pre_request(proxy_worker **worker, proxy_balancer **balancer, request_rec *r, proxy_server_conf *conf, char **url)
proxy_wstat_t proxy_wstat_tbl[]
int ap_proxy_pre_request(proxy_worker **worker, proxy_balancer **balancer, request_rec *r, proxy_server_conf *conf, char **url)
#define PROXY_DYNAMIC_BALANCER_LIMIT
apr_status_t ap_proxy_connect_uds(apr_socket_t *sock, const char *uds_path, apr_pool_t *p)
#define PROXY_CANONENC_FORCEDEC
#define PROXY_WORKER_IS(f, b)
int ap_proxy_connect_to_backend(apr_socket_t **newsock, const char *proxy_function, apr_sockaddr_t *backend_addr, const char *backend_name, proxy_server_conf *conf, request_rec *r)
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)
proxy_balancer_shared * ap_proxy_find_balancershm(ap_slotmem_provider_t *storage, ap_slotmem_instance_t *slot, proxy_balancer *balancer, unsigned int *index)
int ap_proxy_connection_create_ex(const char *proxy_function, proxy_conn_rec *conn, request_rec *r)
apr_status_t ap_proxy_share_balancer(proxy_balancer *balancer, proxy_balancer_shared *shm, int i)
#define PROXY_SHOULD_PING_100_CONTINUE(w, r)
apr_status_t ap_proxy_ssl_connection_cleanup(proxy_conn_rec *conn, request_rec *r)
unsigned int ap_proxy_hashfunc(const char *str, proxy_hash_t method)
const char * ap_proxy_show_hcmethod(hcmethod_t method)
int ap_proxy_fixup_uds_filename(request_rec *r)
int ap_proxy_lb_workers(void)
apr_status_t ap_proxy_initialize_worker(proxy_worker *worker, server_rec *s, apr_pool_t *p)
#define HCHECK_WATHCHDOG_DEFAULT_INTERVAL
#define PROXY_WORKER_RFC1035_NAME_SIZE
apr_port_t ap_proxy_port_of_scheme(const char *scheme)
#define PROXY_DETERMINE_ADDRESS_CHECK
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_proxyerror(request_rec *r, int statuscode, const char *message)
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)
apr_status_t ap_proxy_initialize_balancer(proxy_balancer *balancer, server_rec *s, apr_pool_t *p)
proxy_worker * ap_proxy_balancer_get_best_worker(proxy_balancer *balancer, request_rec *r, proxy_is_best_callback_fn_t *is_best, void *baton)
int proxy_run_canon_handler(request_rec *r, char *url)
#define AP_PROXY_TRANSFER_YIELD_PENDING
const char * ap_proxy_cookie_reverse_map(request_rec *r, proxy_dir_conf *conf, const char *str)
int ap_proxy_connection_create(const char *proxy_function, proxy_conn_rec *conn, conn_rec *c, server_rec *s)
char * ap_proxy_canonenc(apr_pool_t *p, const char *x, int len, enum enctype t, int forcedec, int proxyreq)
proxy_hcmethods_t proxy_hcmethods[]
#define PROXY_WORKER_IS_STANDBY(f)
char * ap_proxy_worker_name(apr_pool_t *p, proxy_worker *worker)
#define AP_PROXY_WORKER_IS_PREFIX
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_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)
char * ap_proxy_update_balancer(apr_pool_t *p, proxy_balancer *balancer, const char *url)
int ap_proxy_is_socket_connected(apr_socket_t *sock)
void ap_random_insecure_bytes(void *buf, apr_size_t size)
int ap_is_url(const char *u)
int ap_cstr_casecmp(const char *s1, const char *s2)
#define ap_strstr_c(s, c)
#define ap_strchr_c(s, c)
char * ap_get_token(apr_pool_t *p, const char **accept_line, int accept_white)
#define AP_DEBUG_ASSERT(exp)
void ap_abort_on_oom(void) __attribute__((noreturn))
int ap_find_token(apr_pool_t *p, const char *line, const char *tok)
int ap_cstr_casecmpn(const char *s1, const char *s2, apr_size_t n)
#define ap_escape_html(p, s)
void ap_str_tolower(char *s)
apr_status_t ap_pstr2_alnum(apr_pool_t *p, const char *src, const char **dest)
void * ap_malloc(size_t size) __attribute__((malloc))
const char int apr_pool_t * pool
const char apr_int32_t flag
void apr_size_t apr_size_t * bytes_read
const void apr_size_t apr_size_t * bytes_written
void const char apr_status_t(* cleanup)(void *))
#define APR_FILEPATH_NATIVE
int strcasecmp(const char *a, const char *b)
int strncasecmp(const char *a, const char *b, size_t n)
apr_vformatter_buff_t * c
apr_sockaddr_t * sockaddr
const apr_sockaddr_t * addr2
apr_uint32_t apr_pool_t apr_uint32_t apr_pollset_method_e method
apr_interval_time_t apr_int32_t * num
#define apr_pool_create(newpool, parent)
#define apr_pcalloc(p, size)
const void apr_size_t bytes
apr_status_t apr_wait_for_io_or_timeout(apr_file_t *f, apr_socket_t *s, int for_read)
#define APR_ARRAY_PUSH(ary, type)
#define APR_ARRAY_IDX(ary, i, type)
const char const char * password
apr_int32_t apr_int32_t apr_int32_t err
apr_int64_t apr_interval_time_t
apr_size_t apr_size_t max
#define apr_time_sec(time)
#define apr_time_from_sec(sec)
apr_status_t ap_mpm_query(int query_code, int *result)
#define APR_POLLSET_NOCOPY
#define AP_MPMQ_MAX_THREADS
static struct h2_workers * workers
static const ap_slotmem_provider_t * storage
static void http2_get_num_workers(server_rec *s, int *minw, int *maxw)
Proxy Extension Module for Apache.
Multi-Processing Modules functions.
static apr_status_t connection_shutdown(void *theconn)
static int proxy_match_word(struct dirconn_entry *This, request_rec *r)
static void del_pollset(apr_pollset_t *pollset, apr_pollfd_t *pfd, apr_int16_t events)
static apr_status_t worker_address_resolve(proxy_worker *worker, apr_sockaddr_t **paddr, const char *hostname, apr_port_t hostport, const char *proxy_function, request_rec *r, server_rec *s)
static proxy_schemes_t pschemes[]
static APR_INLINE void proxy_address_inc(proxy_address *address)
int ap_proxy_is_domainname(struct dirconn_entry *This, apr_pool_t *p)
static APR_INLINE int ap_filter_should_yield(ap_filter_t *f)
static int fixup_uds_filename(request_rec *r)
static void add_pollset(apr_pollset_t *pollset, apr_pollfd_t *pfd, apr_int16_t events)
static const apr_time_t * proxy_start_time
static apr_status_t connection_constructor(void **resource, void *params, apr_pool_t *pool)
static void socket_cleanup(proxy_conn_rec *conn)
static int find_conn_headers(void *data, const char *key, const char *val)
static void connection_cleanup(void *theconn)
static void conn_cleanup(proxy_conn_rec *conn)
static apr_pool_t * make_conn_subpool(apr_pool_t *p, const char *tag, server_rec *s)
int ap_proxy_is_ipaddr(struct dirconn_entry *This, apr_pool_t *p)
static apr_status_t conn_pool_cleanup(void *theworker)
static APR_INLINE proxy_address * worker_address_get(proxy_worker *worker)
int ap_proxy_is_word(struct dirconn_entry *This, apr_pool_t *p)
static apr_status_t proxy_address_cleanup(void *address)
static int proxy_match_ipaddr(struct dirconn_entry *This, request_rec *r)
const char * ap_proxy_interpolate(request_rec *r, const char *str)
int ap_proxy_canon_url(request_rec *r)
static proxy_conn_rec * connection_make(apr_pool_t *p, proxy_worker *worker)
static int ap_proxy_retry_worker(const char *proxy_function, proxy_worker *worker, server_rec *s)
int ap_proxy_is_hostname(struct dirconn_entry *This, apr_pool_t *p)
static int proxy_addrs_equal(const apr_sockaddr_t *addr1, const apr_sockaddr_t *addr2)
apr_global_mutex_t * proxy_mutex
static apr_array_header_t * proxy_vars(request_rec *r, apr_array_header_t *hdr)
static int proxy_connection_create(const char *proxy_function, proxy_conn_rec *conn, request_rec *r, server_rec *s)
#define PROXY_TRANSFER_MAX_READS
static APR_INLINE int error_code_overridden(const int *elts, int nelts, int code)
static int proxy_match_domainname(struct dirconn_entry *This, request_rec *r)
static void init_conn_pool(apr_pool_t *p, proxy_worker *worker, server_rec *s)
static apr_status_t send_http_connect(proxy_conn_rec *backend, server_rec *s)
static int ap_proxy_strcmp_ematch(const char *str, const char *expected)
static APR_INLINE void proxy_address_dec(proxy_address *address)
static APR_INLINE int ap_filter_output_pending(conn_rec *c)
static int proxy_tunnel_forward(proxy_tunnel_rec *tunnel, struct proxy_tunnel_conn *in)
#define PROXY_UNSET_NONCE
static int proxy_match_hostname(struct dirconn_entry *This, request_rec *r)
static int proxyerror_core(request_rec *r, int statuscode, const char *message, apr_status_t rv)
static proxy_worker * proxy_balancer_get_best_worker(proxy_balancer *balancer, request_rec *r, proxy_is_best_callback_fn_t *is_best, void *baton)
static int ap_proxy_clear_connection(request_rec *r, apr_table_t *headers)
static const char * proxy_get_host_of_request(request_rec *r)
static apr_status_t connection_destructor(void *resource, void *params, apr_pool_t *pool)
static int lb_workers_limit
static APR_INLINE void worker_address_set(proxy_worker *worker, proxy_address *to)
Internal interfaces private to mod_proxy.
Shared SCGI-related definitions.
Apache scoreboard library.
static char * address(sed_commands_t *commands, char *expbuf, apr_status_t *status)
The representation of a filter chain.
apr_status_t(* dptr)(ap_slotmem_instance_t *s, unsigned int item_id, void **mem)
apr_status_t(* attach)(ap_slotmem_instance_t **inst, const char *name, apr_size_t *item_size, unsigned int *item_num, apr_pool_t *pool)
unsigned int(* num_slots)(ap_slotmem_instance_t *s)
apr_bucket_alloc_t * bucket_alloc
const apr_bucket_type_t * type
Structure to store things which are per connection.
ap_conn_keepalive_e keepalive
struct ap_filter_t * input_filters
struct ap_filter_t * output_filters
proxy_balancer * balancer
unsigned int was_malloced
ap_slotmem_instance_t * wslot
proxy_balancer_shared * s
ap_slotmem_provider_t * storage
unsigned int lbmethod_set
apr_global_mutex_t * gmutex
proxy_balancer_method * lbmethod
apr_array_header_t * workers
apr_bucket_brigade * tmp_bb
struct proxy_address * address
const char * ssl_hostname
apr_array_header_t * cookie_domains
signed char interpolate_env
apr_array_header_t * raliases
unsigned int error_override
unsigned int preserve_host
apr_array_header_t * cookie_paths
unsigned int add_forwarded_headers
apr_array_header_t * error_override_codes
apr_size_t recv_buffer_size
apr_array_header_t * workers
unsigned int source_address_set
apr_sockaddr_t * source_address
apr_interval_time_t timeout
enum proxy_server_conf::@32 viaopt
apr_array_header_t * balancers
apr_array_header_t * noproxies
struct proxy_tunnel_conn * other
unsigned int conn_timeout_set
apr_size_t recv_buffer_size
apr_interval_time_t timeout
unsigned int is_name_matchable
apr_uint32_t address_expiry
apr_interval_time_t retry
unsigned int was_malloced
unsigned int disablereuse_set
unsigned int address_ttl_set
apr_interval_time_t conn_timeout
unsigned int is_address_reusable
unsigned int disablereuse
apr_interval_time_t acquire
unsigned int local_status
ap_conf_vector_t * section_config
struct proxy_address *volatile address
A structure that represents the current request.
struct ap_filter_t * output_filters
struct ap_filter_t * proto_input_filters
struct ap_filter_t * proto_output_filters
struct ap_filter_t * input_filters
struct ap_conf_vector_t * request_config
apr_table_t * subprocess_env
struct ap_conf_vector_t * per_dir_config
A structure to store information for each virtual server.
apr_interval_time_t timeout
struct ap_conf_vector_t * module_config
static apr_pollset_t * pollset
apr_status_t apr_socket_recvfrom(apr_sockaddr_t *from, apr_socket_t *sock, apr_int32_t flags, char *buf, apr_size_t *len)
apr_status_t apr_socket_send(apr_socket_t *sock, const char *buf, apr_size_t *len)
apr_status_t apr_socket_recv(apr_socket_t *sock, char *buf, apr_size_t *len)
apr_status_t apr_os_sock_get(apr_os_sock_t *thesock, apr_socket_t *sock)
apr_status_t apr_socket_bind(apr_socket_t *sock, apr_sockaddr_t *sa)
apr_status_t apr_socket_close(apr_socket_t *thesocket)
apr_status_t apr_socket_connect(apr_socket_t *sock, apr_sockaddr_t *sa)
apr_status_t apr_socket_shutdown(apr_socket_t *thesocket, apr_shutdown_how_e how)
apr_status_t apr_socket_create(apr_socket_t **new, int ofamily, int type, int protocol, apr_pool_t *cont)
apr_status_t apr_socket_opt_set(apr_socket_t *sock, apr_int32_t opt, apr_int32_t on)
apr_status_t apr_socket_timeout_set(apr_socket_t *sock, apr_interval_time_t t)
apr_status_t apr_socket_timeout_get(apr_socket_t *sock, apr_interval_time_t *t)