Apache2
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
mod_proxy.h
Go to the documentation of this file.
1 /* Licensed to the Apache Software Foundation (ASF) under one or more
2  * contributor license agreements. See the NOTICE file distributed with
3  * this work for additional information regarding copyright ownership.
4  * The ASF licenses this file to You under the Apache License, Version 2.0
5  * (the "License"); you may not use this file except in compliance with
6  * the License. You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #ifndef MOD_PROXY_H
18 #define MOD_PROXY_H
19 
29 #include "apr_hooks.h"
30 #include "apr_optional.h"
31 #include "apr.h"
32 #include "apr_lib.h"
33 #include "apr_strings.h"
34 #include "apr_buckets.h"
35 #include "apr_md5.h"
36 #include "apr_network_io.h"
37 #include "apr_pools.h"
38 #include "apr_strings.h"
39 #include "apr_uri.h"
40 #include "apr_date.h"
41 #include "apr_strmatch.h"
42 #include "apr_fnmatch.h"
43 #include "apr_reslist.h"
44 #define APR_WANT_STRFUNC
45 #include "apr_want.h"
46 #include "apr_uuid.h"
47 #include "util_mutex.h"
48 #include "apr_global_mutex.h"
49 #include "apr_thread_mutex.h"
50 
51 #include "httpd.h"
52 #include "http_config.h"
53 #include "ap_config.h"
54 #include "http_core.h"
55 #include "http_protocol.h"
56 #include "http_request.h"
57 #include "http_vhost.h"
58 #include "http_main.h"
59 #include "http_log.h"
60 #include "http_connection.h"
61 #include "util_filter.h"
62 #include "util_ebcdic.h"
63 #include "ap_provider.h"
64 #include "ap_slotmem.h"
65 
66 #if APR_HAVE_NETINET_IN_H
67 #include <netinet/in.h>
68 #endif
69 #if APR_HAVE_ARPA_INET_H
70 #include <arpa/inet.h>
71 #endif
72 
73 /* for proxy_canonenc() */
74 enum enctype {
76 };
77 
78 typedef enum {
80 } hcmethod_t;
81 
82 typedef struct {
84  char *name;
87 
88 typedef struct {
89  unsigned int bit;
90  char flag;
91  const char *name;
93 
94 #define BALANCER_PREFIX "balancer://"
95 
96 #if APR_CHARSET_EBCDIC
97 #define CRLF "\r\n"
98 #else /*APR_CHARSET_EBCDIC*/
99 #define CRLF "\015\012"
100 #endif /*APR_CHARSET_EBCDIC*/
101 
102 /* default Max-Forwards header setting */
103 /* Set this to -1, which complies with RFC2616 by not setting
104  * max-forwards if the client didn't send it to us.
105  */
106 #define DEFAULT_MAX_FORWARDS -1
107 
109 typedef struct proxy_worker proxy_worker;
112 
113 /* static information about a remote proxy */
114 struct proxy_remote {
115  const char *scheme; /* the schemes handled by this proxy, or '*' */
116  const char *protocol; /* the scheme used to talk to this proxy */
117  const char *hostname; /* the hostname of this proxy */
118  ap_regex_t *regexp; /* compiled regex (if any) for the remote */
119  const char *creds; /* auth credentials (if any) for the proxy */
120  int use_regex; /* simple boolean. True if we have a regex pattern */
121  apr_port_t port; /* the port for this proxy */
122 };
123 
124 #define PROXYPASS_NOCANON 0x01
125 #define PROXYPASS_INTERPOLATE 0x02
126 #define PROXYPASS_NOQUERY 0x04
127 #define PROXYPASS_MAP_ENCODED 0x08
128 #define PROXYPASS_MAP_SERVLET 0x18 /* + MAP_ENCODED */
129 struct proxy_alias {
130  const char *real;
131  const char *fake;
133  unsigned int flags;
134  proxy_balancer *balancer; /* only valid for reverse-proxys */
135 };
136 
138  char *name;
139  struct in_addr addr, mask;
141  int (*matcher) (struct dirconn_entry * This, request_rec *r);
142 };
143 
145  const char *name;
147 };
148 
149 typedef struct {
155  apr_array_header_t *workers; /* non-balancer workers, eg ProxyPass http://example.com */
156  apr_array_header_t *balancers; /* list of balancers @ config time */
157  proxy_worker *forward; /* forward proxy worker */
158  proxy_worker *reverse; /* reverse "module-driven" proxy worker */
159  const char *domain; /* domain name to use in absence of a domain name in the request */
160  const char *id;
161  apr_pool_t *pool; /* Pool used for allocating this struct's elements */
162  int req; /* true if proxy requests are enabled */
163  int max_balancers; /* maximum number of allowed balancers */
164  int bgrowth; /* number of post-config balancers can added */
165  enum {
169  via_full
170  } viaopt; /* how to deal with proxy Via: headers */
173  long maxfwd;
175  enum {
178  bad_body
179  } badopt; /* how to deal with bad headers */
180  enum {
183  status_full
184  } proxy_status; /* Status display options */
186  apr_global_mutex_t *mutex; /* global lock - not used */
187  ap_slotmem_instance_t *bslot; /* balancers shm data - runtime */
189 
190  unsigned int req_set:1;
191  unsigned int viaopt_set:1;
192  unsigned int recv_buffer_size_set:1;
193  unsigned int io_buffer_size_set:1;
194  unsigned int maxfwd_set:1;
195  unsigned int timeout_set:1;
196  unsigned int badopt_set:1;
197  unsigned int proxy_status_set:1;
198  unsigned int source_address_set:1;
199  unsigned int bgrowth_set:1;
200  unsigned int bal_persist:1;
201  unsigned int inherit:1;
202  unsigned int inherit_set:1;
203  unsigned int ppinherit:1;
204  unsigned int ppinherit_set:1;
205  unsigned int map_encoded_one:1;
206  unsigned int map_encoded_all:1;
208 
209 typedef struct {
210  const char *p; /* The path */
211  ap_regex_t *r; /* Is this a regex? */
212 
213 /* FIXME
214  * ProxyPassReverse and friends are documented as working inside
215  * <Location>. But in fact they never have done in the case of
216  * more than one <Location>, because the server_conf can't see it.
217  * We need to move them to the per-dir config.
218  * Discussed in February 2005:
219  * http://marc.theaimsgroup.com/?l=apache-httpd-dev&m=110726027118798&w=2
220  */
224  signed char p_is_fnmatch; /* Is the path an fnmatch candidate? */
225  signed char interpolate_env;
227 
236  unsigned int error_override:1;
237  unsigned int preserve_host:1;
238  unsigned int preserve_host_set:1;
239  unsigned int error_override_set:1;
240  unsigned int alias_set:1;
241  unsigned int add_forwarded_headers:1;
242  unsigned int add_forwarded_headers_set:1;
243 
246 
247  unsigned int forward_100_continue:1;
248  unsigned int forward_100_continue_set:1;
249 
251 
254  unsigned int async_delay_set:1;
255  unsigned int async_idle_timeout_set:1;
257 
258 /* if we interpolate env vars per-request, we'll need a per-request
259  * copy of the reverse proxy config
260  */
261 typedef struct {
266 
267 typedef struct {
269  request_rec *r; /* Request record of the backend request
270  * that is used over the backend connection. */
271  proxy_worker *worker; /* Connection pool this connection belongs to */
272  apr_pool_t *pool; /* Subpool for hostname and addr data */
273  const char *hostname;
274  apr_sockaddr_t *addr; /* Preparsed remote address info */
275  apr_pool_t *scpool; /* Subpool used for socket and connection data */
276  apr_socket_t *sock; /* Connection socket */
277  void *data; /* per scheme connection data */
278  void *forward; /* opaque forward proxy data */
279  apr_uint32_t flags; /* Connection flags */
281  unsigned int is_ssl:1;
282  unsigned int close:1; /* Close 'this' connection */
283  unsigned int need_flush:1; /* Flag to decide whether we need to flush the
284  * filter chain or not */
285  unsigned int inreslist:1; /* connection in apr_reslist? */
286  const char *uds_path; /* Unix domain socket path */
287  const char *ssl_hostname;/* Hostname (SNI) in use by SSL connection */
288  apr_bucket_brigade *tmp_bb;/* Temporary brigade created with the connection
289  * and its scpool/bucket_alloc (NULL before),
290  * must be left cleaned when used (locally).
291  */
293 
294 typedef struct {
295  float cache_completion; /* completion percentage */
296  int content_length; /* length of the content */
298 
299 /* Connection pool */
301  apr_pool_t *pool; /* The pool used in constructor and destructor calls */
302  apr_sockaddr_t *addr; /* Preparsed remote address info */
303  apr_reslist_t *res; /* Connection resource list */
304  proxy_conn_rec *conn; /* Single connection for prefork mpm */
305  apr_pool_t *dns_pool; /* The pool used for worker scoped DNS resolutions */
306 };
307 
308 #define AP_VOLATILIZE_T(T, x) (*(T volatile *)&(x))
309 
310 /* worker status bits */
311 /*
312  * NOTE: Keep up-to-date w/ proxy_wstat_tbl[]
313  * in mod_proxy.c !
314  */
315 #define PROXY_WORKER_INITIALIZED 0x0001
316 #define PROXY_WORKER_IGNORE_ERRORS 0x0002
317 #define PROXY_WORKER_DRAIN 0x0004
318 #define PROXY_WORKER_GENERIC 0x0008
319 #define PROXY_WORKER_IN_SHUTDOWN 0x0010
320 #define PROXY_WORKER_DISABLED 0x0020
321 #define PROXY_WORKER_STOPPED 0x0040
322 #define PROXY_WORKER_IN_ERROR 0x0080
323 #define PROXY_WORKER_HOT_STANDBY 0x0100
324 #define PROXY_WORKER_FREE 0x0200
325 #define PROXY_WORKER_HC_FAIL 0x0400
326 #define PROXY_WORKER_HOT_SPARE 0x0800
327 
328 /* worker status flags */
329 #define PROXY_WORKER_INITIALIZED_FLAG 'O'
330 #define PROXY_WORKER_IGNORE_ERRORS_FLAG 'I'
331 #define PROXY_WORKER_DRAIN_FLAG 'N'
332 #define PROXY_WORKER_GENERIC_FLAG 'G'
333 #define PROXY_WORKER_IN_SHUTDOWN_FLAG 'U'
334 #define PROXY_WORKER_DISABLED_FLAG 'D'
335 #define PROXY_WORKER_STOPPED_FLAG 'S'
336 #define PROXY_WORKER_IN_ERROR_FLAG 'E'
337 #define PROXY_WORKER_HOT_STANDBY_FLAG 'H'
338 #define PROXY_WORKER_FREE_FLAG 'F'
339 #define PROXY_WORKER_HC_FAIL_FLAG 'C'
340 #define PROXY_WORKER_HOT_SPARE_FLAG 'R'
341 
342 #define PROXY_WORKER_NOT_USABLE_BITMAP ( PROXY_WORKER_IN_SHUTDOWN | \
343 PROXY_WORKER_DISABLED | PROXY_WORKER_STOPPED | PROXY_WORKER_IN_ERROR | \
344 PROXY_WORKER_HC_FAIL )
345 
346 /* NOTE: these check the shared status */
347 #define PROXY_WORKER_IS_INITIALIZED(f) ( (f)->s->status & PROXY_WORKER_INITIALIZED )
348 
349 #define PROXY_WORKER_IS_STANDBY(f) ( (f)->s->status & PROXY_WORKER_HOT_STANDBY )
350 
351 #define PROXY_WORKER_IS_SPARE(f) ( (f)->s->status & PROXY_WORKER_HOT_SPARE )
352 
353 #define PROXY_WORKER_IS_USABLE(f) ( ( !( (f)->s->status & PROXY_WORKER_NOT_USABLE_BITMAP) ) && \
354  PROXY_WORKER_IS_INITIALIZED(f) )
355 
356 #define PROXY_WORKER_IS_DRAINING(f) ( (f)->s->status & PROXY_WORKER_DRAIN )
357 
358 #define PROXY_WORKER_IS_GENERIC(f) ( (f)->s->status & PROXY_WORKER_GENERIC )
359 
360 #define PROXY_WORKER_IS_HCFAILED(f) ( (f)->s->status & PROXY_WORKER_HC_FAIL )
361 
362 #define PROXY_WORKER_IS(f, b) ( (f)->s->status & (b) )
363 
364 /* default worker retry timeout in seconds */
365 #define PROXY_WORKER_DEFAULT_RETRY 60
366 
367 /* Some max char string sizes, for shm fields */
368 #define PROXY_WORKER_MAX_SCHEME_SIZE 16
369 #define PROXY_WORKER_MAX_ROUTE_SIZE 96
370 #define PROXY_BALANCER_MAX_ROUTE_SIZE 64
371 #define PROXY_WORKER_MAX_NAME_SIZE 256
372 #define PROXY_BALANCER_MAX_NAME_SIZE 64
373 #define PROXY_WORKER_MAX_HOSTNAME_SIZE 96
374 #define PROXY_BALANCER_MAX_HOSTNAME_SIZE 64
375 #define PROXY_BALANCER_MAX_STICKY_SIZE 64
376 #define PROXY_WORKER_MAX_SECRET_SIZE 64
377 
378 #define PROXY_RFC1035_HOSTNAME_SIZE 256
379 
380 /* RFC-1035 mentions limits of 255 for host-names and 253 for domain-names,
381  * dotted together(?) this would fit the below size (+ trailing NUL).
382  */
383 #define PROXY_WORKER_RFC1035_NAME_SIZE 512
384 
385 #define PROXY_MAX_PROVIDER_NAME_SIZE 16
386 
387 #define PROXY_STRNCPY(dst, src) ap_proxy_strncpy((dst), (src), (sizeof(dst)))
388 
389 #define PROXY_COPY_CONF_PARAMS(w, c) \
390 do { \
391 (w)->s->timeout = (c)->timeout; \
392 (w)->s->timeout_set = (c)->timeout_set; \
393 (w)->s->recv_buffer_size = (c)->recv_buffer_size; \
394 (w)->s->recv_buffer_size_set = (c)->recv_buffer_size_set; \
395 (w)->s->io_buffer_size = (c)->io_buffer_size; \
396 (w)->s->io_buffer_size_set = (c)->io_buffer_size_set; \
397 } while (0)
398 
399 #define PROXY_DO_100_CONTINUE(w, r) \
400 ((w)->s->ping_timeout_set \
401  && (PROXYREQ_REVERSE == (r)->proxyreq) \
402  && !(apr_table_get((r)->subprocess_env, "force-proxy-request-1.0")) \
403  && ap_request_has_body((r)))
404 
405 /* use 2 hashes */
406 typedef struct {
407  unsigned int def;
408  unsigned int fnv;
409 } proxy_hashes ;
410 
411 /* Runtime worker status information. Shared in scoreboard */
412 typedef struct {
414  char scheme[PROXY_WORKER_MAX_SCHEME_SIZE]; /* scheme to use ajp|http|https */
415  char hostname[PROXY_WORKER_MAX_HOSTNAME_SIZE]; /* remote backend address (deprecated, use hostname_ex below) */
416  char route[PROXY_WORKER_MAX_ROUTE_SIZE]; /* balancing route */
417  char redirect[PROXY_WORKER_MAX_ROUTE_SIZE]; /* temporary balancing redirection route */
418  char flusher[PROXY_WORKER_MAX_SCHEME_SIZE]; /* flush provider used by mod_proxy_fdpass */
419  char uds_path[PROXY_WORKER_MAX_NAME_SIZE]; /* path to worker's unix domain socket if applicable */
420  char hcuri[PROXY_WORKER_MAX_ROUTE_SIZE]; /* health check uri */
421  char hcexpr[PROXY_WORKER_MAX_SCHEME_SIZE]; /* name of condition expr for health check */
422  char secret[PROXY_WORKER_MAX_SECRET_SIZE]; /* authentication secret (e.g. AJP13) */
423  char upgrade[PROXY_WORKER_MAX_SCHEME_SIZE];/* upgrade protocol used by mod_proxy_wstunnel */
424  char hostname_ex[PROXY_RFC1035_HOSTNAME_SIZE]; /* RFC1035 compliant version of the remote backend address */
425  int lbset; /* load balancer cluster set */
426  int retries; /* number of retries on this worker */
427  int lbstatus; /* Current lbstatus */
428  int lbfactor; /* dynamic lbfactor */
429  int min; /* Desired minimum number of available connections */
430  int smax; /* Soft maximum on the total number of connections */
431  int hmax; /* Hard maximum on the total number of connections */
432  int flush_wait; /* poll wait time in microseconds if flush_auto */
433  int index; /* shm array index */
434  int passes; /* number of successes for check to pass */
435  int pcount; /* current count of passes */
436  int fails; /* number of failures for check to fail */
437  int fcount; /* current count of failures */
438  proxy_hashes hash; /* hash of worker name */
439  unsigned int status; /* worker status bitfield */
440  enum {
443  flush_auto
444  } flush_packets; /* control AJP flushing */
445  hcmethod_t method; /* method to use for health check */
446  apr_time_t updated; /* timestamp of last update for dynamic workers, or queue-time of HC workers */
447  apr_time_t error_time; /* time of the last error */
448  apr_interval_time_t ttl; /* maximum amount of time in seconds a connection
449  * may be available while exceeding the soft limit */
450  apr_interval_time_t retry; /* retry interval */
451  apr_interval_time_t timeout; /* connection timeout */
452  apr_interval_time_t acquire; /* acquire timeout when the maximum number of connections is exceeded */
458  apr_size_t elected; /* Number of times the worker was elected */
459  apr_size_t busy; /* busyness factor */
460  apr_size_t response_field_size; /* Size of proxy response buffer in bytes. */
462  apr_off_t transferred;/* Number of bytes transferred to remote */
463  apr_off_t read; /* Number of bytes read from remote */
464  void *context; /* general purpose storage */
465  unsigned int keepalive:1;
466  unsigned int disablereuse:1;
467  unsigned int is_address_reusable:1;
468  unsigned int retry_set:1;
469  unsigned int timeout_set:1;
470  unsigned int acquire_set:1;
471  unsigned int ping_timeout_set:1;
472  unsigned int conn_timeout_set:1;
473  unsigned int recv_buffer_size_set:1;
474  unsigned int io_buffer_size_set:1;
475  unsigned int keepalive_set:1;
476  unsigned int disablereuse_set:1;
477  unsigned int was_malloced:1;
478  unsigned int is_name_matchable:1;
479  unsigned int response_field_size_set:1;
481 
482 #define ALIGNED_PROXY_WORKER_SHARED_SIZE (APR_ALIGN_DEFAULT(sizeof(proxy_worker_shared)))
483 
484 /* Worker configuration */
485 struct proxy_worker {
486  proxy_hashes hash; /* hash of worker name */
487  unsigned int local_status; /* status of per-process worker */
488  proxy_conn_pool *cp; /* Connection pool to use */
489  proxy_worker_shared *s; /* Shared data */
490  proxy_balancer *balancer; /* which balancer am I in? */
491 #if APR_HAS_THREADS
492  apr_thread_mutex_t *tmutex; /* Thread lock for updating address cache */
493 #endif
494  void *context; /* general purpose storage */
495  ap_conf_vector_t *section_config; /* <Proxy>-section wherein defined */
496 };
497 
498 /* default to health check every 30 seconds */
499 #define HCHECK_WATHCHDOG_DEFAULT_INTERVAL (30)
500 
501 /*
502  * Time to wait (in microseconds) to find out if more data is currently
503  * available at the backend.
504  */
505 #define PROXY_FLUSH_WAIT 10000
506 
507 typedef struct {
508  char sticky_path[PROXY_BALANCER_MAX_STICKY_SIZE]; /* URL sticky session identifier */
509  char sticky[PROXY_BALANCER_MAX_STICKY_SIZE]; /* sticky session identifier */
510  char lbpname[PROXY_MAX_PROVIDER_NAME_SIZE]; /* lbmethod provider name */
511  char nonce[APR_UUID_FORMATTED_LENGTH + 1];
516  apr_interval_time_t timeout; /* Timeout for waiting on free connection */
517  apr_time_t wupdated; /* timestamp of last change to workers list */
518  int max_attempts; /* Number of attempts before failing */
519  int index; /* shm array index */
521  unsigned int sticky_force:1; /* Disable failover for sticky sessions */
522  unsigned int scolonsep:1; /* true if ';' seps sticky session paths */
523  unsigned int max_attempts_set:1;
524  unsigned int was_malloced:1;
525  unsigned int need_reset:1;
526  unsigned int vhosted:1;
527  unsigned int inactive:1;
528  unsigned int forcerecovery:1;
529  char sticky_separator; /* separator for sessionid/route */
530  unsigned int forcerecovery_set:1;
531  unsigned int scolonsep_set:1;
532  unsigned int sticky_force_set:1;
533  unsigned int nonce_set:1;
534  unsigned int sticky_separator_set:1;
536 
537 #define ALIGNED_PROXY_BALANCER_SHARED_SIZE (APR_ALIGN_DEFAULT(sizeof(proxy_balancer_shared)))
538 
540  apr_array_header_t *workers; /* initially configured workers */
541  apr_array_header_t *errstatuses; /* statuses to force members into error */
542  ap_slotmem_instance_t *wslot; /* worker shm data - runtime */
544  int growth; /* number of post-config workers can added */
545  int max_workers; /* maximum number of allowed workers */
547  apr_time_t wupdated; /* timestamp of last change to workers list */
549  apr_global_mutex_t *gmutex; /* global lock for updating list of workers */
550 #if APR_HAS_THREADS
551  apr_thread_mutex_t *tmutex; /* Thread lock for updating shm */
552 #endif
554  void *context; /* general purpose storage */
555  proxy_balancer_shared *s; /* Shared data */
556  int failontimeout; /* Whether to mark a member in Err if IO timeout occurs */
557  unsigned int failontimeout_set:1;
558  unsigned int growth_set:1;
559  unsigned int lbmethod_set:1;
560  ap_conf_vector_t *section_config; /* <Proxy>-section wherein defined */
561 };
562 
564  const char *name; /* name of the load balancer method*/
565  proxy_worker *(*finder)(proxy_balancer *balancer,
566  request_rec *r);
567  void *context; /* general purpose storage */
571 };
572 
573 #if APR_HAS_THREADS
574 #define PROXY_THREAD_LOCK(x) ( (x) && (x)->tmutex ? apr_thread_mutex_lock((x)->tmutex) : APR_SUCCESS)
575 #define PROXY_THREAD_UNLOCK(x) ( (x) && (x)->tmutex ? apr_thread_mutex_unlock((x)->tmutex) : APR_SUCCESS)
576 #else
577 #define PROXY_THREAD_LOCK(x) (APR_SUCCESS)
578 #define PROXY_THREAD_UNLOCK(x) (APR_SUCCESS)
579 #endif
580 
581 #define PROXY_GLOBAL_LOCK(x) ( (x) && (x)->gmutex ? apr_global_mutex_lock((x)->gmutex) : APR_SUCCESS)
582 #define PROXY_GLOBAL_UNLOCK(x) ( (x) && (x)->gmutex ? apr_global_mutex_unlock((x)->gmutex) : APR_SUCCESS)
583 
584 /* hooks */
585 
586 /* Create a set of PROXY_DECLARE(type), PROXY_DECLARE_NONSTD(type) and
587  * PROXY_DECLARE_DATA with appropriate export and import tags for the platform
588  */
589 #if !defined(WIN32)
590 #define PROXY_DECLARE(type) type
591 #define PROXY_DECLARE_NONSTD(type) type
592 #define PROXY_DECLARE_DATA
593 #elif defined(PROXY_DECLARE_STATIC)
594 #define PROXY_DECLARE(type) type __stdcall
595 #define PROXY_DECLARE_NONSTD(type) type
596 #define PROXY_DECLARE_DATA
597 #elif defined(PROXY_DECLARE_EXPORT)
598 #define PROXY_DECLARE(type) __declspec(dllexport) type __stdcall
599 #define PROXY_DECLARE_NONSTD(type) __declspec(dllexport) type
600 #define PROXY_DECLARE_DATA __declspec(dllexport)
601 #else
602 #define PROXY_DECLARE(type) __declspec(dllimport) type __stdcall
603 #define PROXY_DECLARE_NONSTD(type) __declspec(dllimport) type
604 #define PROXY_DECLARE_DATA __declspec(dllimport)
605 #endif
606 
607 /* Using PROXY_DECLARE_OPTIONAL_HOOK instead of
608  * APR_DECLARE_EXTERNAL_HOOK allows build/make_nw_export.awk
609  * to distinguish between hooks that implement
610  * proxy_hook_xx and proxy_hook_get_xx in mod_proxy.c and
611  * those which don't.
612  */
613 #define PROXY_DECLARE_OPTIONAL_HOOK APR_DECLARE_EXTERNAL_HOOK
614 
615 
616 /* These 2 are in mod_proxy.c */
619 
620 /* Following 4 from health check */
622 APR_DECLARE_OPTIONAL_FN(void, hc_select_exprs, (request_rec *, const char *));
623 APR_DECLARE_OPTIONAL_FN(int, hc_valid_expr, (request_rec *, const char *));
626  const char *, const char *, void *));
627 
628 PROXY_DECLARE_OPTIONAL_HOOK(proxy, PROXY, int, section_post_config,
629  (apr_pool_t *p, apr_pool_t *plog,
630  apr_pool_t *ptemp, server_rec *s,
631  ap_conf_vector_t *section_config))
632 
633 APR_DECLARE_EXTERNAL_HOOK(proxy, PROXY, int, scheme_handler,
635  proxy_server_conf *conf, char *url,
637 APR_DECLARE_EXTERNAL_HOOK(proxy, PROXY, int, check_trans,
638  (request_rec *r, const char *url))
639 APR_DECLARE_EXTERNAL_HOOK(proxy, PROXY, int, canon_handler,
640  (request_rec *r, char *url))
641 
642 PROXY_DECLARE_OPTIONAL_HOOK(proxy, PROXY, int, create_req,
643  (request_rec *r, request_rec *pr))
645 
646 
647 
654  (request_rec *r, proxy_conn_rec *backend))
655 
664 APR_DECLARE_EXTERNAL_HOOK(proxy, PROXY, int, pre_request,
665  (proxy_worker **worker, proxy_balancer **balancer,
666  request_rec *r, proxy_server_conf *conf, char **url))
671 APR_DECLARE_EXTERNAL_HOOK(proxy, PROXY, int, post_request,
672  (proxy_worker *worker, proxy_balancer *balancer,
673  request_rec *r, proxy_server_conf *conf))
674 
680 PROXY_DECLARE_OPTIONAL_HOOK(proxy, PROXY, int, request_status,
681  (int *status, request_rec *r))
682 
683 /* proxy_util.c */
684 
685 PROXY_DECLARE(apr_status_t) ap_proxy_strncpy(char *dst, const char *src,
686  apr_size_t dlen);
687 PROXY_DECLARE(int) ap_proxy_hex2c(const char *x);
688 PROXY_DECLARE(void) ap_proxy_c2hex(int ch, char *x);
689 PROXY_DECLARE(char *)ap_proxy_canonenc(apr_pool_t *p, const char *x, int len, enum enctype t,
690  int forcedec, int proxyreq);
691 PROXY_DECLARE(char *)ap_proxy_canon_netloc(apr_pool_t *p, char **const urlp, char **userp,
692  char **passwordp, char **hostp, apr_port_t *port);
693 PROXY_DECLARE(int) ap_proxyerror(request_rec *r, int statuscode, const char *message);
694 
704  const char *hostname, apr_sockaddr_t *addr);
705 
706 
708 /* DEPRECATED (will be replaced with ap_proxy_connect_backend */
710 /* DEPRECATED (will be replaced with ap_proxy_check_connection */
712  request_rec *r);
716  ap_conf_vector_t *per_dir_config,
717  int enable);
719 PROXY_DECLARE(const char *) ap_proxy_ssl_val(apr_pool_t *p, server_rec *s, conn_rec *c, request_rec *r, const char *var);
720 
721 /* Header mapping functions, and a typedef of their signature */
722 PROXY_DECLARE(const char *) ap_proxy_location_reverse_map(request_rec *r, proxy_dir_conf *conf, const char *url);
723 PROXY_DECLARE(const char *) ap_proxy_cookie_reverse_map(request_rec *r, proxy_dir_conf *conf, const char *str);
724 
725 #if !defined(WIN32)
726 typedef const char *(*ap_proxy_header_reverse_map_fn)(request_rec *,
727  proxy_dir_conf *, const char *);
728 #elif defined(PROXY_DECLARE_STATIC)
729 typedef const char *(__stdcall *ap_proxy_header_reverse_map_fn)(request_rec *,
730  proxy_dir_conf *, const char *);
731 #elif defined(PROXY_DECLARE_EXPORT)
732 typedef __declspec(dllexport) const char *
733  (__stdcall *ap_proxy_header_reverse_map_fn)(request_rec *,
734  proxy_dir_conf *, const char *);
735 #else
736 typedef __declspec(dllimport) const char *
737  (__stdcall *ap_proxy_header_reverse_map_fn)(request_rec *,
738  proxy_dir_conf *, const char *);
739 #endif
740 
741 
742 /* Connection pool API */
751  proxy_worker *worker);
752 
761  const proxy_worker *worker,
762  const char *upgrade);
763 
773  proxy_balancer *balancer,
774  proxy_server_conf *conf,
775  const char *url);
787  proxy_worker **worker,
788  proxy_balancer *balancer,
789  proxy_server_conf *conf,
790  const char *url,
791  int do_malloc);
792 
805  proxy_worker **worker,
806  proxy_balancer *balancer,
807  proxy_server_conf *conf,
808  const char *url,
809  int do_malloc);
810 
819  proxy_worker_shared *shm,
820  int i);
821 
830  server_rec *s,
831  apr_pool_t *p);
832 
840 
841 
851  proxy_server_conf *conf,
852  const char *url,
853  int careactive);
854 
863  proxy_balancer *balancer,
864  const char *url);
865 
877  proxy_balancer **balancer,
878  proxy_server_conf *conf,
879  const char *url,
880  const char *alias,
881  int do_malloc);
882 
892  int i);
893 
902  server_rec *s,
903  apr_pool_t *p);
904 
905 typedef int (proxy_is_best_callback_fn_t)(proxy_worker *current, proxy_worker *prev_best, void *baton);
906 
918  request_rec *r,
920  void *baton);
921 /*
922  * Needed by the lb modules.
923  */
925  (proxy_balancer *balancer,
926  request_rec *r,
928  void *baton));
929 
939  ap_slotmem_instance_t *slot,
940  proxy_worker *worker,
941  unsigned int *index);
942 
952  ap_slotmem_instance_t *slot,
953  proxy_balancer *balancer,
954  unsigned int *index);
955 
967 PROXY_DECLARE(int) ap_proxy_pre_request(proxy_worker **worker,
968  proxy_balancer **balancer,
969  request_rec *r,
970  proxy_server_conf *conf,
971  char **url);
982 PROXY_DECLARE(int) ap_proxy_post_request(proxy_worker *worker,
983  proxy_balancer *balancer,
984  request_rec *r,
985  proxy_server_conf *conf);
986 
1004  proxy_server_conf *conf,
1005  proxy_worker *worker,
1006  proxy_conn_rec *conn,
1007  apr_uri_t *uri,
1008  char **url,
1009  const char *proxyname,
1011  char *server_portstr,
1012  int server_portstr_size);
1013 
1024  (const char *proxy_function, proxy_worker *worker, server_rec *s));
1025 
1037 PROXY_DECLARE(int) ap_proxy_acquire_connection(const char *proxy_function,
1038  proxy_conn_rec **conn,
1039  proxy_worker *worker,
1040  server_rec *s);
1049 PROXY_DECLARE(int) ap_proxy_release_connection(const char *proxy_function,
1050  proxy_conn_rec *conn,
1051  server_rec *s);
1052 
1053 #define PROXY_CHECK_CONN_EMPTY (1 << 0)
1054 
1069  proxy_conn_rec *conn,
1070  server_rec *server,
1071  unsigned max_blank_lines,
1072  int flags);
1073 
1084 PROXY_DECLARE(int) ap_proxy_connect_backend(const char *proxy_function,
1085  proxy_conn_rec *conn,
1086  proxy_worker *worker,
1087  server_rec *s);
1088 
1096 PROXY_DECLARE(apr_status_t) ap_proxy_connect_uds(apr_socket_t *sock,
1097  const char *uds_path,
1098  apr_pool_t *p);
1109 PROXY_DECLARE(int) ap_proxy_connection_create(const char *proxy_function,
1110  proxy_conn_rec *conn,
1111  conn_rec *c, server_rec *s);
1112 
1122 PROXY_DECLARE(int) ap_proxy_connection_create_ex(const char *proxy_function,
1123  proxy_conn_rec *conn,
1124  request_rec *r);
1134 
1143 PROXY_DECLARE(void) ap_proxy_backend_broke(request_rec *r,
1144  apr_bucket_brigade *brigade);
1145 
1154 
1155 PROXY_DECLARE(unsigned int) ap_proxy_hashfunc(const char *str, proxy_hash_t method);
1156 
1157 
1165 PROXY_DECLARE(apr_status_t) ap_proxy_set_wstatus(char c, int set, proxy_worker *w);
1166 
1167 
1174 PROXY_DECLARE(char *) ap_proxy_parse_wstatus(apr_pool_t *p, proxy_worker *w);
1175 
1176 
1185  server_rec *s,
1186  proxy_server_conf *conf);
1187 
1188 
1200 PROXY_DECLARE(int) ap_proxy_trans_match(request_rec *r,
1201  struct proxy_alias *ent,
1202  proxy_dir_conf *dconf);
1203 
1220  apr_bucket_brigade *header_brigade,
1221  request_rec *r,
1222  proxy_conn_rec *p_conn,
1223  proxy_worker *worker,
1224  proxy_server_conf *conf,
1225  apr_uri_t *uri,
1226  char *url, char *server_portstr,
1227  char **old_cl_val,
1228  char **old_te_val);
1229 
1240  request_rec *r, proxy_conn_rec *p_conn,
1241  conn_rec *origin, apr_bucket_brigade *bb,
1242  int flush);
1243 
1244 struct proxy_tunnel_conn; /* opaque */
1245 typedef struct {
1246  request_rec *r;
1247  const char *scheme;
1251  struct proxy_tunnel_conn *client,
1252  *origin;
1254  int replied;
1256 
1266  request_rec *r, conn_rec *c_o,
1267  const char *scheme);
1268 
1277 
1286  (request_rec *r, apr_table_t *headers));
1287 
1288 
1294 
1295 #define PROXY_LBMETHOD "proxylbmethod"
1296 
1297 /* The number of dynamic workers that can be added when reconfiguring.
1298  * If this limit is reached you must stop and restart the server.
1299  */
1300 #define PROXY_DYNAMIC_BALANCER_LIMIT 16
1301 
1306 int ap_proxy_lb_workers(void);
1307 
1315 PROXY_DECLARE(int) ap_proxy_should_override(proxy_dir_conf *conf, int code);
1316 
1322 PROXY_DECLARE(apr_port_t) ap_proxy_port_of_scheme(const char *scheme);
1323 
1329 PROXY_DECLARE (const char *) ap_proxy_show_hcmethod(hcmethod_t method);
1330 
1337 PROXY_DECLARE(const char *) ap_proxy_de_socketfy(apr_pool_t *p, const char *url);
1338 
1339 /*
1340  * Transform buckets from one bucket allocator to another one by creating a
1341  * transient bucket for each data bucket and let it use the data read from
1342  * the old bucket. Metabuckets are transformed by just recreating them.
1343  * Attention: Currently only the following bucket types are handled:
1344  *
1345  * All data buckets
1346  * FLUSH
1347  * EOS
1348  *
1349  * If an other bucket type is found its type is logged as a debug message
1350  * and APR_EGENERAL is returned.
1351  *
1352  * @param r request_rec of the actual request. Used for logging purposes
1353  * @param from the bucket brigade to take the buckets from
1354  * @param to the bucket brigade to store the transformed buckets
1355  * @return apr_status_t of the operation. Either APR_SUCCESS or
1356  * APR_EGENERAL
1357  */
1359  apr_bucket_brigade *from,
1360  apr_bucket_brigade *to);
1361 
1362 /*
1363  * The flags for ap_proxy_transfer_between_connections(), where for legacy and
1364  * compatibility reasons FLUSH_EACH and FLUSH_AFTER are boolean values.
1365  */
1366 #define AP_PROXY_TRANSFER_FLUSH_EACH (0x00)
1367 #define AP_PROXY_TRANSFER_FLUSH_AFTER (0x01)
1368 #define AP_PROXY_TRANSFER_YIELD_PENDING (0x02)
1369 #define AP_PROXY_TRANSFER_YIELD_MAX_READS (0x04)
1370 
1371 /*
1372  * Sends all data that can be read non blocking from the input filter chain of
1373  * c_i and send it down the output filter chain of c_o. For reading it uses
1374  * the bucket brigade bb_i which should be created from the bucket allocator
1375  * associated with c_i. For sending through the output filter chain it uses
1376  * the bucket brigade bb_o which should be created from the bucket allocator
1377  * associated with c_o. In order to get the buckets from bb_i to bb_o
1378  * ap_proxy_buckets_lifetime_transform is used.
1379  *
1380  * @param r request_rec of the actual request. Used for logging purposes
1381  * @param c_i inbound connection conn_rec
1382  * @param c_o outbound connection conn_rec
1383  * @param bb_i bucket brigade for pulling data from the inbound connection
1384  * @param bb_o bucket brigade for sending data through the outbound connection
1385  * @param name string for logging from where data was pulled
1386  * @param sent if not NULL will be set to 1 if data was sent through c_o
1387  * @param bsize maximum amount of data pulled in one iteration from c_i
1388  * @param flags AP_PROXY_TRANSFER_* bitmask
1389  * @return apr_status_t of the operation. Could be any error returned from
1390  * either the input filter chain of c_i or the output filter chain
1391  * of c_o, APR_EPIPE if the outgoing connection was aborted, or
1392  * APR_INCOMPLETE if AP_PROXY_TRANSFER_YIELD_PENDING was set and
1393  * the output stack gets full before the input stack is exhausted.
1394  */
1396  request_rec *r,
1397  conn_rec *c_i,
1398  conn_rec *c_o,
1399  apr_bucket_brigade *bb_i,
1400  apr_bucket_brigade *bb_o,
1401  const char *name,
1402  int *sent,
1403  apr_off_t bsize,
1404  int flags);
1405 
1407 
1408 #endif /*MOD_PROXY_H*/
1409 
#define socket
Definition: apr_arch_os2calls.h:41
int ap_proxy_trans_match(request_rec *r, struct proxy_alias *ent, proxy_dir_conf *dconf)
int ap_proxy_connect_to_backend(apr_socket_t **, const char *, apr_sockaddr_t *, const char *, proxy_server_conf *, request_rec *)
proxy_worker_shared * s
Definition: mod_proxy.h:489
unsigned int fnv
Definition: mod_proxy.h:408
int ap_proxy_tunnel_run(proxy_tunnel_rec *tunnel)
size_t apr_size_t
Definition: apr.h:393
int ap_proxy_retry_worker(const char *proxy_function, proxy_worker *worker, server_rec *s)
apr_pool_t * pool
Definition: mod_proxy.h:272
proxy_balancer * ap_proxy_get_balancer(apr_pool_t *p, proxy_server_conf *conf, const char *url, int careactive)
int min
Definition: mod_proxy.h:429
proxy_worker proxy_server_conf char const char apr_port_t proxyport
Definition: mod_proxy.h:636
Definition: mod_proxy.h:168
unsigned int growth_set
Definition: mod_proxy.h:558
int hmax
Definition: mod_proxy.h:431
apr_sockaddr_t * addr
Definition: mod_proxy.h:274
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)
int ap_proxy_ssl_enable(conn_rec *c)
void hc_show_exprs(request_rec *)
APR Network library.
APR UUID library.
apr_size_t recv_buffer_size
Definition: mod_proxy.h:171
struct ap_slotmem_instance_t ap_slotmem_instance_t
Definition: ap_slotmem.h:75
void hc_select_exprs(request_rec *, const char *)
Apache Configuration.
ap_regex_t * regex
Definition: mod_proxy.h:132
int ap_proxy_checkproxyblock(request_rec *r, proxy_server_conf *conf, const char *hostname, apr_sockaddr_t *addr)
ap_regex_t * regexp
Definition: mod_proxy.h:118
Definition: mod_proxy.h:1245
char * ap_proxy_worker_name(apr_pool_t *p, proxy_worker *worker)
Definition: apr_arch_thread_mutex.h:28
apr_port_t ap_proxy_port_of_scheme(const char *scheme)
const char * protocol
Definition: mod_proxy.h:116
Definition: apr_tables.h:62
const char * name
Definition: mod_proxy.h:145
Definition: mod_proxy.h:79
proxy_worker * worker
Definition: mod_proxy.h:271
int lbfactor
Definition: mod_proxy.h:428
Definition: mod_proxy.h:82
char flag
Definition: mod_proxy.h:90
apr_port_t port
Definition: mod_proxy.h:280
struct apr_reslist_t apr_reslist_t
Definition: apr_reslist.h:42
Definition: mod_proxy.h:167
struct proxy_tunnel_conn * origin
Definition: mod_proxy.h:1251
ap_conf_vector_t * section_config
Definition: mod_proxy.h:560
int ap_proxy_connection_create(const char *proxy_function, proxy_conn_rec *conn, conn_rec *c, server_rec *s)
Definition: mod_proxy.h:294
Definition: mod_proxy.h:144
apr_time_t wupdated
Definition: mod_proxy.h:517
float cache_completion
Definition: mod_proxy.h:295
int bgrowth
Definition: mod_proxy.h:164
proxy_balancer_shared * ap_proxy_find_balancershm(ap_slotmem_provider_t *storage, ap_slotmem_instance_t *slot, proxy_balancer *balancer, unsigned int *index)
struct apr_bucket_alloc_t apr_bucket_alloc_t
Definition: apr_buckets.h:123
Definition: mod_proxy.h:442
request_rec * r
Definition: mod_proxy.h:653
proxy_conn_pool * cp
Definition: mod_proxy.h:488
const char * ssl_hostname
Definition: mod_proxy.h:287
const char * name
Definition: mod_proxy.h:564
struct apr_sockaddr_t * hostaddr
Definition: mod_proxy.h:140
Apache Provider API.
apr_interval_time_t interval
Definition: mod_proxy.h:455
const char * uds_path
Definition: mod_proxy.h:286
proxy_hashes hash
Definition: mod_proxy.h:438
Definition: mod_proxy.h:75
proxy_balancer * balancer
Definition: mod_proxy.h:134
ap_slotmem_provider_t * storage
Definition: mod_proxy.h:188
apr_array_header_t * cookie_domains
Definition: mod_proxy.h:264
proxy_server_conf * sconf
Definition: mod_proxy.h:553
int ap_proxy_post_request(proxy_worker *worker, proxy_balancer *balancer, request_rec *r, proxy_server_conf *conf)
int replied
Definition: mod_proxy.h:1254
apr_interval_time_t async_idle_timeout
Definition: mod_proxy.h:253
apr_sockaddr_t * addr
Definition: mod_proxy.h:302
int index
Definition: mod_proxy.h:519
Definition: mod_proxy.h:507
unsigned int ap_proxy_hashfunc(const char *str, proxy_hash_t method)
proxy_worker * reverse
Definition: mod_proxy.h:158
apr_array_header_t * cookie_paths
Definition: mod_proxy.h:263
Definition: mod_proxy.h:166
apr_interval_time_t timeout
Definition: mod_proxy.h:1250
const char * domain
Definition: mod_proxy.h:159
apr_uint32_t flags
Definition: mod_proxy.h:279
Definition: mod_proxy.h:261
const char * scheme
Definition: mod_proxy.h:1247
apr_status_t ap_proxy_initialize_worker(proxy_worker *worker, server_rec *s, apr_pool_t *p)
int ap_proxy_worker_can_upgrade(apr_pool_t *p, const proxy_worker *worker, const char *upgrade)
proxy_hash_t
Definition: mod_proxy.h:1153
int ap_proxy_connect_backend(const char *proxy_function, proxy_conn_rec *conn, proxy_worker *worker, server_rec *s)
Definition: mod_proxy.h:406
proxy_worker * ap_proxy_balancer_get_best_worker(proxy_balancer *balancer, request_rec *r, proxy_is_best_callback_fn_t *is_best, void *baton)
const char * real
Definition: mod_proxy.h:130
APR Standard Headers Support.
apr_status_t ap_proxy_connect_uds(apr_socket_t *sock, const char *uds_path, apr_pool_t *p)
apr_size_t busy
Definition: mod_proxy.h:459
void * context
Definition: mod_proxy.h:464
apr_interval_time_t timeout
Definition: mod_proxy.h:516
apr_size_t io_buffer_size
Definition: mod_proxy.h:457
CORE HTTP Daemon.
int fails
Definition: mod_proxy.h:436
apr_array_header_t * errstatuses
Definition: mod_proxy.h:541
char * name
Definition: mod_proxy.h:138
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_is_socket_connected(apr_socket_t *socket)
Apache connection library.
int ap_proxy_connection_create_ex(const char *proxy_function, proxy_conn_rec *conn, request_rec *r)
Utilities for EBCDIC conversion.
int ap_proxy_ssl_disable(conn_rec *c)
proxy_balancer_method * lbmethod
Definition: mod_proxy.h:548
PROXY_DECLARE_DATA proxy_hcmethods_t proxy_hcmethods[]
int use_regex
Definition: mod_proxy.h:120
char * ap_proxy_canonenc(apr_pool_t *p, const char *x, int len, enum enctype t, int forcedec, int proxyreq)
const char const char * uri
Definition: mod_dav.h:631
detach_backend
Definition: mod_proxy.h:653
#define PROXY_WORKER_MAX_ROUTE_SIZE
Definition: mod_proxy.h:369
Definition: apr_buckets.h:258
const char apr_size_t dlen
Definition: mod_proxy.h:685
APR Thread Mutex Routines.
void * context
Definition: mod_proxy.h:567
Definition: mod_proxy.h:114
Definition: mod_proxy.h:79
module PROXY_DECLARE_DATA proxy_module
apr_int64_t apr_interval_time_t
Definition: apr_time.h:55
apr_time_t updated
Definition: mod_proxy.h:446
Definition: mod_proxy.h:75
Structure to store things which are per connection.
Definition: httpd.h:1183
int flush_wait
Definition: mod_proxy.h:432
APR-UTIL Resource List Routines.
#define APR_UUID_FORMATTED_LENGTH
Definition: apr_uuid.h:46
int( proxy_is_best_callback_fn_t)(proxy_worker *current, proxy_worker *prev_best, void *baton)
Definition: mod_proxy.h:905
apr_status_t(* updatelbstatus)(proxy_balancer *balancer, proxy_worker *elected, server_rec *s)
Definition: mod_proxy.h:570
Virtual Host package.
APR-UTIL registration of functions exported by modules.
int fixups(request_rec *r)
apr_size_t response_field_size
Definition: mod_proxy.h:460
Symbol export macros and hook functions.
#define PROXY_MAX_PROVIDER_NAME_SIZE
Definition: mod_proxy.h:385
apr_status_t(* reset)(proxy_balancer *balancer, server_rec *s)
Definition: mod_proxy.h:568
#define PROXY_DECLARE_OPTIONAL_HOOK
Definition: mod_proxy.h:613
char * ap_proxy_parse_wstatus(apr_pool_t *p, proxy_worker *w)
apr_array_header_t * cookie_domains
Definition: mod_proxy.h:223
apr_interval_time_t timeout
Definition: mod_proxy.h:174
const char * set_worker_hc_param(apr_pool_t *, server_rec *, proxy_worker *, const char *, const char *, void *)
Definition: mod_proxy.h:149
apr_array_header_t * aliases
Definition: mod_proxy.h:152
#define PROXY_DECLARE_DATA
Definition: mod_proxy.h:592
apr_pool_t * pool
Definition: mod_proxy.h:161
Definition: mod_proxy.h:75
Definition: apr_arch_global_mutex.h:23
signed char interpolate_env
Definition: mod_proxy.h:225
int ap_proxy_conn_is_https(conn_rec *c)
apr_time_t wupdated
Definition: mod_proxy.h:547
const char *(* ap_proxy_header_reverse_map_fn)(request_rec *, proxy_dir_conf *, const char *)
Definition: mod_proxy.h:726
int req
Definition: mod_proxy.h:162
Apache Logging library.
apr_array_header_t * sec_proxy
Definition: mod_proxy.h:151
unsigned int local_status
Definition: mod_proxy.h:487
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)
const char * hostname
Definition: mod_proxy.h:117
unsigned int status
Definition: mod_proxy.h:439
apr_int64_t apr_time_t
Definition: apr_time.h:45
void * forward
Definition: mod_proxy.h:278
#define PROXY_RFC1035_HOSTNAME_SIZE
Definition: mod_proxy.h:378
Command line options.
APR-UTIL date routines.
int ap_proxy_lb_workers(void)
Definition: ap_slotmem.h:86
APR memory allocation.
APR Global Locking Routines.
int ap_proxy_pre_http_request(conn_rec *c, request_rec *r)
apr_bucket_brigade * bb
Definition: mod_dav.h:555
apr_size_t io_buffer_size
Definition: mod_proxy.h:172
const char * ap_proxy_show_hcmethod(hcmethod_t method)
apr_size_t read_buf_size
Definition: mod_proxy.h:1253
Definition: mod_proxy.h:137
HTTP Daemon routines.
int ap_proxy_acquire_connection(const char *proxy_function, proxy_conn_rec **conn, proxy_worker *worker, server_rec *s)
proxy_hashes hash
Definition: mod_proxy.h:486
Apache hook functions.
Definition: mod_proxy.h:1153
#define PROXY_BALANCER_MAX_ROUTE_SIZE
Definition: mod_proxy.h:370
unsigned int flags
Definition: mod_proxy.h:133
A structure to store information for each virtual server.
Definition: httpd.h:1370
void * context
Definition: mod_proxy.h:494
apr_global_mutex_t * mutex
Definition: mod_proxy.h:186
apr_time_t error_time
Definition: mod_proxy.h:447
Definition: mod_proxy.h:75
const char * p
Definition: mod_proxy.h:210
int growth
Definition: mod_proxy.h:544
int
Definition: mod_proxy.h:653
apr_array_header_t * pfds
Definition: mod_proxy.h:1249
int smax
Definition: mod_proxy.h:430
apr_array_header_t * raliases
Definition: mod_proxy.h:262
apr_interval_time_t async_delay
Definition: mod_proxy.h:252
Definition: mod_proxy.h:267
Definition: mod_proxy.h:412
int max_attempts
Definition: mod_proxy.h:518
apr_off_t read
Definition: mod_proxy.h:463
#define APR_DECLARE_EXTERNAL_HOOK(ns, link, ret, name, args)
Definition: apr_hooks.h:118
Definition: apr_arch_networkio.h:37
int ap_proxy_clear_connection(request_rec *r, apr_table_t *headers)
Definition: mod_proxy.h:176
int hc_valid_expr(request_rec *, const char *)
int max_balancers
Definition: mod_proxy.h:163
apr_pollset_t * pollset
Definition: mod_proxy.h:1248
const char * ap_proxy_de_socketfy(apr_pool_t *p, const char *url)
struct in_addr addr mask
Definition: mod_proxy.h:139
apr_interval_time_t ttl
Definition: mod_proxy.h:448
proxy_balancer_shared * s
Definition: mod_proxy.h:555
#define PROXY_WORKER_MAX_NAME_SIZE
Definition: mod_proxy.h:371
Definition: mod_proxy.h:539
const char * ap_proxy_ssl_val(apr_pool_t *p, server_rec *s, conn_rec *c, request_rec *r, const char *var)
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)
Definition: ap_regex.h:111
apr_socket_t * sock
Definition: mod_proxy.h:276
apr_reslist_t * res
Definition: mod_proxy.h:303
request_rec * r
Definition: mod_proxy.h:269
const char * name
Definition: mod_proxy.h:91
APR-UTIL Buckets/Bucket Brigades.
long maxfwd
Definition: mod_proxy.h:173
Definition: mod_proxy.h:129
proxy_worker proxy_server_conf char * url
Definition: mod_proxy.h:636
APR FNMatch Functions.
proxy_worker_shared * ap_proxy_find_workershm(ap_slotmem_provider_t *storage, ap_slotmem_instance_t *slot, proxy_worker *worker, unsigned int *index)
#define PROXY_WORKER_MAX_SECRET_SIZE
Definition: mod_proxy.h:376
unsigned int apr_uint32_t
Definition: apr.h:347
hcmethod_t
Definition: mod_proxy.h:78
APR Platform Definitions.
apr_array_header_t * cookie_paths
Definition: mod_proxy.h:222
apr_port_t port
Definition: mod_proxy.h:461
APR MD5 Routines.
APR general purpose library routines.
#define PROXY_WORKER_MAX_HOSTNAME_SIZE
Definition: mod_proxy.h:373
APR-UTIL string matching routines.
#define PROXY_BALANCER_MAX_STICKY_SIZE
Definition: mod_proxy.h:375
int ap_proxyerror(request_rec *r, int statuscode, const char *message)
void * context
Definition: mod_proxy.h:554
const char * ap_proxy_location_reverse_map(request_rec *r, proxy_dir_conf *conf, const char *url)
apr_status_t ap_proxy_buckets_lifetime_transform(request_rec *r, apr_bucket_brigade *from, apr_bucket_brigade *to)
struct apr_sockaddr_t * addr
Definition: mod_proxy.h:146
int ap_proxy_release_connection(const char *proxy_function, proxy_conn_rec *conn, server_rec *s)
void ap_proxy_backend_broke(request_rec *r, apr_bucket_brigade *brigade)
apr_interval_time_t timeout
Definition: mod_proxy.h:451
Definition: mod_proxy.h:75
void ap_proxy_c2hex(int ch, char *x)
HTTP protocol handling.
int pcount
Definition: mod_proxy.h:435
Definition: apr_uri.h:85
Definition: mod_proxy.h:177
apr_array_header_t * workers
Definition: mod_proxy.h:155
apr_pool_t * p
#define PROXY_BALANCER_MAX_NAME_SIZE
Definition: mod_proxy.h:372
ap_slotmem_provider_t * storage
Definition: mod_proxy.h:543
apr_array_header_t * error_override_codes
Definition: mod_proxy.h:250
proxy_conn_rec * conn
Definition: mod_proxy.h:304
int ap_proxy_ssl_engine(conn_rec *c, ap_conf_vector_t *per_dir_config, int enable)
Apache Mutex support library.
char * ap_proxy_canon_netloc(apr_pool_t *p, char **const urlp, char **userp, char **passwordp, char **hostp, apr_port_t *port)
int content_length
Definition: mod_proxy.h:296
apr_array_header_t * workers
Definition: mod_proxy.h:540
int implemented
Definition: mod_proxy.h:85
apr_interval_time_t acquire
Definition: mod_proxy.h:452
apr_global_mutex_t * gmutex
Definition: mod_proxy.h:549
apr_off_t transferred
Definition: mod_proxy.h:462
Definition: mod_proxy.h:1153
apr_sockaddr_t * source_address
Definition: mod_proxy.h:185
apr_pool_t * scpool
Definition: mod_proxy.h:275
apr_pool_t * dns_pool
Definition: mod_proxy.h:305
struct proxy_alias * alias
Definition: mod_proxy.h:226
Apache Request library.
apr_status_t ap_proxy_sync_balancer(proxy_balancer *b, server_rec *s, proxy_server_conf *conf)
A structure that represents the current request.
Definition: httpd.h:860
int retries
Definition: mod_proxy.h:426
int fcount
Definition: mod_proxy.h:437
Apache filter library.
const char * hostname
Definition: mod_proxy.h:273
APR Strings library.
proxy_worker * forward
Definition: mod_proxy.h:157
apr_status_t ap_proxy_tunnel_create(proxy_tunnel_rec **tunnel, request_rec *r, conn_rec *c_o, const char *scheme)
enctype
Definition: mod_proxy.h:74
apr_port_t port
Definition: mod_proxy.h:121
int passes
Definition: mod_proxy.h:434
int lbset
Definition: mod_proxy.h:425
dav_buffer const char * str
Definition: mod_dav.h:464
int ap_proxy_should_override(proxy_dir_conf *conf, int code)
apr_interval_time_t retry
Definition: mod_proxy.h:450
const char * id
Definition: mod_proxy.h:160
int status
Definition: mod_dav.h:141
#define PROXY_DECLARE(type)
Definition: mod_proxy.h:590
int ap_proxy_connection_reusable(proxy_conn_rec *conn)
char * name
Definition: mod_proxy.h:84
apr_interval_time_t ping_timeout
Definition: mod_proxy.h:453
struct apr_table_t apr_table_t
Definition: apr_tables.h:56
unsigned int bit
Definition: mod_proxy.h:89
#define PROXY_BALANCER_MAX_HOSTNAME_SIZE
Definition: mod_proxy.h:374
int(* matcher)(struct dirconn_entry *This, request_rec *r)
Definition: mod_proxy.h:141
const char * name
Definition: mod_dav.h:805
int ap_proxy_hex2c(const char *x)
Definition: mod_proxy.h:182
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)
const char * scheme
Definition: mod_proxy.h:115
apr_thread_mutex_t * tmutex
Definition: mod_proxy.h:551
Definition: mod_proxy.h:300
apr_status_t(* age)(proxy_balancer *balancer, server_rec *s)
Definition: mod_proxy.h:569
ap_slotmem_instance_t * bslot
Definition: mod_proxy.h:187
int index
Definition: mod_proxy.h:433
apr_bucket_brigade * tmp_bb
Definition: mod_proxy.h:288
struct apr_pool_t apr_pool_t
Definition: apr_pools.h:60
Definition: mod_proxy.h:79
conn_rec * connection
Definition: mod_proxy.h:268
int ap_proxy_pre_request(proxy_worker **worker, proxy_balancer **balancer, request_rec *r, proxy_server_conf *conf, char **url)
unsigned int lbmethod_set
Definition: mod_proxy.h:559
Definition: http_config.h:355
const char * ap_proxy_cookie_reverse_map(request_rec *r, proxy_dir_conf *conf, const char *str)
hcmethod_t method
Definition: mod_proxy.h:83
int apr_status_t
Definition: apr_errno.h:44
Definition: mod_proxy.h:79
#define APR_DECLARE_OPTIONAL_FN(ret, name, args)
Definition: apr_optional.h:50
proxy_hashes hash
Definition: mod_proxy.h:520
Definition: mod_proxy.h:79
Definition: mod_proxy.h:485
apr_status_t ap_proxy_initialize_balancer(proxy_balancer *balancer, server_rec *s, apr_pool_t *p)
int failontimeout
Definition: mod_proxy.h:556
apr_pool_t * pool
Definition: mod_proxy.h:301
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)
#define PROXY_WORKER_MAX_SCHEME_SIZE
Definition: mod_proxy.h:368
const char * fake
Definition: mod_proxy.h:131
APR-UTIL URI Routines.
apr_uint16_t apr_port_t
Definition: apr_network_io.h:257
ap_conf_vector_t * section_config
Definition: mod_proxy.h:495
Definition: mod_proxy.h:88
void * data
Definition: mod_proxy.h:277
apr_thread_mutex_t * tmutex
Definition: mod_proxy.h:492
int lbstatus
Definition: mod_proxy.h:427
apr_array_header_t * balancers
Definition: mod_proxy.h:156
Definition: mod_proxy.h:79
proxy_worker proxy_server_conf * conf
Definition: mod_proxy.h:636
apr_size_t recv_buffer_size
Definition: mod_proxy.h:456
Definition: mod_proxy.h:79
Definition: mod_proxy.h:209
unsigned int def
Definition: mod_proxy.h:407
struct ap_conf_vector_t ap_conf_vector_t
Definition: http_config.h:519
hcmethod_t method
Definition: mod_proxy.h:445
apr_interval_time_t conn_timeout
Definition: mod_proxy.h:454
proxy_worker * worker
Definition: mod_proxy.h:636
apr_status_t ap_proxy_ssl_connection_cleanup(proxy_conn_rec *conn, request_rec *r)
apr_array_header_t * raliases
Definition: mod_proxy.h:221
apr_array_header_t * proxies
Definition: mod_proxy.h:150
Definition: mod_proxy.h:441
dav_resource int dav_locktoken dav_response int flags
Definition: mod_dav.h:1452
apr_array_header_t * refs
Definition: mod_proxy.h:245
proxy_balancer * balancer
Definition: mod_proxy.h:490
char * ap_proxy_update_balancer(apr_pool_t *p, proxy_balancer *balancer, const char *url)
ap_regex_t * r
Definition: mod_proxy.h:211
int max_workers
Definition: mod_proxy.h:545
Definition: mod_proxy.h:1153
apr_status_t ap_proxy_share_worker(proxy_worker *worker, proxy_worker_shared *shm, int i)
PROXY
Definition: mod_proxy.h:653
apr_status_t ap_proxy_set_wstatus(char c, int set, proxy_worker *w)
const char * creds
Definition: mod_proxy.h:119
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)
apr_status_t ap_proxy_share_balancer(proxy_balancer *balancer, proxy_balancer_shared *shm, int i)
int ap_proxy_valid_balancer_name(char *name, int i)
Definition: mod_proxy.h:563
unsigned int failontimeout_set
Definition: mod_proxy.h:557
proxy_worker * proxy_balancer_get_best_worker(proxy_balancer *balancer, request_rec *r, proxy_is_best_callback_fn_t *is_best, void *baton)
apr_array_header_t * noproxies
Definition: mod_proxy.h:153
off_t apr_off_t
Definition: apr.h:395
Memory Slot Extension Storage Module for Apache.
proxy_hashes hash
Definition: mod_proxy.h:546
proxy_worker * ap_proxy_get_worker(apr_pool_t *p, proxy_balancer *balancer, proxy_server_conf *conf, const char *url)
ap_slotmem_instance_t * wslot
Definition: mod_proxy.h:542
proxy_worker proxy_server_conf char const char * proxyhost
Definition: mod_proxy.h:636
Definition: apr_network_io.h:266
apr_array_header_t * dirconn
Definition: mod_proxy.h:154
signed char p_is_fnmatch
Definition: mod_proxy.h:224
Definition: mod_proxy.h:79
Definition: mod_proxy.h:181
char sticky_separator
Definition: mod_proxy.h:529
PROXY_DECLARE_DATA proxy_wstat_t proxy_wstat_tbl[]
apr_status_t ap_proxy_check_connection(const char *scheme, proxy_conn_rec *conn, server_rec *server, unsigned max_blank_lines, int flags)
request_rec * r
Definition: mod_proxy.h:1246
const char * src
Definition: mod_proxy.h:685
Definition: apr_arch_poll_private.h:119
apr_size_t elected
Definition: mod_proxy.h:458