blob: 2cdf6895cbd38ac629eff35c65e520b8986a1de1 [file] [log] [blame]
Willy Tarreaubaaee002006-06-26 02:48:02 +02001/*
2 include/types/proxy.h
3 This file defines everything related to proxies.
4
Willy Tarreau7f062c42009-03-05 18:43:00 +01005 Copyright (C) 2000-2009 Willy Tarreau - w@1wt.eu
Willy Tarreaubaaee002006-06-26 02:48:02 +02006
7 This library is free software; you can redistribute it and/or
8 modify it under the terms of the GNU Lesser General Public
9 License as published by the Free Software Foundation, version 2.1
10 exclusively.
11
12 This library is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 Lesser General Public License for more details.
16
17 You should have received a copy of the GNU Lesser General Public
18 License along with this library; if not, write to the Free Software
19 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20*/
21
22#ifndef _TYPES_PROXY_H
23#define _TYPES_PROXY_H
24
Willy Tarreau7d677682006-10-15 23:18:47 +020025#include <sys/types.h>
26#include <sys/socket.h>
Willy Tarreaubaaee002006-06-26 02:48:02 +020027#include <netinet/in.h>
28#include <arpa/inet.h>
Willy Tarreaubaaee002006-06-26 02:48:02 +020029
Willy Tarreau2dd0d472006-06-29 17:53:05 +020030#include <common/appsession.h>
Willy Tarreaue3ba5f02006-06-29 18:54:54 +020031#include <common/config.h>
Willy Tarreaub625a082007-11-26 01:15:43 +010032#include <common/ebtree.h>
Willy Tarreau2dd0d472006-06-29 17:53:05 +020033#include <common/mini-clist.h>
34#include <common/regex.h>
Willy Tarreau51041c72007-09-09 21:56:53 +020035#include <common/sessionhash.h>
Willy Tarreaua8cff1d2007-04-09 16:10:57 +020036#include <common/tools.h>
Willy Tarreaubaaee002006-06-26 02:48:02 +020037
Willy Tarreaueb0c6142007-05-07 00:53:22 +020038#include <types/acl.h>
Willy Tarreaubaaee002006-06-26 02:48:02 +020039#include <types/buffers.h>
Willy Tarreau7f062c42009-03-05 18:43:00 +010040#include <types/freq_ctr.h>
Willy Tarreau0f772532006-12-23 20:51:41 +010041#include <types/httperr.h>
Robert Tsai81ae1952007-12-05 10:47:29 +010042#include <types/log.h>
Willy Tarreaudd815982007-10-16 12:25:14 +020043#include <types/protocols.h>
Willy Tarreaubaaee002006-06-26 02:48:02 +020044#include <types/session.h>
45#include <types/server.h>
46
47/* values for proxy->state */
48#define PR_STNEW 0
49#define PR_STIDLE 1
50#define PR_STRUN 2
51#define PR_STSTOPPED 3
52#define PR_STPAUSED 4
53#define PR_STERROR 5
54
55/* values for proxy->mode */
56#define PR_MODE_TCP 0
57#define PR_MODE_HTTP 1
58#define PR_MODE_HEALTH 2
59
Willy Tarreau20697042007-11-15 23:26:18 +010060/* values for proxy->lbprm.map.state */
Willy Tarreau5af3a692007-07-24 23:32:33 +020061#define PR_MAP_RECALC (1 << 0)
62
Willy Tarreau977b8e42006-12-29 14:19:17 +010063/* flag values for proxy->cap. This is a bitmask of capabilities supported by the proxy */
64#define PR_CAP_NONE 0x0000
65#define PR_CAP_FE 0x0001
66#define PR_CAP_BE 0x0002
67#define PR_CAP_RS 0x0004
68#define PR_CAP_LISTEN (PR_CAP_FE|PR_CAP_BE|PR_CAP_RS)
69
Willy Tarreau31682232007-11-29 15:38:04 +010070/* bits for proxy->options */
71#define PR_O_REDISP 0x00000001 /* allow reconnection to dispatch in case of errors */
72#define PR_O_TRANSP 0x00000002 /* transparent mode : use original DEST as dispatch */
73#define PR_O_COOK_RW 0x00000004 /* rewrite all direct cookies with the right serverid */
74#define PR_O_COOK_IND 0x00000008 /* keep only indirect cookies */
75#define PR_O_COOK_INS 0x00000010 /* insert cookies when not accessing a server directly */
76#define PR_O_COOK_PFX 0x00000020 /* rewrite all cookies by prefixing the right serverid */
77#define PR_O_COOK_ANY (PR_O_COOK_RW | PR_O_COOK_IND | PR_O_COOK_INS | PR_O_COOK_PFX)
78#define PR_O_SMTP_CHK 0x00000040 /* use SMTP EHLO check for server health - pvandijk@vision6.com.au */
79#define PR_O_KEEPALIVE 0x00000080 /* follow keep-alive sessions */
80#define PR_O_FWDFOR 0x00000100 /* insert x-forwarded-for with client address */
81#define PR_O_BIND_SRC 0x00000200 /* bind to a specific source address when connect()ing */
82#define PR_O_NULLNOLOG 0x00000400 /* a connect without request will not be logged */
83#define PR_O_COOK_NOC 0x00000800 /* add a 'Cache-control' header with the cookie */
84#define PR_O_COOK_POST 0x00001000 /* don't insert cookies for requests other than a POST */
85#define PR_O_HTTP_CHK 0x00002000 /* use HTTP 'OPTIONS' method to check server health */
86#define PR_O_PERSIST 0x00004000 /* server persistence stays effective even when server is down */
87#define PR_O_LOGASAP 0x00008000 /* log as soon as possible, without waiting for the session to complete */
88#define PR_O_HTTP_CLOSE 0x00010000 /* force 'connection: close' in both directions */
89#define PR_O_CHK_CACHE 0x00020000 /* require examination of cacheability of the 'set-cookie' field */
90#define PR_O_TCP_CLI_KA 0x00040000 /* enable TCP keep-alive on client-side sessions */
91#define PR_O_TCP_SRV_KA 0x00080000 /* enable TCP keep-alive on server-side sessions */
92#define PR_O_USE_ALL_BK 0x00100000 /* load-balance between backup servers */
93#define PR_O_FORCE_CLO 0x00200000 /* enforce the connection close immediately after server response */
94#define PR_O_TCP_NOLING 0x00400000 /* disable lingering on client and server connections */
95#define PR_O_ABRT_CLOSE 0x00800000 /* immediately abort request when client closes */
96#define PR_O_SSL3_CHK 0x01000000 /* use SSLv3 CLIENT_HELLO packets for server health */
97
98/* TPXY: exclusive values */
99#define PR_O_TPXY_ADDR 0x02000000 /* bind to this non-local address when connect()ing */
100#define PR_O_TPXY_CIP 0x04000000 /* bind to the client's IP address when connect()ing */
101#define PR_O_TPXY_CLI 0x06000000 /* bind to the client's IP+port when connect()ing */
102#define PR_O_TPXY_MASK 0x06000000 /* bind to a non-local address when connect()ing */
103
Willy Tarreaub55932d2009-08-16 13:20:32 +0200104/* unused : tcpsplice 0x08000000 */
Willy Tarreau31682232007-11-29 15:38:04 +0100105#define PR_O_CONTSTATS 0x10000000 /* continous counters */
Alexandre Cassen5eb1a902007-11-29 15:43:32 +0100106#define PR_O_HTTP_PROXY 0x20000000 /* Enable session to use HTTP proxy operations */
Willy Tarreau48494c02007-11-30 10:41:39 +0100107#define PR_O_DISABLE404 0x40000000 /* Disable a server on a 404 response to a health-check */
Maik Broemme2850cb42009-04-17 18:53:21 +0200108#define PR_O_ORGTO 0x80000000 /* insert x-original-to with destination address */
109/* unused: 0x80000000 - now used by PR_O_ORGTO */
Willy Tarreau66aa61f2009-01-18 21:44:07 +0100110
111/* bits for proxy->options2 */
112#define PR_O2_SPLIC_REQ 0x00000001 /* transfer requests using linux kernel's splice() */
113#define PR_O2_SPLIC_RTR 0x00000002 /* transfer responses using linux kernel's splice() */
114#define PR_O2_SPLIC_AUT 0x00000004 /* automatically use linux kernel's splice() */
115#define PR_O2_SPLIC_ANY (PR_O2_SPLIC_REQ|PR_O2_SPLIC_RTR|PR_O2_SPLIC_AUT)
Willy Tarreau32a4ec02009-04-02 11:35:18 +0200116#define PR_O2_REQBUG_OK 0x00000008 /* let buggy requests pass through */
117#define PR_O2_RSPBUG_OK 0x00000010 /* let buggy responses pass through */
Willy Tarreauc9bd0cc2009-05-10 11:57:02 +0200118#define PR_O2_NOLOGNORM 0x00000020 /* don't log normal traffic, only errors and retries */
119#define PR_O2_LOGERRORS 0x00000040 /* log errors and retries at level LOG_ERR */
Willy Tarreau9ea05a72009-06-14 12:07:01 +0200120#define PR_O2_SMARTACC 0x00000080 /* don't immediately ACK request after accept */
Willy Tarreaud88edf22009-06-14 15:48:17 +0200121#define PR_O2_SMARTCON 0x00000100 /* don't immediately send empty ACK after connect */
Emeric Brun647caf12009-06-30 17:57:00 +0200122#define PR_O2_RDPC_PRST 0x00000200 /* Actvate rdp cookie analyser */
Emeric Brun3a058f32009-06-30 18:26:00 +0200123#define PR_O2_CLFLOG 0x00000400 /* log into clf format */
Krzysztof Piotr Oledzki213014e2009-09-27 15:50:02 +0200124#define PR_O2_LOGHCHKS 0x00000800 /* log health checks */
Willy Tarreau31682232007-11-29 15:38:04 +0100125
Willy Tarreaub625a082007-11-26 01:15:43 +0100126/* This structure is used to apply fast weighted round robin on a server group */
127struct fwrr_group {
128 struct eb_root curr; /* tree for servers in "current" time range */
129 struct eb_root t0, t1; /* "init" and "next" servers */
130 struct eb_root *init; /* servers waiting to be placed */
131 struct eb_root *next; /* servers to be placed at next run */
132 int curr_pos; /* current position in the tree */
133 int curr_weight; /* total weight of the current time range */
134 int next_weight; /* total weight of the next time range */
135};
136
Willy Tarreauf073a832009-03-01 23:21:47 +0100137struct error_snapshot {
138 struct timeval when; /* date of this event, (tv_sec == 0) means "never" */
139 unsigned int len; /* original length of the last invalid request/response */
140 unsigned int pos; /* position of the first invalid character */
141 unsigned int sid; /* ID of the faulty session */
142 struct server *srv; /* server associated with the error (or NULL) */
143 struct proxy *oe; /* other end = frontend or backend involved */
144 struct sockaddr_storage src; /* client's address */
145 char buf[BUFSIZE]; /* copy of the beginning of the message */
146};
147
Willy Tarreaubaaee002006-06-26 02:48:02 +0200148struct proxy {
149 struct listener *listen; /* the listen addresses and sockets */
150 struct in_addr mon_net, mon_mask; /* don't forward connections from this net (network order) FIXME: should support IPv6 */
151 int state; /* proxy state */
Willy Tarreau35d66b02007-01-02 00:28:21 +0100152 int options; /* PR_O_REDISP, PR_O_TRANSP, ... */
Willy Tarreau66aa61f2009-01-18 21:44:07 +0100153 int options2; /* PR_O2_* */
Willy Tarreauc1a21672009-08-16 22:37:44 +0200154 unsigned int fe_req_ana, be_req_ana; /* bitmap of common request protocol analysers for the frontend and backend */
Willy Tarreau4e5b8282009-08-16 22:57:50 +0200155 unsigned int fe_rsp_ana, be_rsp_ana; /* bitmap of common response protocol analysers for the frontend and backend */
Willy Tarreau35d66b02007-01-02 00:28:21 +0100156 int mode; /* mode = PR_MODE_TCP, PR_MODE_HTTP or PR_MODE_HEALTH */
Willy Tarreaubaaee002006-06-26 02:48:02 +0200157 struct sockaddr_in dispatch_addr; /* the default address to connect to */
Willy Tarreau5fdfb912007-01-01 23:11:07 +0100158 union {
159 struct proxy *be; /* default backend, or NULL if none set */
160 char *name; /* default backend name during config parse */
161 } defbe;
Willy Tarreaueb0c6142007-05-07 00:53:22 +0200162 struct list acl; /* ACL declared on this proxy */
Willy Tarreau5c8e3e02007-05-07 00:58:25 +0200163 struct list block_cond; /* early blocking conditions (chained) */
Willy Tarreaub463dfb2008-06-07 23:08:56 +0200164 struct list redirect_rules; /* content redirecting rules (chained) */
Willy Tarreau55ea7572007-06-17 19:56:27 +0200165 struct list switching_rules; /* content switching rules (chained) */
Willy Tarreaub6866442008-07-14 23:54:42 +0200166 struct { /* TCP request processing */
Willy Tarreauc7e961e2008-08-17 17:13:47 +0200167 unsigned int inspect_delay; /* inspection delay */
Willy Tarreaub6866442008-07-14 23:54:42 +0200168 struct list inspect_rules; /* inspection rules */
169 } tcp_req;
Willy Tarreaua9fb0832009-07-10 20:53:53 +0200170 int acl_requires; /* Elements required to satisfy all ACLs (ACL_USE_*) */
Willy Tarreaubaaee002006-06-26 02:48:02 +0200171 struct server *srv; /* known servers */
Willy Tarreaub625a082007-11-26 01:15:43 +0100172 int srv_act, srv_bck; /* # of servers eligible for LB (UP|!checked) AND (enabled+weight!=0) */
Willy Tarreau20697042007-11-15 23:26:18 +0100173
174 struct {
Willy Tarreau31682232007-11-29 15:38:04 +0100175 int algo; /* load balancing algorithm and variants: BE_LB_ALGO* */
Willy Tarreau20697042007-11-15 23:26:18 +0100176 int tot_wact, tot_wbck; /* total effective weights of active and backup servers */
177 int tot_weight; /* total effective weight of servers participating to LB */
178 int tot_used; /* total number of servers used for LB */
179 int wmult; /* ratio between user weight and effective weight */
Willy Tarreau5dc2fa62007-11-19 19:10:18 +0100180 int wdiv; /* ratio between effective weight and user weight */
Willy Tarreaub625a082007-11-26 01:15:43 +0100181 struct server *fbck; /* first backup server when !PR_O_USE_ALL_BK, or NULL */
Willy Tarreau20697042007-11-15 23:26:18 +0100182 struct {
183 struct server **srv; /* the server map used to apply weights */
184 int rr_idx; /* next server to be elected in round robin mode */
185 int state; /* PR_MAP_RECALC */
186 } map; /* LB parameters for map-based algorithms */
Willy Tarreaub625a082007-11-26 01:15:43 +0100187 struct {
188 struct fwrr_group act; /* weighted round robin on the active servers */
189 struct fwrr_group bck; /* weighted round robin on the backup servers */
190 } fwrr;
Willy Tarreau51406232008-03-10 22:04:20 +0100191 struct {
192 struct eb_root act; /* weighted least conns on the active servers */
193 struct eb_root bck; /* weighted least conns on the backup servers */
194 } fwlc;
Willy Tarreaub625a082007-11-26 01:15:43 +0100195 void (*update_server_eweight)(struct server *);/* if non-NULL, to be called after eweight change */
196 void (*set_server_status_up)(struct server *);/* to be called after status changes to UP */
197 void (*set_server_status_down)(struct server *);/* to be called after status changes to DOWN */
Willy Tarreau51406232008-03-10 22:04:20 +0100198 void (*server_take_conn)(struct server *);/* to be called when connection is assigned */
199 void (*server_drop_conn)(struct server *);/* to be called when connection is dropped */
Willy Tarreau20697042007-11-15 23:26:18 +0100200 } lbprm; /* LB parameters for all algorithms */
201
Krzysztof Piotr Oledzki1acf2172008-05-29 23:03:34 +0200202 char *cookie_domain; /* domain used to insert the cookie */
Willy Tarreaubaaee002006-06-26 02:48:02 +0200203 char *cookie_name; /* name of the cookie to look for */
204 int cookie_len; /* strlen(cookie_name), computed only once */
Emeric Brun647caf12009-06-30 17:57:00 +0200205 char *rdp_cookie_name; /* name of the RDP cookie to look for */
206 int rdp_cookie_len; /* strlen(rdp_cookie_name), computed only once */
Willy Tarreau01732802007-11-01 22:48:15 +0100207 char *url_param_name; /* name of the URL parameter used for hashing */
208 int url_param_len; /* strlen(url_param_name), computed only once */
matt.farnsworth@nokia.com1c2ab962008-04-14 20:47:37 +0200209 unsigned url_param_post_limit; /* if checking POST body for URI parameter, max body to wait for */
Marek Majkowski9c30fc12008-04-27 23:25:55 +0200210 int uri_len_limit; /* character limit for uri balancing algorithm */
211 int uri_dirs_depth1; /* directories+1 (slashes) limit for uri balancing algorithm */
Benoitaffb4812009-03-25 13:02:10 +0100212 char *hh_name; /* name of the header parameter used for hashing */
213 int hh_len; /* strlen(hh_name), computed only once */
214 int hh_match_domain; /* toggle use of special match function */
Willy Tarreau1c47f852006-07-09 08:22:27 +0200215 char *appsession_name; /* name of the cookie to look for */
Willy Tarreaubaaee002006-06-26 02:48:02 +0200216 int appsession_name_len; /* strlen(appsession_name), computed only once */
Willy Tarreau1c47f852006-07-09 08:22:27 +0200217 int appsession_len; /* length of the appsession cookie value to be used */
Willy Tarreau51041c72007-09-09 21:56:53 +0200218 struct appsession_hash htbl_proxy; /* Per Proxy hashtable */
Willy Tarreaubaaee002006-06-26 02:48:02 +0200219 char *capture_name; /* beginning of the name of the cookie to capture */
Willy Tarreau1c47f852006-07-09 08:22:27 +0200220 int capture_namelen; /* length of the cookie name to match */
Willy Tarreaubaaee002006-06-26 02:48:02 +0200221 int capture_len; /* length of the string to be captured */
222 struct uri_auth *uri_auth; /* if non-NULL, the (list of) per-URI authentications */
Willy Tarreau1c47f852006-07-09 08:22:27 +0200223 char *monitor_uri; /* a special URI to which we respond with HTTP/200 OK */
224 int monitor_uri_len; /* length of the string above. 0 if unused */
Willy Tarreaub80c2302007-11-30 20:51:32 +0100225 struct list mon_fail_cond; /* list of conditions to fail monitoring requests (chained) */
Willy Tarreau3a70f942008-02-15 11:15:34 +0100226 struct { /* WARNING! check proxy_reset_timeouts() in proxy.h !!! */
Willy Tarreau0c303ee2008-07-07 00:09:58 +0200227 int client; /* client I/O timeout (in ticks) */
228 int tarpit; /* tarpit timeout, defaults to connect if unspecified */
229 int queue; /* queue timeout, defaults to connect if unspecified */
230 int connect; /* connect timeout (in ticks) */
231 int server; /* server I/O timeout (in ticks) */
232 int appsession; /* appsession cookie expiration */
233 int httpreq; /* maximum time for complete HTTP request */
234 int check; /* maximum time for complete check */
Willy Tarreau1fa31262007-12-03 00:36:16 +0100235 } timeout;
Krzysztof Piotr Oledzki48cb2ae2009-10-02 22:51:14 +0200236 char *id, *desc; /* proxy id (name) and description */
Willy Tarreau1c47f852006-07-09 08:22:27 +0200237 struct list pendconns; /* pending connections with no server assigned yet */
238 int nbpend, nbpend_max; /* number of pending connections with no server assigned yet */
239 int totpend; /* total number of pending connections on this instance (for stats) */
Willy Tarreauf1221aa2006-12-17 22:14:12 +0100240 unsigned int feconn, feconn_max; /* # of active frontend sessions */
241 unsigned int beconn, beconn_max; /* # of active backend sessions */
Willy Tarreau7f062c42009-03-05 18:43:00 +0100242 struct freq_ctr fe_sess_per_sec; /* sessions per second on the frontend */
Willy Tarreau13a34bd2009-05-10 18:52:49 +0200243 unsigned int fe_sps_max; /* maximum of new sessions per second seen on the frontend */
Willy Tarreau7f062c42009-03-05 18:43:00 +0100244 struct freq_ctr be_sess_per_sec; /* sessions per second on the backend */
Willy Tarreau13a34bd2009-05-10 18:52:49 +0200245 unsigned int be_sps_max; /* maximum of new sessions per second seen on the backend */
Willy Tarreau3b88d442009-04-11 20:44:08 +0200246 long long cum_feconn, cum_beconn; /* cumulated number of processed sessions */
247 long long cum_lbconn; /* cumulated number of sessions processed by load balancing */
Willy Tarreau86034312006-12-29 00:10:33 +0100248 unsigned int maxconn; /* max # of active sessions on the frontend */
Willy Tarreau13a34bd2009-05-10 18:52:49 +0200249 unsigned int fe_sps_lim; /* limit on new sessions per second on the frontend */
Willy Tarreau86034312006-12-29 00:10:33 +0100250 unsigned int fullconn; /* #conns on backend above which servers are used at full load */
Willy Tarreau7ac51f62007-03-25 16:00:04 +0200251 struct in_addr except_net, except_mask; /* don't x-forward-for for this address. FIXME: should support IPv6 */
Maik Broemme2850cb42009-04-17 18:53:21 +0200252 struct in_addr except_to; /* don't x-original-to for this address. */
253 struct in_addr except_mask_to; /* the netmask for except_to. */
Ross Westaf72a1d2008-08-03 10:51:45 +0200254 char *fwdfor_hdr_name; /* header to use - default: "x-forwarded-for" */
255 int fwdfor_hdr_len; /* length of "x-forwarded-for" header */
Maik Broemme2850cb42009-04-17 18:53:21 +0200256 char *orgto_hdr_name; /* header to use - default: "x-original-to" */
257 int orgto_hdr_len; /* length of "x-original-to" header */
Krzysztof Oledzki85130942007-10-22 16:21:10 +0200258
259 unsigned down_trans; /* up-down transitions */
260 unsigned down_time; /* total time the proxy was down */
261 time_t last_change; /* last time, when the state was changed */
262
Willy Tarreau3b88d442009-04-11 20:44:08 +0200263 long long failed_conns, failed_resp; /* failed connect() and responses */
264 long long retries, redispatches; /* retried and redispatched connections */
265 long long denied_req, denied_resp; /* blocked requests/responses because of security concerns */
266 long long failed_req; /* failed requests (eg: invalid or timeout) */
Willy Tarreau35d66b02007-01-02 00:28:21 +0100267 long long bytes_in; /* number of bytes transferred from the client to the server */
268 long long bytes_out; /* number of bytes transferred from the server to the client */
Willy Tarreaubaaee002006-06-26 02:48:02 +0200269 int conn_retries; /* maximum number of connect retries */
Willy Tarreau977b8e42006-12-29 14:19:17 +0100270 int cap; /* supported capabilities (PR_CAP_*) */
Willy Tarreau1c47f852006-07-09 08:22:27 +0200271 struct sockaddr_in source_addr; /* the address to which we want to bind for connect() */
Willy Tarreau4864c352008-01-14 16:36:15 +0100272#if defined(CONFIG_HAP_CTTPROXY) || defined(CONFIG_HAP_LINUX_TPROXY)
Willy Tarreau77074d52006-11-12 23:57:19 +0100273 struct sockaddr_in tproxy_addr; /* non-local address we want to bind to for connect() */
274#endif
Willy Tarreaud53f96b2009-02-04 18:46:54 +0100275 int iface_len; /* bind interface name length */
276 char *iface_name; /* bind interface name or NULL */
Willy Tarreaubaaee002006-06-26 02:48:02 +0200277 struct proxy *next;
Robert Tsai81ae1952007-12-05 10:47:29 +0100278 struct logsrv logsrv1, logsrv2; /* 2 syslog servers */
Willy Tarreau1c47f852006-07-09 08:22:27 +0200279 signed char logfac1, logfac2; /* log facility for both servers. -1 = disabled */
280 int loglev1, loglev2; /* log level for each server, 7 by default */
Willy Tarreauf7edefa2009-05-10 17:20:05 +0200281 int minlvl1, minlvl2; /* minimum log level for each server, 0 by default */
Willy Tarreaubaaee002006-06-26 02:48:02 +0200282 int to_log; /* things to be logged (LW_*) */
Willy Tarreau0c303ee2008-07-07 00:09:58 +0200283 int stop_time; /* date to stop listening, when stopping != 0 (int ticks) */
Willy Tarreaubaaee002006-06-26 02:48:02 +0200284 int nb_reqadd, nb_rspadd;
285 struct hdr_exp *req_exp; /* regular expressions for request headers */
286 struct hdr_exp *rsp_exp; /* regular expressions for response headers */
287 int nb_req_cap, nb_rsp_cap; /* # of headers to be captured */
288 struct cap_hdr *req_cap; /* chained list of request headers to be captured */
289 struct cap_hdr *rsp_cap; /* chained list of response headers to be captured */
Willy Tarreaucf7f3202007-05-13 22:46:04 +0200290 struct pool_head *req_cap_pool, /* pools of pre-allocated char ** used to build the sessions */
291 *rsp_cap_pool;
Willy Tarreau1d4154a2007-05-13 22:57:02 +0200292 struct pool_head *hdr_idx_pool; /* pools of pre-allocated int* used for headers indexing */
Willy Tarreaubaaee002006-06-26 02:48:02 +0200293 char *req_add[MAX_NEWHDR], *rsp_add[MAX_NEWHDR]; /* headers to be added */
294 int grace; /* grace time after stop request */
Willy Tarreauf3c69202006-07-09 16:42:34 +0200295 char *check_req; /* HTTP or SSL request to use for PR_O_HTTP_CHK|PR_O_SSL3_CHK */
296 int check_len; /* Length of the HTTP or SSL3 request */
Willy Tarreau0f772532006-12-23 20:51:41 +0100297 struct chunk errmsg[HTTP_ERR_SIZE]; /* default or customized error messages for known errors */
Willy Tarreaudcd47712007-11-04 23:35:08 +0100298 int uuid; /* universally unique proxy ID, used for SNMP */
299 int next_svid; /* next server-id, used for SNMP */
Willy Tarreauc73ce2b2008-01-06 10:55:10 +0100300 unsigned int backlog; /* force the frontend's listen backlog */
Willy Tarreau0b9c02c2009-02-04 22:05:05 +0100301 unsigned int bind_proc; /* bitmask of processes using this proxy. 0 = all. */
Willy Tarreauf073a832009-03-01 23:21:47 +0100302 struct error_snapshot invalid_req, invalid_rep; /* captures of last errors */
Willy Tarreau84b57da2009-06-14 11:10:45 +0200303
304 /* used only during configuration parsing */
305 int no_options; /* PR_O_REDISP, PR_O_TRANSP, ... */
306 int no_options2; /* PR_O2_* */
Willy Tarreaubaaee002006-06-26 02:48:02 +0200307};
308
Willy Tarreau55ea7572007-06-17 19:56:27 +0200309struct switching_rule {
310 struct list list; /* list linked to from the proxy */
311 struct acl_cond *cond; /* acl condition to meet */
312 union {
313 struct proxy *backend; /* target backend */
314 char *name; /* target backend name during config parsing */
315 } be;
316};
317
Willy Tarreaub463dfb2008-06-07 23:08:56 +0200318struct redirect_rule {
319 struct list list; /* list linked to from the proxy */
320 struct acl_cond *cond; /* acl condition to meet */
321 int type;
322 int rdr_len;
323 char *rdr_str;
324 int code;
Willy Tarreau79da4692008-11-19 20:03:04 +0100325 unsigned int flags;
Willy Tarreau0140f252008-11-19 21:07:09 +0100326 int cookie_len;
327 char *cookie_str;
Willy Tarreaub463dfb2008-06-07 23:08:56 +0200328};
329
Willy Tarreaubaaee002006-06-26 02:48:02 +0200330extern struct proxy *proxy;
Willy Tarreaudcd47712007-11-04 23:35:08 +0100331extern int next_pxid;
Willy Tarreaubaaee002006-06-26 02:48:02 +0200332
333#endif /* _TYPES_PROXY_H */
334
335/*
336 * Local variables:
337 * c-indent-level: 8
338 * c-basic-offset: 8
339 * End:
340 */