crossroads

Git mirror of https://crossroads.e-tunity.com/
git clone git://git.finwo.net/app/crossroads
Log | Files | Refs | LICENSE

commit 6a15322c387b1bd2352e7fcdf1977e8c4ea32f58
parent f9bb3ebff339dbdfd8a3327506d7adb07fe34c56
Author: finwo <finwo@pm.me>
Date:   Sat,  3 Jan 2026 19:31:17 +0100

1.35

Diffstat:
MChangeLog | 2++
Mdoc/config.yo | 1+
Mdoc/crossroads.html | 220++++++++++++++++++++++++++++++++++++++++++-------------------------------------
Mdoc/crossroads.man | 33+++++++++++++++++++++++++--------
Mdoc/crossroads.pdf | 0
Metc/Makefile.def | 2+-
Msrc/allocreporter.c | 2+-
Msrc/ansistamp.c | 2+-
Msrc/backendavailable.c | 2+-
Msrc/backendconnect.c | 2+-
Msrc/backendcount.c | 2+-
Msrc/choosebackend.c | 2+-
Msrc/configtest.c | 2+-
Msrc/copysockets.c | 2+-
Msrc/createcommandlinespace.c | 2+-
Msrc/crossroads.h | 7+++++--
Msrc/deallocreporter.c | 2+-
Msrc/decrclientcount.c | 2+-
Msrc/error.c | 2+-
Msrc/forktcpservicer.c | 2+-
Msrc/hashpjw.c | 2+-
Msrc/httpcopy.c | 2+-
Msrc/httperror.c | 2+-
Msrc/httpheaderaddheader.c | 2+-
Msrc/httpheaderappendheader.c | 2+-
Msrc/httpheaderconnectiontype.c | 2+-
Msrc/httpheaderfree.c | 2+-
Msrc/httpheaderhascookie.c | 2+-
Msrc/httpheaderhttpver.c | 2+-
Msrc/httpheadernew.c | 2+-
Msrc/httpheaderread.c | 2+-
Msrc/httpheaderremoveheader.c | 2+-
Msrc/httpheadersetheader.c | 2+-
Msrc/httpheaderval.c | 2+-
Msrc/httpheaderwrite.c | 2+-
Msrc/httpinsertheader.c | 2+-
Msrc/httpserve.c | 2+-
Msrc/httpserversocket.c | 2+-
Msrc/httpwrite.c | 2+-
Msrc/incrclientcount.c | 2+-
Msrc/initsockaddr.c | 2+-
Msrc/interrupt.c | 2+-
Msrc/ipfaddallow.c | 2+-
Msrc/ipfadddeny.c | 2+-
Msrc/ipfallowed.c | 2+-
Msrc/ipfdenied.c | 2+-
Msrc/ipfloadfile.c | 2+-
Msrc/ipfmatch.c | 2+-
Msrc/ipfparse.c | 2+-
Msrc/ishexdigit.c | 2+-
Msrc/isspace.c | 2+-
Msrc/lexer.c | 727++++++++++++++++++++++++++++++++++++++++---------------------------------------
Msrc/lexer.l | 5+++++
Msrc/lockreporter.c | 2+-
Msrc/logactivityany.c | 2+-
Msrc/logactivitycontinuation.c | 2+-
Msrc/logactivityend.c | 2+-
Msrc/logactivitystart.c | 2+-
Msrc/main.c | 2+-
Msrc/makesocket.c | 2+-
Msrc/markactivity.c | 36+++++++++++++++++++++++++++++++-----
Msrc/msg.c | 2+-
Msrc/msgdumpbuf.c | 2+-
Msrc/netbuffer.c | 2+-
Msrc/netbufread.c | 2+-
Msrc/netcopy.c | 2+-
Msrc/netread.c | 2+-
Msrc/netwrite.c | 2+-
Msrc/parser.c | 590+++++++++++++++++++++++++++++++++++++++++--------------------------------------
Msrc/parser.h | 3++-
Msrc/parser.y | 27+++++++++++++++++++++++++--
Msrc/restart.c | 2+-
Msrc/runservice.c | 2+-
Msrc/serve.c | 2+-
Msrc/setprogramtitle.c | 2+-
Msrc/showservices.c | 2+-
Msrc/showstatus.c | 2+-
Msrc/stagetostring.c | 2+-
Msrc/statetostring.c | 2+-
Msrc/stopdaemon.c | 2+-
Msrc/strcasestr.c | 2+-
Msrc/strexpandformat.c | 2+-
Msrc/stringtostate.c | 2+-
Msrc/strlcat.c | 2+-
Msrc/strprintf.c | 2+-
Msrc/strvprintf.c | 2+-
Msrc/sysrun.c | 2+-
Msrc/tcpserve.c | 2+-
Msrc/tellservice.c | 2+-
Msrc/thruputlog.c | 2+-
Msrc/trafficlog.c | 2+-
Msrc/uidassume.c | 2+-
Msrc/uidrestore.c | 2+-
Msrc/unlockreporter.c | 2+-
Msrc/usage.c | 2+-
Msrc/vsyslog.c | 2+-
Msrc/wakeuphandler.c | 2+-
Msrc/warning.c | 2+-
Msrc/writelog.c | 2+-
Msrc/xmalloc.c | 2+-
Msrc/xrealloc.c | 2+-
Msrc/xstrcat.c | 2+-
Msrc/xstrcatch.c | 2+-
Msrc/xstrdup.c | 2+-
104 files changed, 984 insertions(+), 851 deletions(-)

diff --git a/ChangeLog b/ChangeLog @@ -1,6 +1,8 @@ ChangeLog for Crossroads ------------------------------------------------------------------------------ +1.35 [KK 2007-04-16] Added 'retries' keyword to back end definitions. + 1.34 [KK 2007-04-03] Added SVN revision number to the overall version ID, so that tracking historical versions becomes easier. Added flag -t which causes tabular display in 'crossroads status' diff --git a/doc/config.yo b/doc/config.yo @@ -142,6 +142,7 @@ tt(type any), the HTTP-specific directives have no effect. includefile(conf/server.yo) includefile(conf/verbose-backend.yo) +includefile(conf/retries.yo) includefile(conf/weight) includefile(conf/decay) includefile(conf/onhooks) diff --git a/doc/crossroads.html b/doc/crossroads.html @@ -1,12 +1,12 @@ <a name="defs.yo"></a><html><head> -<title>Crossroads 1.34</title> +<title>Crossroads 1.35</title> <link rel="stylesheet" type="text/css" href="http://www.e-tunity.com/css/yodl.css"> <link rel="stylesheet" type="text/css" href="http://www.e-tunity.com/css/yodl.css"> <link rev="made" href="mailto:info@e-tunity.com"> </head> <body> <hr> -<h1>Crossroads 1.34</h1> +<h1>Crossroads 1.35</h1> <h2>Karel Kubat</h2> <h2>e-tunity</h2><h2>2005, 2006, ff.</h2> @@ -66,77 +66,78 @@ <dl> <dt><a href="#l30">4.3.1: server - Specifying the back end address</a></dt> <dt><a href="#l31">4.3.2: verbosity - Controlling verbosity at the back end level</a></dt> -<dt><a href="#l32">4.3.3: weight - When a back end is more equal than others</a></dt> -<dt><a href="#l33">4.3.4: decay - Levelling out activity of a back end</a></dt> -<dt><a href="#l34">4.3.5: onstart, onend, onfail - Action Hooks</a></dt> -<dt><a href="#l35">4.3.6: trafficlog and throughputlog - Debugging and Performance Aids</a></dt> -<dt><a href="#l36">4.3.7: stickycookie - Back end selection with an HTTP cookie</a></dt> -<dt><a href="#l37">4.3.8: HTTP Header Modification Directives</a></dt> +<dt><a href="#l32">4.3.3: retries - Specifying allowed failures</a></dt> +<dt><a href="#l33">4.3.4: weight - When a back end is more equal than others</a></dt> +<dt><a href="#l34">4.3.5: decay - Levelling out activity of a back end</a></dt> +<dt><a href="#l35">4.3.6: onstart, onend, onfail - Action Hooks</a></dt> +<dt><a href="#l36">4.3.7: trafficlog and throughputlog - Debugging and Performance Aids</a></dt> +<dt><a href="#l37">4.3.8: stickycookie - Back end selection with an HTTP cookie</a></dt> +<dt><a href="#l38">4.3.9: HTTP Header Modification Directives</a></dt> </dl> </dl> -<dt><h3><a href="#l38">5: Tips, Tricks and Remarks</a></h3></dt> +<dt><h3><a href="#l39">5: Tips, Tricks and Remarks</a></h3></dt> <dl> -<dt><a href="#l39">5.1: How back ends are selected in load balancing</a></dt> +<dt><a href="#l40">5.1: How back ends are selected in load balancing</a></dt> <dl> -<dt><a href="#l40">5.1.1: Bysize, byduration or byconnections?</a></dt> -<dt><a href="#l41">5.1.2: Averaging size and duration</a></dt> -<dt><a href="#l42">5.1.3: Specifying decays</a></dt> -<dt><a href="#l43">5.1.4: Adjusting the weights</a></dt> -<dt><a href="#l44">5.1.5: Throttling the number of concurrent connections</a></dt> +<dt><a href="#l41">5.1.1: Bysize, byduration or byconnections?</a></dt> +<dt><a href="#l42">5.1.2: Averaging size and duration</a></dt> +<dt><a href="#l43">5.1.3: Specifying decays</a></dt> +<dt><a href="#l44">5.1.4: Adjusting the weights</a></dt> +<dt><a href="#l45">5.1.5: Throttling the number of concurrent connections</a></dt> </dl> -<dt><a href="#l45">5.2: Using an external program to dispatch</a></dt> +<dt><a href="#l46">5.2: Using an external program to dispatch</a></dt> <dl> -<dt><a href="#l46">5.2.1: Configuring the external handler</a></dt> -<dt><a href="#l47">5.2.2: Writing the external handler</a></dt> -<dt><a href="#l48">5.2.3: Examples of external handlers</a></dt> +<dt><a href="#l47">5.2.1: Configuring the external handler</a></dt> +<dt><a href="#l48">5.2.2: Writing the external handler</a></dt> +<dt><a href="#l49">5.2.3: Examples of external handlers</a></dt> </dl> -<dt><a href="#l49">5.3: TCP Session Stickiness</a></dt> -<dt><a href="#l50">5.4: HTTP Session Stickiness</a></dt> +<dt><a href="#l50">5.3: TCP Session Stickiness</a></dt> +<dt><a href="#l51">5.4: HTTP Session Stickiness</a></dt> <dl> -<dt><a href="#l51">5.4.1: Don't use stickiness!</a></dt> -<dt><a href="#l52">5.4.2: But if you must..</a></dt> +<dt><a href="#l52">5.4.1: Don't use stickiness!</a></dt> +<dt><a href="#l53">5.4.2: But if you must..</a></dt> </dl> -<dt><a href="#l53">5.5: Passing the client's IP address</a></dt> +<dt><a href="#l54">5.5: Passing the client's IP address</a></dt> <dl> -<dt><a href="#l54">5.5.1: Sample Crossroads configuration</a></dt> -<dt><a href="#l55">5.5.2: Sample Apache configuration</a></dt> +<dt><a href="#l55">5.5.1: Sample Crossroads configuration</a></dt> +<dt><a href="#l56">5.5.2: Sample Apache configuration</a></dt> </dl> -<dt><a href="#l56">5.6: Debugging network traffic</a></dt> -<dt><a href="#l57">5.7: Limiting Access to Crossroads by Client IP Address</a></dt> +<dt><a href="#l57">5.6: Debugging network traffic</a></dt> +<dt><a href="#l58">5.7: Limiting Access to Crossroads by Client IP Address</a></dt> <dl> -<dt><a href="#l58">5.7.1: General Examples</a></dt> -<dt><a href="#l59">5.7.2: Using External Files</a></dt> -<dt><a href="#l60">5.7.3: Mixing Directives</a></dt> +<dt><a href="#l59">5.7.1: General Examples</a></dt> +<dt><a href="#l60">5.7.2: Using External Files</a></dt> +<dt><a href="#l61">5.7.3: Mixing Directives</a></dt> </dl> -<dt><a href="#l61">5.8: Configuration examples</a></dt> +<dt><a href="#l62">5.8: Configuration examples</a></dt> <dl> -<dt><a href="#l62">5.8.1: A load balancer for three webserver back ends</a></dt> -<dt><a href="#l63">5.8.2: An HTTP forwarder when travelling</a></dt> -<dt><a href="#l64">5.8.3: SSH login with enforced idle logout</a></dt> +<dt><a href="#l63">5.8.1: A load balancer for three webserver back ends</a></dt> +<dt><a href="#l64">5.8.2: An HTTP forwarder when travelling</a></dt> +<dt><a href="#l65">5.8.3: SSH login with enforced idle logout</a></dt> </dl> </dl> -<dt><h3><a href="#l65">6: Benchmarking</a></h3></dt> +<dt><h3><a href="#l66">6: Benchmarking</a></h3></dt> <dl> -<dt><a href="#l66">6.1: Benchmark 1: Accessing a proxy via crossroads or directly</a></dt> +<dt><a href="#l67">6.1: Benchmark 1: Accessing a proxy via crossroads or directly</a></dt> <dl> -<dt><a href="#l67">6.1.1: Results</a></dt> -<dt><a href="#l68">6.1.2: Discussion</a></dt> +<dt><a href="#l68">6.1.1: Results</a></dt> +<dt><a href="#l69">6.1.2: Discussion</a></dt> </dl> -<dt><a href="#l69">6.2: Benchmark 2: Crossroads versus Linux Virtual Server (LVS)</a></dt> +<dt><a href="#l70">6.2: Benchmark 2: Crossroads versus Linux Virtual Server (LVS)</a></dt> <dl> -<dt><a href="#l70">6.2.1: Environment</a></dt> -<dt><a href="#l71">6.2.2: Tests and results</a></dt> +<dt><a href="#l71">6.2.1: Environment</a></dt> +<dt><a href="#l72">6.2.2: Tests and results</a></dt> </dl> </dl> -<dt><h3><a href="#l72">7: Compiling and Installing</a></h3></dt> +<dt><h3><a href="#l73">7: Compiling and Installing</a></h3></dt> <dl> -<dt><a href="#l73">7.1: Prerequisites</a></dt> -<dt><a href="#l74">7.2: Compiling and installing</a></dt> -<dt><a href="#l75">7.3: Configuring crossroads</a></dt> -<dt><a href="#l76">7.4: A boot script</a></dt> +<dt><a href="#l74">7.1: Prerequisites</a></dt> +<dt><a href="#l75">7.2: Compiling and installing</a></dt> +<dt><a href="#l76">7.3: Configuring crossroads</a></dt> +<dt><a href="#l77">7.4: A boot script</a></dt> <dl> -<dt><a href="#l77">7.4.1: SysV Style Startup</a></dt> -<dt><a href="#l78">7.4.2: BSD Style Startup</a></dt> +<dt><a href="#l78">7.4.1: SysV Style Startup</a></dt> +<dt><a href="#l79">7.4.2: BSD Style Startup</a></dt> </dl> <p><hr><p> @@ -991,8 +992,23 @@ i.e., when the service is declared with <code>type http</code>. Incase of <p><dt><strong>Default:</strong><dd> <code>off</code> </dl> <p> -<a name="conf/weight"></a><a name="l32"></a> -<strong>4.3.3: weight - When a back end is more equal than others</strong> <a name="confweight - When a back end is more equal than others"></a> +<a name="conf/retries.yo"></a><a name="l32"></a> +<strong>4.3.3: retries - Specifying allowed failures</strong> <a name="confretries - Specifying allowed failures"></a> + <dl> + <p><dt><strong>Description:</strong><dd> Back ends that are 'flaky' or on a less reliable network can be + marked as unavailable after not just one failure, but after + e.g. three. You can use this configuration if you suspect that + spurious errors cause otherwise 'good' back ends to be marked as + unavailable, while they in fact still could be used. + <p><dt><strong>Syntax:</strong><dd> <code>retries</code> <em>number</em>; where <em>number</em> is the threshold of bad + connections. Once exceeded, Crossroads will mark a back end as + unavailable. + <p><dt><strong>Default:</strong><dd> 1; a back end is assumed to be unavailable after the first bad + connection. + </dl> +<p> +<a name="conf/weight"></a><a name="l33"></a> +<strong>4.3.4: weight - When a back end is more equal than others</strong> <a name="confweight - When a back end is more equal than others"></a> <dl> <p><dt><strong>Description:</strong><dd> To influence how backends are selected, a backend can specify its 'weight' in the process. The higher the weight, the less likely a @@ -1010,8 +1026,8 @@ The weighing mechanism only applies to the dispatch modes <p><dt><strong>Default:</strong><dd> 1; all back ends have equal weight. </dl> <p> -<a name="conf/decay"></a><a name="l33"></a> -<strong>4.3.4: decay - Levelling out activity of a back end</strong> <a name="confdecay - Levelling out activity of a back end"></a> +<a name="conf/decay"></a><a name="l34"></a> +<strong>4.3.5: decay - Levelling out activity of a back end</strong> <a name="confdecay - Levelling out activity of a back end"></a> <dl> <p><dt><strong>Description:</strong><dd> To make sure that a 'spike' of activity doesn't influence the perceived load of a back end forever, you may @@ -1032,8 +1048,8 @@ This means that when a given back end is hit, then its usage data <p><dt><strong>Default:</strong><dd> 0, meaning that no decay is applied to usage statistics. </dl> <p> -<a name="conf/onhooks"></a><a name="l34"></a> -<strong>4.3.5: onstart, onend, onfail - Action Hooks</strong> <a name="confonstart, onend, onfail - Action Hooks"></a> +<a name="conf/onhooks"></a><a name="l35"></a> +<strong>4.3.6: onstart, onend, onfail - Action Hooks</strong> <a name="confonstart, onend, onfail - Action Hooks"></a> <dl> <p><dt><strong>Description:</strong><dd> The three directives <code>onstart</code>, <code>onend</code> and <code>onfail</code> can be specified to start system commands (external programs) when a @@ -1084,8 +1100,8 @@ The format is always <code>on</code><em>type</em> <em>command</em>. The <em>comm connection, success or failure of a back end. </dl> <p> -<a name="conf/trafficlog"></a><a name="l35"></a> -<strong>4.3.6: trafficlog and throughputlog - Debugging and Performance Aids</strong> <a name="conftrafficlog and throughputlog - Debugging and Performance Aids"></a> +<a name="conf/trafficlog"></a><a name="l36"></a> +<strong>4.3.7: trafficlog and throughputlog - Debugging and Performance Aids</strong> <a name="conftrafficlog and throughputlog - Debugging and Performance Aids"></a> <dl> <p><dt><strong>Description:</strong><dd> Two directives are available to log network traffic to files. They are <code>trafficlog</code> and @@ -1104,8 +1120,8 @@ The <code>throughputlog</code> statement writes shorthand transmissions to <p><dt><strong>Default:</strong><dd> none </dl> <p> -<a name="conf/stickycookie"></a><a name="l36"></a> -<strong>4.3.7: stickycookie - Back end selection with an HTTP cookie</strong> <a name="confstickycookie - Back end selection with an HTTP cookie"></a> +<a name="conf/stickycookie"></a><a name="l37"></a> +<strong>4.3.8: stickycookie - Back end selection with an HTTP cookie</strong> <a name="confstickycookie - Back end selection with an HTTP cookie"></a> <dl> <p><dt><strong>Description:</strong><dd> The directive <code>stickycookie</code> <em>value</em> causes Crossroads to unpack clients' requests, to check for @@ -1144,8 +1160,8 @@ There are basically to provide such cookies to a browser. First, a <p><dt><strong>Default:</strong><dd> There is no default. </dl> <p> -<a name="conf/addclientheader"></a><a name="l37"></a> -<strong>4.3.8: HTTP Header Modification Directives</strong> <a name="confHTTP Header Modification Directives"></a> +<a name="conf/addclientheader"></a><a name="l38"></a> +<strong>4.3.9: HTTP Header Modification Directives</strong> <a name="confHTTP Header Modification Directives"></a> <dl> <p><dt><strong>Description:</strong><dd> Crossroads understands the following header modification directives: <code>addclientheader</code>, @@ -1320,13 +1336,13 @@ service ... { <p><dt><strong>Default:</strong><dd> There is no default. </dl> <p> -<a name="l38"></a> +<a name="l39"></a> <h2>5: Tips, Tricks and Remarks</h2> <a name="tips"></a>The following sections elaborate on the directives as described in section <a href="crossroads.html#config">4</a> to illustrate how crossroads works and to help you achieve the "optimal" balancing configuration. <p> -<a name="l39"></a> +<a name="l40"></a> <h3>5.1: How back ends are selected in load balancing</h3><a name="howselected"></a> <p> In order to tune your load balancing, you'll need to understand how @@ -1335,7 +1351,7 @@ section we'll focus on the dispatching modes <code>bysize</code>, <code>bydurati and <code>byconnections</code> only. The other dispatching types are self-explanatory. <p> -<a name="l40"></a> +<a name="l41"></a> <strong>5.1.1: Bysize, byduration or byconnections?</strong> <p> As stated before, crossroads doesn't know 'what a service does' and @@ -1385,7 +1401,7 @@ E.g., consider a database connection. What's <p> </ul> <p> -<a name="l41"></a> +<a name="l42"></a> <strong>5.1.2: Averaging size and duration</strong> <p> The configuration statement <code>dispatchmode bysize</code> or <code>byduration</code> @@ -1406,7 +1422,7 @@ In contrast, when e.g. <code>over 3</code> is in effect, then a sudden load does show up -- because it highly contributes to the average of three connections. <p> -<a name="l42"></a> +<a name="l43"></a> <strong>5.1.3: Specifying decays</strong> <p> Decays are also only relevant when crossroads computes the 'next best @@ -1460,7 +1476,7 @@ service soap { </pre> <p> -<a name="l43"></a> +<a name="l44"></a> <strong>5.1.4: Adjusting the weights</strong> <p> The back end modifier <code>weight</code> is useful in situations where your @@ -1514,7 +1530,7 @@ both A and B crash). Note also that A's usage data decay much faster than B's and C's: we're assuming that this big server recovers quicker than its smaller siblings. <p> -<a name="l44"></a> +<a name="l45"></a> <strong>5.1.5: Throttling the number of concurrent connections</strong> <p> If you suspect that your service may occasionally receive 'spikes' of @@ -1544,7 +1560,7 @@ too much, a situation may occur where that back end is about to be hit. A <code>maxconnections</code> statement on the level of that back may then protect it. <p> -<a name="l45"></a> +<a name="l46"></a> <h3>5.2: Using an external program to dispatch</h3> <a name="externalhandler"></a> <p> @@ -1553,7 +1569,7 @@ modes. However, you are always free to hook-in your own dispatch mode that determines the next back end using your own specific algorithm. This section explains how to do it. <p> -<a name="l46"></a> +<a name="l47"></a> <strong>5.2.1: Configuring the external handler</strong> <p> First, the <code>dispatchmode</code> statement needs to inform Crossroads that @@ -1592,7 +1608,7 @@ Note that the format specifiers such as <code>%b</code> don't make sense in the phase in which an external handler is called, since there is no current back end yet (the job of the handler is to supply one). <p> -<a name="l47"></a> +<a name="l48"></a> <strong>5.2.2: Writing the external handler</strong> <p> The external handler is activated using the arguments that are @@ -1601,7 +1617,7 @@ whatever it wants, but ultimately, it must write a back end name on its <em>stdout</em>. Crossroads reads this, and if the back end is available, uses that back end for the connection. <p> -<a name="l48"></a> +<a name="l49"></a> <strong>5.2.3: Examples of external handlers</strong> <p> This section shows some examples of Crossroads configurations @@ -2030,7 +2046,7 @@ if ($action eq 'dispatch') { </pre> <p> -<a name="l49"></a> +<a name="l50"></a> <h3>5.3: TCP Session Stickiness</h3> <p> If you need to make sure that a client that once gets dispatched to a @@ -2056,7 +2072,7 @@ If the preferred back end is unavailable, then the action that Crossroads takes is to dispatch as if <code>byconnections</code>: of the available back ends, the one with the least connections is taken. <p> -<a name="l50"></a> +<a name="l51"></a> <h3>5.4: HTTP Session Stickiness</h3> <p> This section focuses on HTTP session stickiness. This term refers to @@ -2065,7 +2081,7 @@ a backend farm with webservers always to the same back end. In other words: once a back end is selected by the balancer, it will remain the back end of choice, even for subsequent connections. <p> -<a name="l51"></a> +<a name="l52"></a> <strong>5.4.1: Don't use stickiness!</strong> <p> The rule of thumb as far as the balancer is concerned, is: <strong>Do not @@ -2097,7 +2113,7 @@ that all PHP applications have access to these data. Application servers such as Websphere can be configured to replicate session data between nodes. <p> -<a name="l52"></a> +<a name="l53"></a> <strong>5.4.2: But if you must..</strong> <p> If you really need stickiness, think first whether you might use TCP @@ -2175,7 +2191,7 @@ Note how the cookie names and values in the directives <code>stickycookie</code> and <code>addclientheader</code> match. That is obviously a prerequisite for stickiness. <p> -<a name="l53"></a> +<a name="l54"></a> <h3>5.5: Passing the client's IP address</h3> <p> Since Crossroads just shuttles bytes to and fro, meta-information of @@ -2203,7 +2219,7 @@ header: <code>X-Real-IP</code>, holding the client's IP address. performance will be hampered -- all passing messages will have to be unpacked and analyzed. <p> -<a name="l54"></a> +<a name="l55"></a> <strong>5.5.1: Sample Crossroads configuration</strong> <p> The below sample configuration shows two HTTP back ends that receive @@ -2230,7 +2246,7 @@ service www { </pre> <p> -<a name="l55"></a> +<a name="l56"></a> <strong>5.5.2: Sample Apache configuration</strong> <p> The method by which each back end analyzes the header <code>X-Real-IP</code> @@ -2262,7 +2278,7 @@ LogFormat "%{X-Real-IP}i %l %u %t %D \"%r\" %&gt;s %b" common </pre> <p> -<a name="l56"></a> +<a name="l57"></a> <h3>5.6: Debugging network traffic</h3> <p> Incase the traffic between @@ -2386,10 +2402,10 @@ Summarizing, the throughput times of a client-back end connection analyze the output and to compute round trip times. Such scripts are not (yet) included in Crossroads. <p> -<a name="l57"></a> +<a name="l58"></a> <h3>5.7: Limiting Access to Crossroads by Client IP Address</h3> <p> -<a name="l58"></a> +<a name="l59"></a> <strong>5.7.1: General Examples</strong> <p> The directives <code>allowfrom</code>, <code>denyfrom</code>, <code>allowfile</code> and @@ -2426,7 +2442,7 @@ with 192.168.1. The specifier <code>192.168.1/24</code> states that there are three network bytes (192, 168 and 1), and 24 bits (or 3 bytes) are relevant; so that the fourth network byte doesn't matter. <p> -<a name="l59"></a> +<a name="l60"></a> <strong>5.7.2: Using External Files</strong> <p> The directives <code>allowfile</code> and <code>denyfile</code> allow you to specify IP @@ -2458,7 +2474,7 @@ is running, you may edit <code>/tmp/allow.txt</code>, and then issue <code>killa -1 crossroads</code>. The new contents of <code>/tmp/allow.txt</code> will be reloaded. <p> -<a name="l60"></a> +<a name="l61"></a> <strong>5.7.3: Mixing Directives</strong> <p> Crossroads allows to mix all directives in one service @@ -2525,14 +2541,14 @@ There is a technical reason for this. Once Crossroads Crossroads doesn't check for such configurations, which are syntactially correct, but make no semantic sense.</ul> <p> -<a name="l61"></a> +<a name="l62"></a> <h3>5.8: Configuration examples</h3> <p> As a general hint, use <code>crossroads sampleconf</code> to view the most up-to-date examples of configurations. The description below shows a few examples too. <p> -<a name="l62"></a> +<a name="l63"></a> <strong>5.8.1: A load balancer for three webserver back ends</strong> <p> The following configuration example binds crossroads to port 80 of the @@ -2661,7 +2677,7 @@ service www { </pre> <p> -<a name="l63"></a> +<a name="l64"></a> <strong>5.8.2: An HTTP forwarder when travelling</strong> <p> As another example, here's my <code>crossroads.conf</code> that I use on my @@ -2750,7 +2766,7 @@ and <code>LocalSquid</code> are both active, then <code>crossroads tell httpprox sshtunnel down</code> will 'take down' the back end <code>SshTunnel</code> -- and will automatically cause crossroads to switch to <code>LocalSquid</code>. <p> -<a name="l64"></a> +<a name="l65"></a> <strong>5.8.3: SSH login with enforced idle logout</strong> <p> The following example shows how crossroads 'throttles' SSH @@ -2776,13 +2792,13 @@ service Ssh { </pre> <p> -<a name="l65"></a> +<a name="l66"></a> <h2>6: Benchmarking</h2> <a name="benchmarking"></a>This section shows how crossroads affects the transmitting of HTML data when used as an intermediate 'station' through which all data travels. <p> -<a name="l66"></a> +<a name="l67"></a> <h3>6.1: Benchmark 1: Accessing a proxy via crossroads or directly</h3> <p> The benchmark was run on a system where the following was varied: @@ -2810,7 +2826,7 @@ service HttpProxy { </pre> <p> -<a name="l67"></a> +<a name="l68"></a> <strong>6.1.1: Results</strong> <p> The results of this test are that crossroads causes a negligible @@ -2833,7 +2849,7 @@ sys 0m0.230s </pre> <p> -<a name="l68"></a> +<a name="l69"></a> <strong>6.1.2: Discussion</strong> <p> The above shown results are quite favorable to crossroads. However, @@ -2865,7 +2881,7 @@ seldom in the real world: back end). Again, this processing time will weigh much heavier than the multiple read/writes.</ul> <p> -<a name="l69"></a> +<a name="l70"></a> <h3>6.2: Benchmark 2: Crossroads versus Linux Virtual Server (LVS)</h3> <p> LVS is a kernel-based balancer that acts like a masquerading @@ -2879,7 +2895,7 @@ LVS isn't aware of downtime of back ends (unless one implements an external heartbeat). Also, crossroads offers more complex balancing than LVS. <p> -<a name="l70"></a> +<a name="l71"></a> <strong>6.2.1: Environment</strong> <p> On the balancer, LVS was run on port 80, its forwarding set up for two @@ -2910,7 +2926,7 @@ service http { </pre> <p> -<a name="l71"></a> +<a name="l72"></a> <strong>6.2.2: Tests and results</strong> <p> In the first test, ports 80 and 81 on the balancer were 'bombed' with @@ -2989,9 +3005,9 @@ are shown in the below table: Again, the results show that crossroads performs just as effectively as LVS, even with large data chunks! <p> -<a name="l72"></a> +<a name="l73"></a> <h2>7: Compiling and Installing</h2> -<a name="compiling"></a><a name="l73"></a> +<a name="compiling"></a><a name="l74"></a> <h3>7.1: Prerequisites</h3> <p> The creation of crossroads requires: @@ -3008,7 +3024,7 @@ The creation of crossroads requires: Basically a Linux or Apple MacOSX box will do nicely. To compile and install crossroads, follow these steps. <p> -<a name="l74"></a> +<a name="l75"></a> <h3>7.2: Compiling and installing</h3> <p> <ul> @@ -3066,7 +3082,7 @@ crossroads, follow these steps. <p> </ul> <p> -<a name="l75"></a> +<a name="l76"></a> <h3>7.3: Configuring crossroads</h3> <p> Now that the binary is available on your system, you need to create a @@ -3115,13 +3131,13 @@ which crossroads daemons are running. Finally, the tailing of <code>/var/log/messages</code> shows what's going on -- especially if you have <code>verbosity true</code> statements in the configuration. <p> -<a name="l76"></a> +<a name="l77"></a> <h3>7.4: A boot script</h3> <p> Finally, you may want to create a boot-time startup script. The exact procedure depends on the used Unix flavor. <p> -<a name="l77"></a> +<a name="l78"></a> <strong>7.4.1: SysV Style Startup</strong> <p> On SysV style systems, there's a startup script directory @@ -3163,7 +3179,7 @@ If your runlevel is 5, then the right <code>cd</code> command is to <code>/etc/rc.d/rc5.d</code>. Alternatively, you can create the symlinks in both runlevel directories.</ul> <p> -<a name="l78"></a> +<a name="l79"></a> <strong>7.4.2: BSD Style Startup</strong> <p> On BSD style systems, daemons are booted directly from <code>/etc/rc</code> and diff --git a/doc/crossroads.man b/doc/crossroads.man @@ -1,6 +1,6 @@ -.TH "Crossroads 1\&.34" "2005, 2006, ff\&." +.TH "Crossroads 1\&.35" "2005, 2006, ff\&." .PP -.SH "Crossroads 1\&.34" +.SH "Crossroads 1\&.35" .SH "Karel Kubat" .SH "e-tunity" .SH "2005, 2006, ff\&." @@ -965,7 +965,24 @@ off\&. .PP -.SH "4\&.3\&.3: weight - When a back end is more equal than others" +.SH "4\&.3\&.3: retries - Specifying allowed failures" +.IP "Description:" +Back ends that are \&'flaky\&' or on a less reliable network can be +marked as unavailable after not just one failure, but after +e\&.g\&. three\&. You can use this configuration if you suspect that +spurious errors cause otherwise \&'good\&' back ends to be marked as +unavailable, while they in fact still could be used\&. +.IP "Syntax:" +\f(CWretries\fP \fInumber\fP; where \fInumber\fP is the threshold of bad +connections\&. Once exceeded, Crossroads will mark a back end as +unavailable\&. +.IP "Default:" +1; a back end is assumed to be unavailable after the first bad +connection\&. + +.PP + +.SH "4\&.3\&.4: weight - When a back end is more equal than others" .IP "Description:" To influence how backends are selected, a backend can specify its \&'weight\&' in the process\&. The higher the weight, the less likely a @@ -986,7 +1003,7 @@ a back end is .PP -.SH "4\&.3\&.4: decay - Levelling out activity of a back end" +.SH "4\&.3\&.5: decay - Levelling out activity of a back end" .IP "Description:" To make sure that a \&'spike\&' of activity doesn\&'t influence the perceived load of a back end forever, you may @@ -1010,7 +1027,7 @@ hit\&. .PP -.SH "4\&.3\&.5: onstart, onend, onfail - Action Hooks" +.SH "4\&.3\&.6: onstart, onend, onfail - Action Hooks" .IP "Description:" The three directives \f(CWonstart\fP, \f(CWonend\fP and \f(CWonfail\fP can be specified to start system commands (external programs) when a @@ -1079,7 +1096,7 @@ connection, success or failure of a back end\&. .PP -.SH "4\&.3\&.6: trafficlog and throughputlog - Debugging and Performance Aids" +.SH "4\&.3\&.7: trafficlog and throughputlog - Debugging and Performance Aids" .IP "Description:" Two directives are available to log network traffic to files\&. They are \f(CWtrafficlog\fP and @@ -1102,7 +1119,7 @@ none .PP -.SH "4\&.3\&.7: stickycookie - Back end selection with an HTTP cookie" +.SH "4\&.3\&.8: stickycookie - Back end selection with an HTTP cookie" .IP "Description:" The directive \f(CWstickycookie\fP \fIvalue\fP causes Crossroads to unpack clients\&' requests, to check for @@ -1144,7 +1161,7 @@ There is no default\&. .PP -.SH "4\&.3\&.8: HTTP Header Modification Directives" +.SH "4\&.3\&.9: HTTP Header Modification Directives" .IP "Description:" Crossroads understands the following header modification directives: \f(CWaddclientheader\fP, diff --git a/doc/crossroads.pdf b/doc/crossroads.pdf Binary files differ. diff --git a/etc/Makefile.def b/etc/Makefile.def @@ -3,7 +3,7 @@ # Versioning. This defines the overall version ID and must match the topmost # entry in the ChangeLog. -VER = 1.34 +VER = 1.35 # Revision version, auto-detected. REVVER = $(shell ../etc/svnrev ../ChangeLog ../etc/svnrev.txt) diff --git a/src/allocreporter.c b/src/allocreporter.c @@ -1,5 +1,5 @@ /************************************************************************* - * This file is part of Crosroads 1.34, a load balancer and fail over + * This file is part of Crosroads 1.35, a load balancer and fail over * utility for TCP. Copyright (c) Karel Kubat, distributed under GPL. * Visit http://crossroads.e-tunity.com for information. *************************************************************************/ diff --git a/src/ansistamp.c b/src/ansistamp.c @@ -1,5 +1,5 @@ /************************************************************************* - * This file is part of Crosroads 1.34, a load balancer and fail over + * This file is part of Crosroads 1.35, a load balancer and fail over * utility for TCP. Copyright (c) Karel Kubat, distributed under GPL. * Visit http://crossroads.e-tunity.com for information. *************************************************************************/ diff --git a/src/backendavailable.c b/src/backendavailable.c @@ -1,5 +1,5 @@ /************************************************************************* - * This file is part of Crosroads 1.34, a load balancer and fail over + * This file is part of Crosroads 1.35, a load balancer and fail over * utility for TCP. Copyright (c) Karel Kubat, distributed under GPL. * Visit http://crossroads.e-tunity.com for information. *************************************************************************/ diff --git a/src/backendconnect.c b/src/backendconnect.c @@ -1,5 +1,5 @@ /************************************************************************* - * This file is part of Crosroads 1.34, a load balancer and fail over + * This file is part of Crosroads 1.35, a load balancer and fail over * utility for TCP. Copyright (c) Karel Kubat, distributed under GPL. * Visit http://crossroads.e-tunity.com for information. *************************************************************************/ diff --git a/src/backendcount.c b/src/backendcount.c @@ -1,5 +1,5 @@ /************************************************************************* - * This file is part of Crosroads 1.34, a load balancer and fail over + * This file is part of Crosroads 1.35, a load balancer and fail over * utility for TCP. Copyright (c) Karel Kubat, distributed under GPL. * Visit http://crossroads.e-tunity.com for information. *************************************************************************/ diff --git a/src/choosebackend.c b/src/choosebackend.c @@ -1,5 +1,5 @@ /************************************************************************* - * This file is part of Crosroads 1.34, a load balancer and fail over + * This file is part of Crosroads 1.35, a load balancer and fail over * utility for TCP. Copyright (c) Karel Kubat, distributed under GPL. * Visit http://crossroads.e-tunity.com for information. *************************************************************************/ diff --git a/src/configtest.c b/src/configtest.c @@ -1,5 +1,5 @@ /************************************************************************* - * This file is part of Crosroads 1.34, a load balancer and fail over + * This file is part of Crosroads 1.35, a load balancer and fail over * utility for TCP. Copyright (c) Karel Kubat, distributed under GPL. * Visit http://crossroads.e-tunity.com for information. *************************************************************************/ diff --git a/src/copysockets.c b/src/copysockets.c @@ -1,5 +1,5 @@ /************************************************************************* - * This file is part of Crosroads 1.34, a load balancer and fail over + * This file is part of Crosroads 1.35, a load balancer and fail over * utility for TCP. Copyright (c) Karel Kubat, distributed under GPL. * Visit http://crossroads.e-tunity.com for information. *************************************************************************/ diff --git a/src/createcommandlinespace.c b/src/createcommandlinespace.c @@ -1,5 +1,5 @@ /************************************************************************* - * This file is part of Crosroads 1.34, a load balancer and fail over + * This file is part of Crosroads 1.35, a load balancer and fail over * utility for TCP. Copyright (c) Karel Kubat, distributed under GPL. * Visit http://crossroads.e-tunity.com for information. *************************************************************************/ diff --git a/src/crossroads.h b/src/crossroads.h @@ -1,5 +1,5 @@ /************************************************************************* - * This file is part of Crosroads 1.34, a load balancer and fail over + * This file is part of Crosroads 1.35, a load balancer and fail over * utility for TCP. Copyright (c) Karel Kubat, distributed under GPL. * Visit http://crossroads.e-tunity.com for information. *************************************************************************/ @@ -89,7 +89,8 @@ typedef enum { /* Config parsing related */ cf_denyfromspec, cf_allowfilespec, cf_denyfilespec, - cf_useraccountspec + cf_useraccountspec, + cf_retriesspec, } Conftype; typedef union { /* Integer of string value */ @@ -149,6 +150,7 @@ typedef struct { /* Backend description */ int nsetserverheader; /* .. table size */ char **appendserverheader; /* .. server hdrs to APPEND */ int nappendserverheader; /* .. table size */ + int retries; /* .. # retries before unavailable */ } Backend; typedef struct { /* Filtering information: */ @@ -201,6 +203,7 @@ typedef struct { /* Backend state */ double nsec; /* .. connection durations */ double avg_nsec; /* .. averaged over # connections */ unsigned nclients; /* .. active clients */ + unsigned fail; /* .. failures so far */ } Backendstate; typedef struct { /* Service reporting (shmem) */ diff --git a/src/deallocreporter.c b/src/deallocreporter.c @@ -1,5 +1,5 @@ /************************************************************************* - * This file is part of Crosroads 1.34, a load balancer and fail over + * This file is part of Crosroads 1.35, a load balancer and fail over * utility for TCP. Copyright (c) Karel Kubat, distributed under GPL. * Visit http://crossroads.e-tunity.com for information. *************************************************************************/ diff --git a/src/decrclientcount.c b/src/decrclientcount.c @@ -1,5 +1,5 @@ /************************************************************************* - * This file is part of Crosroads 1.34, a load balancer and fail over + * This file is part of Crosroads 1.35, a load balancer and fail over * utility for TCP. Copyright (c) Karel Kubat, distributed under GPL. * Visit http://crossroads.e-tunity.com for information. *************************************************************************/ diff --git a/src/error.c b/src/error.c @@ -1,5 +1,5 @@ /************************************************************************* - * This file is part of Crosroads 1.34, a load balancer and fail over + * This file is part of Crosroads 1.35, a load balancer and fail over * utility for TCP. Copyright (c) Karel Kubat, distributed under GPL. * Visit http://crossroads.e-tunity.com for information. *************************************************************************/ diff --git a/src/forktcpservicer.c b/src/forktcpservicer.c @@ -1,5 +1,5 @@ /************************************************************************* - * This file is part of Crosroads 1.34, a load balancer and fail over + * This file is part of Crosroads 1.35, a load balancer and fail over * utility for TCP. Copyright (c) Karel Kubat, distributed under GPL. * Visit http://crossroads.e-tunity.com for information. *************************************************************************/ diff --git a/src/hashpjw.c b/src/hashpjw.c @@ -1,5 +1,5 @@ /************************************************************************* - * This file is part of Crosroads 1.34, a load balancer and fail over + * This file is part of Crosroads 1.35, a load balancer and fail over * utility for TCP. Copyright (c) Karel Kubat, distributed under GPL. * Visit http://crossroads.e-tunity.com for information. *************************************************************************/ diff --git a/src/httpcopy.c b/src/httpcopy.c @@ -1,5 +1,5 @@ /************************************************************************* - * This file is part of Crosroads 1.34, a load balancer and fail over + * This file is part of Crosroads 1.35, a load balancer and fail over * utility for TCP. Copyright (c) Karel Kubat, distributed under GPL. * Visit http://crossroads.e-tunity.com for information. *************************************************************************/ diff --git a/src/httperror.c b/src/httperror.c @@ -1,5 +1,5 @@ /************************************************************************* - * This file is part of Crosroads 1.34, a load balancer and fail over + * This file is part of Crosroads 1.35, a load balancer and fail over * utility for TCP. Copyright (c) Karel Kubat, distributed under GPL. * Visit http://crossroads.e-tunity.com for information. *************************************************************************/ diff --git a/src/httpheaderaddheader.c b/src/httpheaderaddheader.c @@ -1,5 +1,5 @@ /************************************************************************* - * This file is part of Crosroads 1.34, a load balancer and fail over + * This file is part of Crosroads 1.35, a load balancer and fail over * utility for TCP. Copyright (c) Karel Kubat, distributed under GPL. * Visit http://crossroads.e-tunity.com for information. *************************************************************************/ diff --git a/src/httpheaderappendheader.c b/src/httpheaderappendheader.c @@ -1,5 +1,5 @@ /************************************************************************* - * This file is part of Crosroads 1.34, a load balancer and fail over + * This file is part of Crosroads 1.35, a load balancer and fail over * utility for TCP. Copyright (c) Karel Kubat, distributed under GPL. * Visit http://crossroads.e-tunity.com for information. *************************************************************************/ diff --git a/src/httpheaderconnectiontype.c b/src/httpheaderconnectiontype.c @@ -1,5 +1,5 @@ /************************************************************************* - * This file is part of Crosroads 1.34, a load balancer and fail over + * This file is part of Crosroads 1.35, a load balancer and fail over * utility for TCP. Copyright (c) Karel Kubat, distributed under GPL. * Visit http://crossroads.e-tunity.com for information. *************************************************************************/ diff --git a/src/httpheaderfree.c b/src/httpheaderfree.c @@ -1,5 +1,5 @@ /************************************************************************* - * This file is part of Crosroads 1.34, a load balancer and fail over + * This file is part of Crosroads 1.35, a load balancer and fail over * utility for TCP. Copyright (c) Karel Kubat, distributed under GPL. * Visit http://crossroads.e-tunity.com for information. *************************************************************************/ diff --git a/src/httpheaderhascookie.c b/src/httpheaderhascookie.c @@ -1,5 +1,5 @@ /************************************************************************* - * This file is part of Crosroads 1.34, a load balancer and fail over + * This file is part of Crosroads 1.35, a load balancer and fail over * utility for TCP. Copyright (c) Karel Kubat, distributed under GPL. * Visit http://crossroads.e-tunity.com for information. *************************************************************************/ diff --git a/src/httpheaderhttpver.c b/src/httpheaderhttpver.c @@ -1,5 +1,5 @@ /************************************************************************* - * This file is part of Crosroads 1.34, a load balancer and fail over + * This file is part of Crosroads 1.35, a load balancer and fail over * utility for TCP. Copyright (c) Karel Kubat, distributed under GPL. * Visit http://crossroads.e-tunity.com for information. *************************************************************************/ diff --git a/src/httpheadernew.c b/src/httpheadernew.c @@ -1,5 +1,5 @@ /************************************************************************* - * This file is part of Crosroads 1.34, a load balancer and fail over + * This file is part of Crosroads 1.35, a load balancer and fail over * utility for TCP. Copyright (c) Karel Kubat, distributed under GPL. * Visit http://crossroads.e-tunity.com for information. *************************************************************************/ diff --git a/src/httpheaderread.c b/src/httpheaderread.c @@ -1,5 +1,5 @@ /************************************************************************* - * This file is part of Crosroads 1.34, a load balancer and fail over + * This file is part of Crosroads 1.35, a load balancer and fail over * utility for TCP. Copyright (c) Karel Kubat, distributed under GPL. * Visit http://crossroads.e-tunity.com for information. *************************************************************************/ diff --git a/src/httpheaderremoveheader.c b/src/httpheaderremoveheader.c @@ -1,5 +1,5 @@ /************************************************************************* - * This file is part of Crosroads 1.34, a load balancer and fail over + * This file is part of Crosroads 1.35, a load balancer and fail over * utility for TCP. Copyright (c) Karel Kubat, distributed under GPL. * Visit http://crossroads.e-tunity.com for information. *************************************************************************/ diff --git a/src/httpheadersetheader.c b/src/httpheadersetheader.c @@ -1,5 +1,5 @@ /************************************************************************* - * This file is part of Crosroads 1.34, a load balancer and fail over + * This file is part of Crosroads 1.35, a load balancer and fail over * utility for TCP. Copyright (c) Karel Kubat, distributed under GPL. * Visit http://crossroads.e-tunity.com for information. *************************************************************************/ diff --git a/src/httpheaderval.c b/src/httpheaderval.c @@ -1,5 +1,5 @@ /************************************************************************* - * This file is part of Crosroads 1.34, a load balancer and fail over + * This file is part of Crosroads 1.35, a load balancer and fail over * utility for TCP. Copyright (c) Karel Kubat, distributed under GPL. * Visit http://crossroads.e-tunity.com for information. *************************************************************************/ diff --git a/src/httpheaderwrite.c b/src/httpheaderwrite.c @@ -1,5 +1,5 @@ /************************************************************************* - * This file is part of Crosroads 1.34, a load balancer and fail over + * This file is part of Crosroads 1.35, a load balancer and fail over * utility for TCP. Copyright (c) Karel Kubat, distributed under GPL. * Visit http://crossroads.e-tunity.com for information. *************************************************************************/ diff --git a/src/httpinsertheader.c b/src/httpinsertheader.c @@ -1,5 +1,5 @@ /************************************************************************* - * This file is part of Crosroads 1.34, a load balancer and fail over + * This file is part of Crosroads 1.35, a load balancer and fail over * utility for TCP. Copyright (c) Karel Kubat, distributed under GPL. * Visit http://crossroads.e-tunity.com for information. *************************************************************************/ diff --git a/src/httpserve.c b/src/httpserve.c @@ -1,5 +1,5 @@ /************************************************************************* - * This file is part of Crosroads 1.34, a load balancer and fail over + * This file is part of Crosroads 1.35, a load balancer and fail over * utility for TCP. Copyright (c) Karel Kubat, distributed under GPL. * Visit http://crossroads.e-tunity.com for information. *************************************************************************/ diff --git a/src/httpserversocket.c b/src/httpserversocket.c @@ -1,5 +1,5 @@ /************************************************************************* - * This file is part of Crosroads 1.34, a load balancer and fail over + * This file is part of Crosroads 1.35, a load balancer and fail over * utility for TCP. Copyright (c) Karel Kubat, distributed under GPL. * Visit http://crossroads.e-tunity.com for information. *************************************************************************/ diff --git a/src/httpwrite.c b/src/httpwrite.c @@ -1,5 +1,5 @@ /************************************************************************* - * This file is part of Crosroads 1.34, a load balancer and fail over + * This file is part of Crosroads 1.35, a load balancer and fail over * utility for TCP. Copyright (c) Karel Kubat, distributed under GPL. * Visit http://crossroads.e-tunity.com for information. *************************************************************************/ diff --git a/src/incrclientcount.c b/src/incrclientcount.c @@ -1,5 +1,5 @@ /************************************************************************* - * This file is part of Crosroads 1.34, a load balancer and fail over + * This file is part of Crosroads 1.35, a load balancer and fail over * utility for TCP. Copyright (c) Karel Kubat, distributed under GPL. * Visit http://crossroads.e-tunity.com for information. *************************************************************************/ diff --git a/src/initsockaddr.c b/src/initsockaddr.c @@ -1,5 +1,5 @@ /************************************************************************* - * This file is part of Crosroads 1.34, a load balancer and fail over + * This file is part of Crosroads 1.35, a load balancer and fail over * utility for TCP. Copyright (c) Karel Kubat, distributed under GPL. * Visit http://crossroads.e-tunity.com for information. *************************************************************************/ diff --git a/src/interrupt.c b/src/interrupt.c @@ -1,5 +1,5 @@ /************************************************************************* - * This file is part of Crosroads 1.34, a load balancer and fail over + * This file is part of Crosroads 1.35, a load balancer and fail over * utility for TCP. Copyright (c) Karel Kubat, distributed under GPL. * Visit http://crossroads.e-tunity.com for information. *************************************************************************/ diff --git a/src/ipfaddallow.c b/src/ipfaddallow.c @@ -1,5 +1,5 @@ /************************************************************************* - * This file is part of Crosroads 1.34, a load balancer and fail over + * This file is part of Crosroads 1.35, a load balancer and fail over * utility for TCP. Copyright (c) Karel Kubat, distributed under GPL. * Visit http://crossroads.e-tunity.com for information. *************************************************************************/ diff --git a/src/ipfadddeny.c b/src/ipfadddeny.c @@ -1,5 +1,5 @@ /************************************************************************* - * This file is part of Crosroads 1.34, a load balancer and fail over + * This file is part of Crosroads 1.35, a load balancer and fail over * utility for TCP. Copyright (c) Karel Kubat, distributed under GPL. * Visit http://crossroads.e-tunity.com for information. *************************************************************************/ diff --git a/src/ipfallowed.c b/src/ipfallowed.c @@ -1,5 +1,5 @@ /************************************************************************* - * This file is part of Crosroads 1.34, a load balancer and fail over + * This file is part of Crosroads 1.35, a load balancer and fail over * utility for TCP. Copyright (c) Karel Kubat, distributed under GPL. * Visit http://crossroads.e-tunity.com for information. *************************************************************************/ diff --git a/src/ipfdenied.c b/src/ipfdenied.c @@ -1,5 +1,5 @@ /************************************************************************* - * This file is part of Crosroads 1.34, a load balancer and fail over + * This file is part of Crosroads 1.35, a load balancer and fail over * utility for TCP. Copyright (c) Karel Kubat, distributed under GPL. * Visit http://crossroads.e-tunity.com for information. *************************************************************************/ diff --git a/src/ipfloadfile.c b/src/ipfloadfile.c @@ -1,5 +1,5 @@ /************************************************************************* - * This file is part of Crosroads 1.34, a load balancer and fail over + * This file is part of Crosroads 1.35, a load balancer and fail over * utility for TCP. Copyright (c) Karel Kubat, distributed under GPL. * Visit http://crossroads.e-tunity.com for information. *************************************************************************/ diff --git a/src/ipfmatch.c b/src/ipfmatch.c @@ -1,5 +1,5 @@ /************************************************************************* - * This file is part of Crosroads 1.34, a load balancer and fail over + * This file is part of Crosroads 1.35, a load balancer and fail over * utility for TCP. Copyright (c) Karel Kubat, distributed under GPL. * Visit http://crossroads.e-tunity.com for information. *************************************************************************/ diff --git a/src/ipfparse.c b/src/ipfparse.c @@ -1,5 +1,5 @@ /************************************************************************* - * This file is part of Crosroads 1.34, a load balancer and fail over + * This file is part of Crosroads 1.35, a load balancer and fail over * utility for TCP. Copyright (c) Karel Kubat, distributed under GPL. * Visit http://crossroads.e-tunity.com for information. *************************************************************************/ diff --git a/src/ishexdigit.c b/src/ishexdigit.c @@ -1,5 +1,5 @@ /************************************************************************* - * This file is part of Crosroads 1.34, a load balancer and fail over + * This file is part of Crosroads 1.35, a load balancer and fail over * utility for TCP. Copyright (c) Karel Kubat, distributed under GPL. * Visit http://crossroads.e-tunity.com for information. *************************************************************************/ diff --git a/src/isspace.c b/src/isspace.c @@ -1,5 +1,5 @@ /************************************************************************* - * This file is part of Crosroads 1.34, a load balancer and fail over + * This file is part of Crosroads 1.35, a load balancer and fail over * utility for TCP. Copyright (c) Karel Kubat, distributed under GPL. * Visit http://crossroads.e-tunity.com for information. *************************************************************************/ diff --git a/src/lexer.c b/src/lexer.c @@ -1,5 +1,5 @@ /************************************************************************* - * This file is part of Crosroads 1.34, a load balancer and fail over + * This file is part of Crosroads 1.35, a load balancer and fail over * utility for TCP. Copyright (c) Karel Kubat, distributed under GPL. * Visit http://crossroads.e-tunity.com for information. *************************************************************************/ @@ -288,55 +288,56 @@ static void yy_fatal_error YY_PROTO(( yyconst char msg[] )); *yy_cp = '\0'; \ yy_c_buf_p = yy_cp; -#define YY_NUM_RULES 65 -#define YY_END_OF_BUFFER 66 -static yyconst short int yy_accept[411] = +#define YY_NUM_RULES 66 +#define YY_END_OF_BUFFER 67 +static yyconst short int yy_accept[416] = { 0, - 0, 0, 0, 0, 0, 0, 66, 54, 52, 53, - 54, 54, 51, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 63, 64, 62, 63, 63, 61, 58, 57, - 58, 52, 0, 1, 55, 0, 51, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 49, 50, 48, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 0, 59, 0, 60, 56, 0, 2, 50, 50, - 28, 50, 50, 50, 50, 50, 50, 50, 50, 50, - - 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 48, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 30, 50, 50, 50, 50, - 6, 5, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 27, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 14, - 50, 50, 50, 50, 50, 36, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - - 50, 50, 50, 50, 50, 50, 50, 50, 4, 50, - 50, 50, 50, 20, 50, 50, 50, 50, 50, 50, - 50, 35, 50, 18, 50, 50, 15, 50, 50, 50, - 7, 50, 50, 50, 50, 50, 13, 50, 50, 50, - 50, 50, 50, 8, 9, 50, 50, 50, 21, 50, - 50, 50, 50, 50, 50, 50, 34, 50, 50, 3, - 50, 50, 50, 50, 50, 50, 50, 10, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 47, - 45, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 46, 44, 50, - - 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 24, 50, 19, 50, 50, 50, 50, 50, - 50, 17, 50, 50, 50, 29, 50, 32, 50, 50, - 50, 50, 50, 50, 50, 50, 33, 50, 50, 50, - 50, 50, 50, 50, 25, 50, 50, 50, 50, 50, - 50, 16, 50, 50, 50, 50, 50, 37, 50, 50, - 50, 50, 50, 22, 50, 50, 50, 50, 50, 50, - 31, 50, 50, 50, 50, 50, 50, 12, 50, 50, - 50, 38, 41, 50, 50, 50, 23, 50, 39, 42, - - 50, 50, 50, 26, 50, 50, 11, 40, 43, 0 + 0, 0, 0, 0, 0, 0, 67, 55, 53, 54, + 55, 55, 52, 51, 51, 51, 51, 51, 51, 51, + 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, + 51, 51, 64, 65, 63, 64, 64, 62, 59, 58, + 59, 53, 0, 1, 56, 0, 52, 51, 51, 51, + 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, + 51, 51, 51, 50, 51, 49, 51, 51, 51, 51, + 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, + 51, 0, 60, 0, 61, 57, 0, 2, 51, 51, + 29, 51, 51, 51, 51, 51, 51, 51, 51, 51, + + 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, + 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, + 51, 51, 51, 51, 51, 51, 51, 49, 51, 51, + 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, + 51, 51, 51, 51, 51, 51, 31, 51, 51, 51, + 51, 6, 5, 51, 51, 51, 51, 51, 51, 51, + 51, 51, 51, 51, 28, 51, 51, 51, 51, 51, + 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, + 51, 15, 51, 51, 51, 51, 51, 37, 51, 51, + 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, + + 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, + 51, 4, 51, 51, 51, 51, 21, 51, 51, 51, + 51, 51, 51, 51, 36, 51, 19, 51, 51, 51, + 16, 51, 51, 51, 7, 51, 51, 51, 51, 51, + 14, 51, 51, 51, 51, 51, 51, 8, 9, 51, + 51, 51, 22, 51, 51, 51, 51, 51, 51, 51, + 35, 10, 51, 51, 3, 51, 51, 51, 51, 51, + 51, 51, 11, 51, 51, 51, 51, 51, 51, 51, + 51, 51, 51, 51, 48, 46, 51, 51, 51, 51, + 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, + + 51, 51, 47, 45, 51, 51, 51, 51, 51, 51, + 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, + 51, 51, 51, 51, 51, 51, 51, 25, 51, 20, + 51, 51, 51, 51, 51, 51, 18, 51, 51, 51, + 30, 51, 33, 51, 51, 51, 51, 51, 51, 51, + 51, 34, 51, 51, 51, 51, 51, 51, 51, 26, + 51, 51, 51, 51, 51, 51, 17, 51, 51, 51, + 51, 51, 38, 51, 51, 51, 51, 51, 23, 51, + 51, 51, 51, 51, 51, 32, 51, 51, 51, 51, + 51, 51, 13, 51, 51, 51, 39, 42, 51, 51, + + 51, 24, 51, 40, 43, 51, 51, 51, 27, 51, + 51, 12, 41, 44, 0 } ; static yyconst int yy_ec[256] = @@ -379,216 +380,220 @@ static yyconst int yy_meta[37] = 2, 2, 2, 2, 2, 2 } ; -static yyconst short int yy_base[418] = +static yyconst short int yy_base[423] = { 0, - 0, 0, 34, 39, 44, 45, 439, 440, 47, 440, - 435, 46, 427, 0, 40, 45, 410, 40, 401, 421, - 403, 419, 405, 44, 404, 47, 55, 54, 400, 411, - 410, 409, 440, 440, 440, 420, 417, 440, 440, 440, - 414, 66, 419, 440, 440, 418, 410, 0, 403, 395, - 382, 389, 400, 389, 62, 388, 68, 383, 387, 380, - 386, 378, 373, 0, 388, 69, 388, 376, 378, 370, - 370, 51, 376, 378, 370, 71, 370, 379, 367, 373, - 364, 387, 440, 384, 440, 440, 387, 440, 75, 363, - 0, 371, 365, 370, 69, 354, 356, 362, 357, 368, - - 345, 352, 351, 360, 347, 348, 359, 348, 359, 341, - 342, 339, 352, 346, 341, 333, 79, 342, 348, 336, - 343, 343, 342, 330, 343, 337, 0, 332, 337, 320, - 327, 80, 321, 329, 324, 320, 331, 310, 328, 309, - 325, 329, 311, 312, 322, 0, 312, 321, 315, 322, - 0, 0, 308, 301, 316, 79, 308, 313, 312, 306, - 296, 308, 0, 312, 298, 303, 301, 293, 302, 303, - 293, 291, 290, 298, 289, 300, 295, 294, 295, 0, - 78, 279, 280, 282, 281, 0, 282, 276, 279, 281, - 273, 272, 284, 277, 269, 261, 260, 275, 272, 277, - - 262, 260, 272, 256, 84, 86, 271, 267, 0, 260, - 267, 253, 254, 0, 251, 257, 253, 263, 264, 263, - 250, 0, 244, 0, 248, 246, 0, 254, 253, 237, - 0, 94, 248, 252, 251, 90, 0, 240, 247, 240, - 236, 238, 243, 0, 0, 229, 243, 236, 0, 235, - 238, 230, 233, 234, 228, 233, 0, 230, 234, 0, - 222, 229, 219, 214, 216, 219, 215, 0, 210, 209, - 210, 220, 212, 214, 206, 212, 202, 205, 204, 0, - 0, 205, 210, 207, 211, 204, 203, 193, 194, 195, - 190, 188, 192, 186, 181, 195, 194, 0, 0, 196, - - 180, 184, 189, 184, 183, 181, 185, 192, 174, 178, - 177, 181, 180, 177, 171, 167, 177, 170, 177, 176, - 167, 174, 0, 164, 0, 159, 172, 172, 161, 164, - 154, 0, 166, 165, 160, 0, 157, 0, 149, 165, - 164, 146, 147, 149, 152, 155, 0, 155, 144, 152, - 155, 154, 149, 139, 0, 148, 147, 142, 141, 131, - 135, 0, 135, 132, 128, 139, 138, 0, 134, 135, - 134, 133, 132, 0, 131, 130, 117, 113, 127, 126, - 0, 114, 113, 127, 126, 112, 109, 0, 123, 107, - 106, 0, 0, 117, 116, 100, 0, 107, 0, 0, - - 112, 111, 83, 0, 82, 31, 0, 0, 0, 440, - 115, 117, 119, 38, 121, 123, 125 + 0, 0, 34, 39, 44, 45, 444, 445, 47, 445, + 440, 46, 432, 0, 40, 45, 415, 40, 406, 426, + 408, 424, 410, 44, 409, 47, 55, 54, 405, 416, + 415, 414, 445, 445, 445, 425, 422, 445, 445, 445, + 419, 66, 424, 445, 445, 423, 415, 0, 408, 400, + 387, 394, 405, 394, 62, 393, 68, 388, 392, 385, + 391, 383, 378, 0, 393, 69, 393, 381, 383, 49, + 376, 62, 382, 384, 376, 71, 376, 385, 373, 379, + 370, 393, 445, 390, 445, 445, 393, 445, 79, 369, + 0, 377, 371, 376, 73, 360, 362, 368, 363, 374, + + 351, 358, 357, 366, 353, 354, 365, 354, 365, 347, + 348, 345, 358, 345, 351, 346, 338, 80, 347, 353, + 341, 348, 348, 347, 335, 348, 342, 0, 337, 342, + 325, 332, 80, 326, 334, 329, 325, 336, 315, 333, + 314, 330, 334, 316, 317, 327, 0, 317, 326, 320, + 327, 0, 0, 313, 317, 305, 320, 83, 312, 317, + 316, 310, 300, 312, 0, 316, 302, 307, 305, 297, + 306, 307, 297, 295, 294, 302, 293, 304, 299, 298, + 299, 0, 84, 283, 284, 286, 285, 0, 286, 280, + 283, 289, 284, 276, 275, 287, 280, 272, 264, 263, + + 278, 275, 280, 265, 263, 275, 259, 85, 86, 274, + 270, 0, 263, 270, 256, 257, 0, 254, 260, 256, + 266, 267, 266, 253, 0, 247, 0, 247, 250, 248, + 0, 256, 255, 239, 0, 96, 250, 254, 253, 93, + 0, 242, 249, 242, 238, 240, 245, 0, 0, 231, + 245, 238, 0, 237, 240, 232, 235, 236, 230, 235, + 0, 0, 232, 236, 0, 224, 231, 221, 216, 218, + 221, 217, 0, 212, 211, 212, 222, 214, 216, 208, + 214, 204, 207, 206, 0, 0, 207, 212, 209, 213, + 206, 205, 195, 196, 197, 192, 190, 194, 188, 183, + + 197, 196, 0, 0, 198, 182, 186, 191, 186, 185, + 183, 187, 194, 176, 180, 179, 183, 182, 179, 173, + 169, 179, 172, 179, 178, 169, 176, 0, 166, 0, + 161, 174, 174, 163, 166, 156, 0, 168, 167, 162, + 0, 159, 0, 151, 167, 166, 148, 149, 151, 154, + 157, 0, 157, 146, 154, 157, 156, 151, 141, 0, + 150, 149, 144, 143, 133, 137, 0, 137, 134, 130, + 141, 140, 0, 136, 137, 136, 135, 134, 0, 133, + 132, 119, 115, 129, 128, 0, 116, 115, 129, 128, + 114, 111, 0, 125, 109, 108, 0, 0, 119, 118, + + 102, 0, 109, 0, 0, 114, 113, 99, 0, 79, + 31, 0, 0, 0, 445, 116, 118, 120, 38, 122, + 124, 126 } ; -static yyconst short int yy_def[418] = +static yyconst short int yy_def[423] = { 0, - 410, 1, 411, 411, 412, 412, 410, 410, 410, 410, - 413, 410, 410, 414, 414, 414, 414, 414, 414, 414, - 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, - 414, 414, 410, 410, 410, 415, 416, 410, 410, 410, - 410, 410, 413, 410, 410, 417, 410, 414, 414, 414, - 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, - 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, - 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, - 414, 415, 410, 416, 410, 410, 417, 410, 414, 414, - 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, - - 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, - 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, - 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, - 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, - 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, - 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, - 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, - 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, - 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, - 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, - - 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, - 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, - 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, - 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, - 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, - 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, - 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, - 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, - 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, - 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, - - 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, - 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, - 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, - 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, - 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, - 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, - 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, - 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, - 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, - 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, - - 414, 414, 414, 414, 414, 414, 414, 414, 414, 0, - 410, 410, 410, 410, 410, 410, 410 + 415, 1, 416, 416, 417, 417, 415, 415, 415, 415, + 418, 415, 415, 419, 419, 419, 419, 419, 419, 419, + 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, + 419, 419, 415, 415, 415, 420, 421, 415, 415, 415, + 415, 415, 418, 415, 415, 422, 415, 419, 419, 419, + 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, + 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, + 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, + 419, 420, 415, 421, 415, 415, 422, 415, 419, 419, + 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, + + 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, + 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, + 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, + 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, + 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, + 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, + 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, + 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, + 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, + 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, + + 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, + 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, + 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, + 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, + 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, + 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, + 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, + 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, + 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, + 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, + + 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, + 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, + 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, + 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, + 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, + 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, + 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, + 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, + 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, + 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, + + 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, + 419, 419, 419, 419, 0, 415, 415, 415, 415, 415, + 415, 415 } ; -static yyconst short int yy_nxt[477] = +static yyconst short int yy_nxt[482] = { 0, 8, 9, 10, 9, 8, 11, 8, 8, 12, 13, 8, 14, 15, 16, 17, 18, 19, 20, 14, 21, 14, 14, 14, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 14, 32, 14, 34, 35, 36, 48, 37, 34, 35, 36, 38, 37, 40, 40, 42, 38, - 42, 41, 41, 45, 46, 49, 57, 53, 409, 69, + 42, 41, 41, 45, 46, 49, 57, 53, 414, 69, 58, 65, 50, 70, 51, 54, 52, 42, 66, 42, - 59, 72, 71, 75, 73, 67, 95, 96, 116, 55, - 117, 76, 100, 121, 74, 108, 109, 97, 77, 128, - 98, 134, 101, 157, 135, 192, 171, 110, 216, 193, - - 242, 122, 172, 129, 240, 217, 268, 158, 263, 408, - 269, 241, 407, 264, 243, 33, 33, 39, 39, 43, - 43, 82, 82, 84, 84, 87, 87, 406, 405, 404, - 403, 402, 401, 400, 399, 398, 397, 396, 395, 394, - 393, 392, 391, 390, 389, 388, 387, 386, 385, 384, - 383, 382, 381, 380, 379, 378, 377, 376, 375, 374, - 373, 372, 371, 370, 369, 368, 367, 366, 365, 364, - 363, 362, 361, 360, 359, 358, 357, 356, 355, 354, - 353, 352, 351, 350, 349, 348, 347, 346, 345, 344, - 343, 342, 341, 340, 339, 338, 337, 336, 335, 334, - - 333, 332, 331, 330, 329, 328, 327, 326, 325, 324, - 323, 322, 321, 320, 319, 268, 318, 317, 316, 315, - 314, 313, 312, 311, 310, 309, 308, 307, 306, 305, - 304, 303, 302, 301, 300, 299, 298, 297, 296, 295, - 294, 293, 292, 291, 290, 289, 288, 287, 286, 285, - 284, 283, 282, 281, 280, 279, 278, 277, 276, 275, - 274, 273, 272, 271, 270, 267, 266, 265, 262, 261, - 260, 259, 258, 257, 256, 255, 254, 253, 252, 251, - 250, 249, 248, 247, 246, 245, 244, 239, 238, 237, - 236, 235, 234, 233, 232, 231, 230, 229, 228, 227, - - 226, 225, 224, 223, 222, 221, 220, 219, 218, 215, - 214, 213, 212, 211, 210, 209, 208, 207, 206, 205, - 204, 203, 202, 201, 200, 199, 198, 197, 196, 195, - 194, 191, 190, 189, 188, 187, 186, 185, 64, 184, - 183, 182, 181, 180, 179, 178, 177, 176, 175, 174, - 173, 170, 169, 168, 167, 166, 165, 164, 163, 127, - 162, 161, 160, 159, 156, 155, 154, 153, 152, 151, - 150, 149, 148, 147, 146, 145, 144, 143, 142, 141, - 140, 139, 138, 137, 136, 133, 132, 131, 130, 88, - 85, 83, 127, 126, 125, 124, 123, 120, 119, 118, - - 115, 114, 113, 112, 111, 64, 107, 106, 105, 104, - 103, 102, 99, 94, 93, 92, 91, 90, 89, 47, - 88, 44, 86, 85, 83, 81, 80, 79, 78, 68, - 64, 63, 62, 61, 60, 56, 47, 44, 410, 7, - 410, 410, 410, 410, 410, 410, 410, 410, 410, 410, - 410, 410, 410, 410, 410, 410, 410, 410, 410, 410, - 410, 410, 410, 410, 410, 410, 410, 410, 410, 410, - 410, 410, 410, 410, 410, 410 + 59, 72, 71, 75, 73, 67, 95, 96, 114, 55, + 115, 76, 100, 122, 74, 108, 109, 97, 77, 117, + 98, 118, 101, 129, 159, 135, 173, 110, 136, 195, + + 246, 123, 174, 196, 219, 244, 413, 130, 160, 273, + 268, 220, 245, 274, 247, 269, 33, 33, 39, 39, + 43, 43, 82, 82, 84, 84, 87, 87, 412, 411, + 410, 409, 408, 407, 406, 405, 404, 403, 402, 401, + 400, 399, 398, 397, 396, 395, 394, 393, 392, 391, + 390, 389, 388, 387, 386, 385, 384, 383, 382, 381, + 380, 379, 378, 377, 376, 375, 374, 373, 372, 371, + 370, 369, 368, 367, 366, 365, 364, 363, 362, 361, + 360, 359, 358, 357, 356, 355, 354, 353, 352, 351, + 350, 349, 348, 347, 346, 345, 344, 343, 342, 341, + + 340, 339, 338, 337, 336, 335, 334, 333, 332, 331, + 330, 329, 328, 327, 326, 325, 324, 273, 323, 322, + 321, 320, 319, 318, 317, 316, 315, 314, 313, 312, + 311, 310, 309, 308, 307, 306, 305, 304, 303, 302, + 301, 300, 299, 298, 297, 296, 295, 294, 293, 292, + 291, 290, 289, 288, 287, 286, 285, 284, 283, 282, + 281, 280, 279, 278, 277, 276, 275, 272, 271, 270, + 267, 266, 265, 264, 263, 262, 261, 260, 259, 258, + 257, 256, 255, 254, 253, 252, 251, 250, 249, 248, + 243, 242, 241, 240, 239, 238, 237, 236, 235, 234, + + 233, 232, 231, 230, 229, 228, 227, 226, 225, 224, + 223, 222, 221, 218, 217, 216, 215, 214, 213, 212, + 211, 210, 209, 208, 207, 206, 205, 204, 203, 202, + 201, 200, 199, 198, 197, 194, 193, 192, 191, 190, + 189, 188, 187, 64, 186, 185, 184, 183, 182, 181, + 180, 179, 178, 177, 176, 175, 172, 171, 170, 169, + 168, 167, 166, 165, 128, 164, 163, 162, 161, 158, + 157, 156, 155, 154, 153, 152, 151, 150, 149, 148, + 147, 146, 145, 144, 143, 142, 141, 140, 139, 138, + 137, 134, 133, 132, 131, 88, 85, 83, 128, 127, + + 126, 125, 124, 121, 120, 119, 116, 113, 112, 111, + 64, 107, 106, 105, 104, 103, 102, 99, 94, 93, + 92, 91, 90, 89, 47, 88, 44, 86, 85, 83, + 81, 80, 79, 78, 68, 64, 63, 62, 61, 60, + 56, 47, 44, 415, 7, 415, 415, 415, 415, 415, + 415, 415, 415, 415, 415, 415, 415, 415, 415, 415, + 415, 415, 415, 415, 415, 415, 415, 415, 415, 415, + 415, 415, 415, 415, 415, 415, 415, 415, 415, 415, + 415 } ; -static yyconst short int yy_chk[477] = +static yyconst short int yy_chk[482] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 3, 3, 3, 414, + 1, 1, 1, 1, 1, 1, 3, 3, 3, 419, 3, 4, 4, 4, 3, 4, 5, 6, 9, 4, - 9, 5, 6, 12, 12, 15, 18, 16, 406, 26, + 9, 5, 6, 12, 12, 15, 18, 16, 411, 26, 18, 24, 15, 26, 15, 16, 15, 42, 24, 42, - 18, 27, 26, 28, 27, 24, 55, 55, 72, 16, - 72, 28, 57, 76, 27, 66, 66, 55, 28, 89, - 55, 95, 57, 117, 95, 156, 132, 66, 181, 156, - - 206, 76, 132, 89, 205, 181, 236, 117, 232, 405, - 236, 205, 403, 232, 206, 411, 411, 412, 412, 413, - 413, 415, 415, 416, 416, 417, 417, 402, 401, 398, - 396, 395, 394, 391, 390, 389, 387, 386, 385, 384, - 383, 382, 380, 379, 378, 377, 376, 375, 373, 372, - 371, 370, 369, 367, 366, 365, 364, 363, 361, 360, - 359, 358, 357, 356, 354, 353, 352, 351, 350, 349, - 348, 346, 345, 344, 343, 342, 341, 340, 339, 337, - 335, 334, 333, 331, 330, 329, 328, 327, 326, 324, - 322, 321, 320, 319, 318, 317, 316, 315, 314, 313, - - 312, 311, 310, 309, 308, 307, 306, 305, 304, 303, - 302, 301, 300, 297, 296, 295, 294, 293, 292, 291, - 290, 289, 288, 287, 286, 285, 284, 283, 282, 279, - 278, 277, 276, 275, 274, 273, 272, 271, 270, 269, - 267, 266, 265, 264, 263, 262, 261, 259, 258, 256, - 255, 254, 253, 252, 251, 250, 248, 247, 246, 243, - 242, 241, 240, 239, 238, 235, 234, 233, 230, 229, - 228, 226, 225, 223, 221, 220, 219, 218, 217, 216, - 215, 213, 212, 211, 210, 208, 207, 204, 203, 202, - 201, 200, 199, 198, 197, 196, 195, 194, 193, 192, - - 191, 190, 189, 188, 187, 185, 184, 183, 182, 179, - 178, 177, 176, 175, 174, 173, 172, 171, 170, 169, - 168, 167, 166, 165, 164, 162, 161, 160, 159, 158, - 157, 155, 154, 153, 150, 149, 148, 147, 145, 144, - 143, 142, 141, 140, 139, 138, 137, 136, 135, 134, - 133, 131, 130, 129, 128, 126, 125, 124, 123, 122, - 121, 120, 119, 118, 116, 115, 114, 113, 112, 111, - 110, 109, 108, 107, 106, 105, 104, 103, 102, 101, - 100, 99, 98, 97, 96, 94, 93, 92, 90, 87, - 84, 82, 81, 80, 79, 78, 77, 75, 74, 73, - - 71, 70, 69, 68, 67, 65, 63, 62, 61, 60, - 59, 58, 56, 54, 53, 52, 51, 50, 49, 47, - 46, 43, 41, 37, 36, 32, 31, 30, 29, 25, - 23, 22, 21, 20, 19, 17, 13, 11, 7, 410, - 410, 410, 410, 410, 410, 410, 410, 410, 410, 410, - 410, 410, 410, 410, 410, 410, 410, 410, 410, 410, - 410, 410, 410, 410, 410, 410, 410, 410, 410, 410, - 410, 410, 410, 410, 410, 410 + 18, 27, 26, 28, 27, 24, 55, 55, 70, 16, + 70, 28, 57, 76, 27, 66, 66, 55, 28, 72, + 55, 72, 57, 89, 118, 95, 133, 66, 95, 158, + + 209, 76, 133, 158, 183, 208, 410, 89, 118, 240, + 236, 183, 208, 240, 209, 236, 416, 416, 417, 417, + 418, 418, 420, 420, 421, 421, 422, 422, 408, 407, + 406, 403, 401, 400, 399, 396, 395, 394, 392, 391, + 390, 389, 388, 387, 385, 384, 383, 382, 381, 380, + 378, 377, 376, 375, 374, 372, 371, 370, 369, 368, + 366, 365, 364, 363, 362, 361, 359, 358, 357, 356, + 355, 354, 353, 351, 350, 349, 348, 347, 346, 345, + 344, 342, 340, 339, 338, 336, 335, 334, 333, 332, + 331, 329, 327, 326, 325, 324, 323, 322, 321, 320, + + 319, 318, 317, 316, 315, 314, 313, 312, 311, 310, + 309, 308, 307, 306, 305, 302, 301, 300, 299, 298, + 297, 296, 295, 294, 293, 292, 291, 290, 289, 288, + 287, 284, 283, 282, 281, 280, 279, 278, 277, 276, + 275, 274, 272, 271, 270, 269, 268, 267, 266, 264, + 263, 260, 259, 258, 257, 256, 255, 254, 252, 251, + 250, 247, 246, 245, 244, 243, 242, 239, 238, 237, + 234, 233, 232, 230, 229, 228, 226, 224, 223, 222, + 221, 220, 219, 218, 216, 215, 214, 213, 211, 210, + 207, 206, 205, 204, 203, 202, 201, 200, 199, 198, + + 197, 196, 195, 194, 193, 192, 191, 190, 189, 187, + 186, 185, 184, 181, 180, 179, 178, 177, 176, 175, + 174, 173, 172, 171, 170, 169, 168, 167, 166, 164, + 163, 162, 161, 160, 159, 157, 156, 155, 154, 151, + 150, 149, 148, 146, 145, 144, 143, 142, 141, 140, + 139, 138, 137, 136, 135, 134, 132, 131, 130, 129, + 127, 126, 125, 124, 123, 122, 121, 120, 119, 117, + 116, 115, 114, 113, 112, 111, 110, 109, 108, 107, + 106, 105, 104, 103, 102, 101, 100, 99, 98, 97, + 96, 94, 93, 92, 90, 87, 84, 82, 81, 80, + + 79, 78, 77, 75, 74, 73, 71, 69, 68, 67, + 65, 63, 62, 61, 60, 59, 58, 56, 54, 53, + 52, 51, 50, 49, 47, 46, 43, 41, 37, 36, + 32, 31, 30, 29, 25, 23, 22, 21, 20, 19, + 17, 13, 11, 7, 415, 415, 415, 415, 415, 415, + 415, 415, 415, 415, 415, 415, 415, 415, 415, 415, + 415, 415, 415, 415, 415, 415, 415, 415, 415, 415, + 415, 415, 415, 415, 415, 415, 415, 415, 415, 415, + 415 } ; static yy_state_type yy_last_accepting_state; @@ -629,7 +634,7 @@ static int yywrap () { #define stringstate 1 #define commentstate 2 -#line 628 "lexer.c" +#line 633 "lexer.c" /* Macros after this point can all be overridden by user definitions in * section 1. @@ -783,7 +788,7 @@ YY_DECL #line 27 "lexer.l" -#line 782 "lexer.c" +#line 787 "lexer.c" if ( yy_init ) { @@ -834,13 +839,13 @@ yy_match: while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 411 ) + if ( yy_current_state >= 416 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; ++yy_cp; } - while ( yy_base[yy_current_state] != 440 ); + while ( yy_base[yy_current_state] != 445 ); yy_find_action: yy_act = yy_accept[yy_current_state]; @@ -945,46 +950,54 @@ case 10: YY_RULE_SETUP #line 77 "lexer.l" { - lmsg ("verbosity"); - return (VERBOSITY); + lmsg ("retries"); + return (RETRIES); } YY_BREAK case 11: YY_RULE_SETUP #line 82 "lexer.l" { - lmsg ("connectiontimeout"); - return (CONNECTIONTIMEOUT); + lmsg ("verbosity"); + return (VERBOSITY); } YY_BREAK case 12: YY_RULE_SETUP #line 87 "lexer.l" { - lmsg ("maxconnections"); - return (MAXCONNECTIONS); + lmsg ("connectiontimeout"); + return (CONNECTIONTIMEOUT); } YY_BREAK case 13: YY_RULE_SETUP #line 92 "lexer.l" { - lmsg ("weight"); - return (WEIGHT); + lmsg ("maxconnections"); + return (MAXCONNECTIONS); } YY_BREAK case 14: YY_RULE_SETUP #line 97 "lexer.l" { - lmsg ("decay"); - return (DECAY); + lmsg ("weight"); + return (WEIGHT); } YY_BREAK case 15: YY_RULE_SETUP #line 102 "lexer.l" { + lmsg ("decay"); + return (DECAY); +} + YY_BREAK +case 16: +YY_RULE_SETUP +#line 107 "lexer.l" +{ lmsg ("server"); BEGIN (stringstate); free (laststring); @@ -992,65 +1005,65 @@ YY_RULE_SETUP return (SERVER); } YY_BREAK -case 16: +case 17: YY_RULE_SETUP -#line 110 "lexer.l" +#line 115 "lexer.l" { lmsg ("dispatchmode"); return (DISPATCHMODE); } YY_BREAK -case 17: +case 18: YY_RULE_SETUP -#line 115 "lexer.l" +#line 120 "lexer.l" { lmsg ("roundrobin"); return (ROUNDROBIN); } YY_BREAK -case 18: +case 19: YY_RULE_SETUP -#line 120 "lexer.l" +#line 125 "lexer.l" { lmsg ("random"); return (RANDOM); } YY_BREAK -case 19: +case 20: YY_RULE_SETUP -#line 125 "lexer.l" +#line 130 "lexer.l" { lmsg ("byduration"); return (BYDURATION); } YY_BREAK -case 20: +case 21: YY_RULE_SETUP -#line 130 "lexer.l" +#line 135 "lexer.l" { lmsg ("bysize"); return (BYSIZE); } YY_BREAK -case 21: +case 22: YY_RULE_SETUP -#line 135 "lexer.l" +#line 140 "lexer.l" { lmsg ("byorder"); return (BYORDER); } YY_BREAK -case 22: +case 23: YY_RULE_SETUP -#line 140 "lexer.l" +#line 145 "lexer.l" { lmsg ("byconnections"); return (BYCONNECTIONS); } YY_BREAK -case 23: +case 24: YY_RULE_SETUP -#line 145 "lexer.l" +#line 150 "lexer.l" { lmsg ("externalhandler"); BEGIN (stringstate); @@ -1059,17 +1072,17 @@ YY_RULE_SETUP return (EXTERNALHANDLER); } YY_BREAK -case 24: +case 25: YY_RULE_SETUP -#line 153 "lexer.l" +#line 158 "lexer.l" { lmsg ("byclientip"); return (BYCLIENTIP); } YY_BREAK -case 25: +case 26: YY_RULE_SETUP -#line 158 "lexer.l" +#line 163 "lexer.l" { lmsg ("useraccount"); BEGIN (stringstate); @@ -1078,33 +1091,33 @@ YY_RULE_SETUP return (USERACCOUNT); } YY_BREAK -case 26: +case 27: YY_RULE_SETUP -#line 166 "lexer.l" +#line 171 "lexer.l" { lmsg ("revivinginterval"); return (REVIVINGINTERVAL); } YY_BREAK -case 27: +case 28: YY_RULE_SETUP -#line 171 "lexer.l" +#line 176 "lexer.l" { lmsg ("type"); return (TYPE); } YY_BREAK -case 28: +case 29: YY_RULE_SETUP -#line 176 "lexer.l" +#line 181 "lexer.l" { lmsg ("any"); return (ANY); } YY_BREAK -case 29: +case 30: YY_RULE_SETUP -#line 181 "lexer.l" +#line 186 "lexer.l" { lmsg ("stickyhttp"); warning ("The 'stickyhttp protocol is obsolte.\n" @@ -1112,17 +1125,17 @@ YY_RULE_SETUP return (HTTP); } YY_BREAK -case 30: +case 31: YY_RULE_SETUP -#line 188 "lexer.l" +#line 193 "lexer.l" { lmsg ("http"); return (HTTP); } YY_BREAK -case 31: +case 32: YY_RULE_SETUP -#line 193 "lexer.l" +#line 198 "lexer.l" { lmsg ("throughputlog"); BEGIN (stringstate); @@ -1131,9 +1144,9 @@ YY_RULE_SETUP return (THROUGHPUTLOG); } YY_BREAK -case 32: +case 33: YY_RULE_SETUP -#line 201 "lexer.l" +#line 206 "lexer.l" { lmsg ("trafficlog"); BEGIN (stringstate); @@ -1142,9 +1155,9 @@ YY_RULE_SETUP return (TRAFFICLOG); } YY_BREAK -case 33: +case 34: YY_RULE_SETUP -#line 209 "lexer.l" +#line 214 "lexer.l" { lmsg ("dumptraffic"); warning ("The 'dumptraffic' statement is obsolete.\n" @@ -1155,9 +1168,9 @@ YY_RULE_SETUP return (TRAFFICLOG); } YY_BREAK -case 34: +case 35: YY_RULE_SETUP -#line 219 "lexer.l" +#line 224 "lexer.l" { lmsg ("onstart"); BEGIN (stringstate); @@ -1166,9 +1179,9 @@ YY_RULE_SETUP return (ONSTART); } YY_BREAK -case 35: +case 36: YY_RULE_SETUP -#line 227 "lexer.l" +#line 232 "lexer.l" { lmsg ("onfail"); BEGIN (stringstate); @@ -1177,9 +1190,9 @@ YY_RULE_SETUP return (ONFAIL); } YY_BREAK -case 36: +case 37: YY_RULE_SETUP -#line 235 "lexer.l" +#line 240 "lexer.l" { lmsg ("onend"); BEGIN (stringstate); @@ -1188,9 +1201,9 @@ YY_RULE_SETUP return (ONEND); } YY_BREAK -case 37: +case 38: YY_RULE_SETUP -#line 243 "lexer.l" +#line 248 "lexer.l" { lmsg ("stickycookie"); BEGIN (stringstate); @@ -1199,9 +1212,9 @@ YY_RULE_SETUP return (STICKYCOOKIE); } YY_BREAK -case 38: +case 39: YY_RULE_SETUP -#line 251 "lexer.l" +#line 256 "lexer.l" { lmsg ("addclientheader"); BEGIN (stringstate); @@ -1210,9 +1223,9 @@ YY_RULE_SETUP return (ADDCLIENTHEADER); } YY_BREAK -case 39: +case 40: YY_RULE_SETUP -#line 259 "lexer.l" +#line 264 "lexer.l" { lmsg ("setclientheader"); BEGIN (stringstate); @@ -1221,9 +1234,9 @@ YY_RULE_SETUP return (SETCLIENTHEADER); } YY_BREAK -case 40: +case 41: YY_RULE_SETUP -#line 267 "lexer.l" +#line 272 "lexer.l" { lmsg ("appendclientheader"); BEGIN (stringstate); @@ -1232,9 +1245,9 @@ YY_RULE_SETUP return (APPENDCLIENTHEADER); } YY_BREAK -case 41: +case 42: YY_RULE_SETUP -#line 275 "lexer.l" +#line 280 "lexer.l" { lmsg ("addserverheader"); BEGIN (stringstate); @@ -1243,9 +1256,9 @@ YY_RULE_SETUP return (ADDSERVERHEADER); } YY_BREAK -case 42: +case 43: YY_RULE_SETUP -#line 283 "lexer.l" +#line 288 "lexer.l" { lmsg ("setserverheader"); BEGIN (stringstate); @@ -1254,9 +1267,9 @@ YY_RULE_SETUP return (SETSERVERHEADER); } YY_BREAK -case 43: +case 44: YY_RULE_SETUP -#line 291 "lexer.l" +#line 296 "lexer.l" { lmsg ("appendserverheader"); BEGIN (stringstate); @@ -1265,9 +1278,9 @@ YY_RULE_SETUP return (APPENDSERVERHEADER); } YY_BREAK -case 44: +case 45: YY_RULE_SETUP -#line 299 "lexer.l" +#line 304 "lexer.l" { lmsg ("allowfrom"); BEGIN (stringstate); @@ -1276,9 +1289,9 @@ YY_RULE_SETUP return (ALLOWFROM); } YY_BREAK -case 45: +case 46: YY_RULE_SETUP -#line 307 "lexer.l" +#line 312 "lexer.l" { lmsg ("denyfrom"); BEGIN (stringstate); @@ -1287,9 +1300,9 @@ YY_RULE_SETUP return (DENYFROM); } YY_BREAK -case 46: +case 47: YY_RULE_SETUP -#line 315 "lexer.l" +#line 320 "lexer.l" { lmsg ("allowfile"); BEGIN (stringstate); @@ -1298,9 +1311,9 @@ YY_RULE_SETUP return (ALLOWFILE); } YY_BREAK -case 47: +case 48: YY_RULE_SETUP -#line 323 "lexer.l" +#line 328 "lexer.l" { lmsg ("denyfile"); BEGIN (stringstate); @@ -1309,110 +1322,110 @@ YY_RULE_SETUP return (DENYFILE); } YY_BREAK -case 48: +case 49: YY_RULE_SETUP -#line 331 "lexer.l" +#line 336 "lexer.l" { lmsg ("on"); return (ON); } YY_BREAK -case 49: +case 50: YY_RULE_SETUP -#line 336 "lexer.l" +#line 341 "lexer.l" { lmsg ("off"); return (OFF); } YY_BREAK -case 50: +case 51: YY_RULE_SETUP -#line 341 "lexer.l" +#line 346 "lexer.l" { llmsg ("identifier", yytext); return (IDENTIFIER); } YY_BREAK -case 51: +case 52: YY_RULE_SETUP -#line 346 "lexer.l" +#line 351 "lexer.l" { llmsg ("number", yytext); return (NUMBER); } YY_BREAK -case 52: +case 53: YY_RULE_SETUP -#line 351 "lexer.l" +#line 356 "lexer.l" { lmsg ("space(s)"); } YY_BREAK -case 53: +case 54: YY_RULE_SETUP -#line 355 "lexer.l" +#line 360 "lexer.l" { lmsg ("newline"); yylineno++; } YY_BREAK -case 54: +case 55: YY_RULE_SETUP -#line 360 "lexer.l" +#line 365 "lexer.l" { llmsg ("lone char", yytext); return (*yytext); } YY_BREAK -case 55: +case 56: YY_RULE_SETUP -#line 365 "lexer.l" +#line 370 "lexer.l" { lmsg ("C-comment starts"); BEGIN(commentstate); } YY_BREAK -case 56: +case 57: YY_RULE_SETUP -#line 369 "lexer.l" +#line 374 "lexer.l" { lmsg ("C-comment ends"); BEGIN(0); } YY_BREAK -case 57: +case 58: YY_RULE_SETUP -#line 373 "lexer.l" +#line 378 "lexer.l" { yylineno++; } YY_BREAK -case 58: +case 59: YY_RULE_SETUP -#line 376 "lexer.l" +#line 381 "lexer.l" ; YY_BREAK -case 59: +case 60: YY_RULE_SETUP -#line 378 "lexer.l" +#line 383 "lexer.l" { llmsg ("string part", yytext); laststring = xstrcat (laststring, yytext + 1); laststring[strlen(laststring) - 1] = 0; } YY_BREAK -case 60: +case 61: YY_RULE_SETUP -#line 383 "lexer.l" +#line 388 "lexer.l" { llmsg ("string part", yytext); laststring = xstrcat (laststring, yytext + 1); laststring[strlen(laststring) - 1] = 0; } YY_BREAK -case 61: +case 62: YY_RULE_SETUP -#line 388 "lexer.l" +#line 393 "lexer.l" { BEGIN (0); unput (';'); @@ -1420,9 +1433,9 @@ YY_RULE_SETUP return (STRING); } YY_BREAK -case 62: +case 63: YY_RULE_SETUP -#line 394 "lexer.l" +#line 399 "lexer.l" { if (laststring) { laststring = xstrcat (laststring, yytext); @@ -1430,17 +1443,17 @@ YY_RULE_SETUP } } YY_BREAK -case 63: +case 64: YY_RULE_SETUP -#line 400 "lexer.l" +#line 405 "lexer.l" { llmsg ("string part", yytext); laststring = xstrcat (laststring, yytext); } YY_BREAK -case 64: +case 65: YY_RULE_SETUP -#line 404 "lexer.l" +#line 409 "lexer.l" { if (laststring) { laststring = xstrcat (laststring, " "); @@ -1449,12 +1462,12 @@ YY_RULE_SETUP yylineno++; } YY_BREAK -case 65: +case 66: YY_RULE_SETUP -#line 411 "lexer.l" +#line 416 "lexer.l" ECHO; YY_BREAK -#line 1453 "lexer.c" +#line 1466 "lexer.c" case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(stringstate): case YY_STATE_EOF(commentstate): @@ -1748,7 +1761,7 @@ static yy_state_type yy_get_previous_state() while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 411 ) + if ( yy_current_state >= 416 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; @@ -1783,11 +1796,11 @@ yy_state_type yy_current_state; while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 411 ) + if ( yy_current_state >= 416 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; - yy_is_jam = (yy_current_state == 410); + yy_is_jam = (yy_current_state == 415); return yy_is_jam ? 0 : yy_current_state; } @@ -2342,4 +2355,4 @@ int main() return 0; } #endif -#line 411 "lexer.l" +#line 416 "lexer.l" diff --git a/src/lexer.l b/src/lexer.l @@ -74,6 +74,11 @@ backlog { return (BACKLOG); } +retries { + lmsg ("retries"); + return (RETRIES); +} + (verbosity)|(verbose) { lmsg ("verbosity"); return (VERBOSITY); diff --git a/src/lockreporter.c b/src/lockreporter.c @@ -1,5 +1,5 @@ /************************************************************************* - * This file is part of Crosroads 1.34, a load balancer and fail over + * This file is part of Crosroads 1.35, a load balancer and fail over * utility for TCP. Copyright (c) Karel Kubat, distributed under GPL. * Visit http://crossroads.e-tunity.com for information. *************************************************************************/ diff --git a/src/logactivityany.c b/src/logactivityany.c @@ -1,5 +1,5 @@ /************************************************************************* - * This file is part of Crosroads 1.34, a load balancer and fail over + * This file is part of Crosroads 1.35, a load balancer and fail over * utility for TCP. Copyright (c) Karel Kubat, distributed under GPL. * Visit http://crossroads.e-tunity.com for information. *************************************************************************/ diff --git a/src/logactivitycontinuation.c b/src/logactivitycontinuation.c @@ -1,5 +1,5 @@ /************************************************************************* - * This file is part of Crosroads 1.34, a load balancer and fail over + * This file is part of Crosroads 1.35, a load balancer and fail over * utility for TCP. Copyright (c) Karel Kubat, distributed under GPL. * Visit http://crossroads.e-tunity.com for information. *************************************************************************/ diff --git a/src/logactivityend.c b/src/logactivityend.c @@ -1,5 +1,5 @@ /************************************************************************* - * This file is part of Crosroads 1.34, a load balancer and fail over + * This file is part of Crosroads 1.35, a load balancer and fail over * utility for TCP. Copyright (c) Karel Kubat, distributed under GPL. * Visit http://crossroads.e-tunity.com for information. *************************************************************************/ diff --git a/src/logactivitystart.c b/src/logactivitystart.c @@ -1,5 +1,5 @@ /************************************************************************* - * This file is part of Crosroads 1.34, a load balancer and fail over + * This file is part of Crosroads 1.35, a load balancer and fail over * utility for TCP. Copyright (c) Karel Kubat, distributed under GPL. * Visit http://crossroads.e-tunity.com for information. *************************************************************************/ diff --git a/src/main.c b/src/main.c @@ -1,5 +1,5 @@ /************************************************************************* - * This file is part of Crosroads 1.34, a load balancer and fail over + * This file is part of Crosroads 1.35, a load balancer and fail over * utility for TCP. Copyright (c) Karel Kubat, distributed under GPL. * Visit http://crossroads.e-tunity.com for information. *************************************************************************/ diff --git a/src/makesocket.c b/src/makesocket.c @@ -1,5 +1,5 @@ /************************************************************************* - * This file is part of Crosroads 1.34, a load balancer and fail over + * This file is part of Crosroads 1.35, a load balancer and fail over * utility for TCP. Copyright (c) Karel Kubat, distributed under GPL. * Visit http://crossroads.e-tunity.com for information. *************************************************************************/ diff --git a/src/markactivity.c b/src/markactivity.c @@ -1,5 +1,5 @@ /************************************************************************* - * This file is part of Crosroads 1.34, a load balancer and fail over + * This file is part of Crosroads 1.35, a load balancer and fail over * utility for TCP. Copyright (c) Karel Kubat, distributed under GPL. * Visit http://crossroads.e-tunity.com for information. *************************************************************************/ @@ -21,6 +21,17 @@ void mark_activity (double nbytes, double nsec, /* Update values. */ lock_reporter(); + /* If the new activity is a failure: increase fails count. + * Upon availability, set fails count to 0. */ + if (newstate == st_unavailable && + servicereport->backendstate[current_backend].avail != st_unavailable) { + servicereport->backendstate[current_backend].fail++; + // msg ("Service %s: Back end %d's unavailability increased to %d", + // activeservice->name, current_backend, + // servicereport->backendstate[current_backend].fail); + } else if (newstate == st_available) + servicereport->backendstate[current_backend].fail = 0; + /* Handle the decays of all other back ends */ for (i = 0; i < activeservice->nbackend; i++) { if (i != current_backend && activeservice->backend[i].decay) { @@ -69,10 +80,25 @@ void mark_activity (double nbytes, double nsec, /* Set the state, unless it's already marked for wakeup or brought down. * Do this only for 'final' states, not for intermediate. */ - if (newstate != st_intermediate) { - if (servicereport->backendstate[current_backend].avail != st_waking && - servicereport->backendstate[current_backend].avail != st_down) + if (servicereport->backendstate[current_backend].avail != st_waking && + servicereport->backendstate[current_backend].avail != st_down) { + /* When trying to mark as unavailable, only proceed when we + * actually exceed the retries setting. */ + if (newstate == st_unavailable) { + if (servicereport->backendstate[current_backend].fail >= + (unsigned) activeservice->backend[current_backend].retries) { + msg ("Service %s: backend %d: %d fails, %d retries, " + "going offline", activeservice->name, current_backend, + servicereport->backendstate[current_backend].fail, + activeservice->backend[current_backend].retries); + servicereport->backendstate[current_backend].avail = + st_unavailable; + } + } else if (newstate != st_intermediate) { + /* When applying any other state than intermediate, it's OK */ servicereport->backendstate[current_backend].avail = newstate; + } + /* Total uses has gone up */ servicereport->backendstate[current_backend].totuses++; } @@ -83,7 +109,7 @@ void mark_activity (double nbytes, double nsec, if (newstate != st_intermediate && program_stage != stage_retrying) msg ("Service %s: updated stats for backend %d (%s): " "hits=%lu, " - "fails=%lu, secs=%g, avgsecs=%g, " + "totfails=%lu, secs=%g, avgsecs=%g, " "bytes=%llu, avgbytes=%lu, state=%s", activeservice->name, current_backend, activeservice->backend[current_backend].name, diff --git a/src/msg.c b/src/msg.c @@ -1,5 +1,5 @@ /************************************************************************* - * This file is part of Crosroads 1.34, a load balancer and fail over + * This file is part of Crosroads 1.35, a load balancer and fail over * utility for TCP. Copyright (c) Karel Kubat, distributed under GPL. * Visit http://crossroads.e-tunity.com for information. *************************************************************************/ diff --git a/src/msgdumpbuf.c b/src/msgdumpbuf.c @@ -1,5 +1,5 @@ /************************************************************************* - * This file is part of Crosroads 1.34, a load balancer and fail over + * This file is part of Crosroads 1.35, a load balancer and fail over * utility for TCP. Copyright (c) Karel Kubat, distributed under GPL. * Visit http://crossroads.e-tunity.com for information. *************************************************************************/ diff --git a/src/netbuffer.c b/src/netbuffer.c @@ -1,5 +1,5 @@ /************************************************************************* - * This file is part of Crosroads 1.34, a load balancer and fail over + * This file is part of Crosroads 1.35, a load balancer and fail over * utility for TCP. Copyright (c) Karel Kubat, distributed under GPL. * Visit http://crossroads.e-tunity.com for information. *************************************************************************/ diff --git a/src/netbufread.c b/src/netbufread.c @@ -1,5 +1,5 @@ /************************************************************************* - * This file is part of Crosroads 1.34, a load balancer and fail over + * This file is part of Crosroads 1.35, a load balancer and fail over * utility for TCP. Copyright (c) Karel Kubat, distributed under GPL. * Visit http://crossroads.e-tunity.com for information. *************************************************************************/ diff --git a/src/netcopy.c b/src/netcopy.c @@ -1,5 +1,5 @@ /************************************************************************* - * This file is part of Crosroads 1.34, a load balancer and fail over + * This file is part of Crosroads 1.35, a load balancer and fail over * utility for TCP. Copyright (c) Karel Kubat, distributed under GPL. * Visit http://crossroads.e-tunity.com for information. *************************************************************************/ diff --git a/src/netread.c b/src/netread.c @@ -1,5 +1,5 @@ /************************************************************************* - * This file is part of Crosroads 1.34, a load balancer and fail over + * This file is part of Crosroads 1.35, a load balancer and fail over * utility for TCP. Copyright (c) Karel Kubat, distributed under GPL. * Visit http://crossroads.e-tunity.com for information. *************************************************************************/ diff --git a/src/netwrite.c b/src/netwrite.c @@ -1,5 +1,5 @@ /************************************************************************* - * This file is part of Crosroads 1.34, a load balancer and fail over + * This file is part of Crosroads 1.35, a load balancer and fail over * utility for TCP. Copyright (c) Karel Kubat, distributed under GPL. * Visit http://crossroads.e-tunity.com for information. *************************************************************************/ diff --git a/src/parser.c b/src/parser.c @@ -1,5 +1,5 @@ /************************************************************************* - * This file is part of Crosroads 1.34, a load balancer and fail over + * This file is part of Crosroads 1.35, a load balancer and fail over * utility for TCP. Copyright (c) Karel Kubat, distributed under GPL. * Visit http://crossroads.e-tunity.com for information. *************************************************************************/ @@ -56,6 +56,7 @@ # define ONEND 302 # define USERACCOUNT 303 # define BYCLIENTIP 304 +# define RETRIES 305 #line 3 "parser.y" @@ -179,12 +180,12 @@ static void setuseraccount (char *username) { -#define YYFINAL 198 +#define YYFINAL 202 #define YYFLAG -32768 -#define YYNTBASE 54 +#define YYNTBASE 55 /* YYTRANSLATE(YYLEX) -- Bison token number corresponding to YYLEX. */ -#define YYTRANSLATE(x) ((unsigned)(x) <= 304 ? yytranslate[x] : 133) +#define YYTRANSLATE(x) ((unsigned)(x) <= 305 ? yytranslate[x] : 135) /* YYTRANSLATE[YYLEX] -- Bison token number corresponding to YYLEX. */ static const char yytranslate[] = @@ -194,14 +195,14 @@ static const char yytranslate[] = 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 53, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 54, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 51, 2, 52, 2, 2, 2, 2, + 2, 2, 2, 52, 2, 53, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -219,7 +220,7 @@ static const char yytranslate[] = 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, - 46, 47, 48, 49, 50 + 46, 47, 48, 49, 50, 51 }; #if YYDEBUG @@ -233,47 +234,47 @@ static const short yyprhs[] = 124, 127, 131, 135, 139, 143, 147, 151, 154, 156, 158, 162, 166, 170, 174, 177, 183, 186, 189, 191, 194, 196, 198, 200, 202, 204, 206, 208, 210, 212, - 214, 216, 218, 220, 222, 224, 226, 228, 230, 235, - 239, 243, 245, 249, 253, 257, 261, 265, 268, 271, - 275, 278, 282, 286, 290, 294, 298, 302, 305, 306, - 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, - 317, 318, 319, 320, 321, 322 + 214, 216, 218, 220, 222, 224, 226, 228, 230, 232, + 237, 241, 245, 247, 251, 255, 259, 263, 267, 271, + 274, 277, 281, 284, 288, 292, 296, 300, 304, 308, + 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328 }; static const short yyrhs[] = { - 55, 54, 0, 55, 0, 56, 57, 51, 58, 52, - 0, 119, 3, 0, 127, 4, 0, 58, 59, 0, - 59, 0, 121, 60, 0, 61, 0, 62, 0, 66, - 0, 68, 0, 77, 0, 78, 0, 79, 0, 80, - 0, 81, 0, 82, 0, 85, 0, 87, 0, 86, - 0, 88, 0, 75, 0, 90, 0, 5, 64, 65, - 0, 31, 63, 65, 0, 129, 19, 0, 117, 6, - 0, 122, 53, 0, 8, 123, 67, 65, 0, 10, - 0, 11, 0, 12, 73, 69, 65, 0, 70, 0, - 72, 0, 0, 29, 71, 0, 117, 6, 0, 104, - 0, 124, 74, 0, 13, 0, 21, 0, 22, 0, + 56, 55, 0, 56, 0, 57, 58, 52, 59, 53, + 0, 121, 3, 0, 129, 4, 0, 59, 60, 0, + 60, 0, 123, 61, 0, 62, 0, 63, 0, 67, + 0, 69, 0, 78, 0, 79, 0, 80, 0, 81, + 0, 82, 0, 83, 0, 86, 0, 88, 0, 87, + 0, 89, 0, 76, 0, 91, 0, 5, 65, 66, + 0, 31, 64, 66, 0, 131, 19, 0, 119, 6, + 0, 124, 54, 0, 8, 125, 68, 66, 0, 10, + 0, 11, 0, 12, 74, 70, 66, 0, 71, 0, + 73, 0, 0, 29, 72, 0, 119, 6, 0, 106, + 0, 126, 75, 0, 13, 0, 21, 0, 22, 0, 23, 0, 27, 0, 24, 0, 47, 0, 50, 0, - 49, 76, 65, 0, 132, 19, 0, 14, 64, 65, - 0, 20, 64, 65, 0, 15, 64, 65, 0, 25, - 64, 65, 0, 26, 64, 65, 0, 33, 83, 65, - 0, 130, 84, 0, 34, 0, 35, 0, 43, 89, - 65, 0, 44, 89, 65, 0, 45, 105, 65, 0, - 46, 105, 65, 0, 131, 19, 0, 7, 91, 51, - 92, 52, 0, 128, 4, 0, 92, 93, 0, 93, - 0, 120, 94, 0, 95, 0, 61, 0, 66, 0, - 99, 0, 101, 0, 100, 0, 102, 0, 103, 0, - 96, 0, 97, 0, 81, 0, 106, 0, 108, 0, - 109, 0, 110, 0, 111, 0, 112, 0, 113, 0, - 9, 118, 98, 65, 0, 16, 64, 65, 0, 30, - 64, 65, 0, 19, 0, 17, 104, 65, 0, 18, - 104, 65, 0, 48, 104, 65, 0, 28, 105, 65, - 0, 32, 105, 65, 0, 125, 19, 0, 126, 19, - 0, 36, 107, 65, 0, 116, 19, 0, 37, 114, - 65, 0, 38, 114, 65, 0, 39, 114, 65, 0, - 40, 114, 65, 0, 41, 114, 65, 0, 42, 114, - 65, 0, 115, 19, 0, 0, 0, 0, 0, 0, + 49, 77, 66, 0, 134, 19, 0, 14, 65, 66, + 0, 20, 65, 66, 0, 15, 65, 66, 0, 25, + 65, 66, 0, 26, 65, 66, 0, 33, 84, 66, + 0, 132, 85, 0, 34, 0, 35, 0, 43, 90, + 66, 0, 44, 90, 66, 0, 45, 107, 66, 0, + 46, 107, 66, 0, 133, 19, 0, 7, 92, 52, + 93, 53, 0, 130, 4, 0, 93, 94, 0, 94, + 0, 122, 95, 0, 96, 0, 62, 0, 67, 0, + 101, 0, 103, 0, 102, 0, 104, 0, 105, 0, + 97, 0, 98, 0, 82, 0, 108, 0, 110, 0, + 111, 0, 112, 0, 113, 0, 114, 0, 115, 0, + 100, 0, 9, 120, 99, 66, 0, 16, 65, 66, + 0, 30, 65, 66, 0, 19, 0, 51, 65, 66, + 0, 17, 106, 66, 0, 18, 106, 66, 0, 48, + 106, 66, 0, 28, 107, 66, 0, 32, 107, 66, + 0, 127, 19, 0, 128, 19, 0, 36, 109, 66, + 0, 118, 19, 0, 37, 116, 66, 0, 38, 116, + 66, 0, 39, 116, 66, 0, 40, 116, 66, 0, + 41, 116, 66, 0, 42, 116, 66, 0, 117, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0 + 0, 0, 0, 0, 0, 0, 0, 0, 0 }; #endif @@ -284,17 +285,17 @@ static const short yyrline[] = { 0, 130, 133, 137, 166, 171, 179, 182, 186, 191, 197, 203, 209, 219, 225, 231, 237, 243, 249, 255, - 261, 267, 273, 279, 286, 439, 451, 463, 472, 479, - 484, 497, 501, 507, 516, 518, 520, 524, 541, 548, - 558, 567, 571, 575, 579, 583, 587, 591, 595, 601, - 613, 622, 634, 646, 658, 670, 682, 694, 699, 703, - 709, 721, 733, 745, 757, 766, 776, 784, 792, 798, - 805, 810, 815, 820, 825, 830, 835, 840, 845, 850, - 855, 860, 865, 870, 875, 880, 885, 890, 897, 910, - 922, 934, 940, 952, 964, 976, 988, 1000, 1009, 1018, - 1030, 1039, 1051, 1063, 1075, 1087, 1099, 1111, 1120, 1125, - 1130, 1135, 1140, 1145, 1150, 1155, 1160, 1165, 1170, 1175, - 1180, 1185, 1190, 1195, 1200, 1205 + 261, 267, 273, 279, 286, 445, 457, 469, 478, 485, + 490, 503, 507, 513, 522, 524, 526, 530, 547, 554, + 564, 573, 577, 581, 585, 589, 593, 597, 601, 607, + 619, 628, 640, 652, 664, 676, 688, 700, 705, 709, + 715, 727, 739, 751, 763, 772, 782, 790, 798, 804, + 811, 816, 821, 826, 831, 836, 841, 846, 851, 856, + 861, 866, 871, 876, 881, 886, 891, 896, 901, 908, + 921, 933, 945, 951, 963, 975, 987, 999, 1011, 1023, + 1032, 1041, 1053, 1062, 1074, 1086, 1098, 1110, 1122, 1134, + 1143, 1148, 1153, 1158, 1163, 1168, 1173, 1178, 1183, 1188, + 1193, 1198, 1203, 1208, 1213, 1218, 1223, 1228 }; #endif @@ -313,8 +314,8 @@ static const char *const yytname[] = "HTTP", "STICKYCOOKIE", "ADDCLIENTHEADER", "SETCLIENTHEADER", "APPENDCLIENTHEADER", "ADDSERVERHEADER", "SETSERVERHEADER", "APPENDSERVERHEADER", "ALLOWFROM", "DENYFROM", "ALLOWFILE", "DENYFILE", - "EXTERNALHANDLER", "ONEND", "USERACCOUNT", "BYCLIENTIP", "'{'", "'}'", - "';'", "input", "element", "service", "servicename", + "EXTERNALHANDLER", "ONEND", "USERACCOUNT", "BYCLIENTIP", "RETRIES", + "'{'", "'}'", "';'", "input", "element", "service", "servicename", "servicestatements", "servicestatement", "servicebody", "portstatement", "bindstatement", "ipaddress", "number", "semicol", "verbositystatement", "onoff", "dispatchmodestatement", "dispatchtail", "dispatchover", @@ -326,9 +327,9 @@ static const char *const yytname[] = "denyfilestatement", "ipfilters", "backendblock", "backendname", "backenddefinitions", "backenddefinition", "backendstatement", "serverstatement", "weightstatement", "decaystatement", "serveraddress", - "onstartstatement", "onfailstatement", "onendstatement", - "dumptrafficstatement", "throughputstatement", "commandline", - "filename", "stickycookiestatement", "cookiespecifier", + "retriesstatement", "onstartstatement", "onfailstatement", + "onendstatement", "dumptrafficstatement", "throughputstatement", + "commandline", "filename", "stickycookiestatement", "cookiespecifier", "addclientheaderstatement", "setclientheaderstatement", "appendclientheaderstatement", "addserverheaderstatement", "setserverheaderstatement", "appendserverheaderstatement", @@ -345,19 +346,19 @@ static const char *const yytname[] = /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const short yyr1[] = { - 0, 54, 54, 55, 56, 57, 58, 58, 59, 60, - 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, - 60, 60, 60, 60, 60, 61, 62, 63, 64, 65, - 66, 67, 67, 68, 69, 69, 69, 70, 71, 72, - 73, 74, 74, 74, 74, 74, 74, 74, 74, 75, - 76, 77, 78, 79, 80, 81, 82, 83, 84, 84, - 85, 86, 87, 88, 89, 90, 91, 92, 92, 93, - 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, - 94, 94, 94, 94, 94, 94, 94, 94, 95, 96, + 0, 55, 55, 56, 57, 58, 59, 59, 60, 61, + 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, + 61, 61, 61, 61, 61, 62, 63, 64, 65, 66, + 67, 68, 68, 69, 70, 70, 70, 71, 72, 73, + 74, 75, 75, 75, 75, 75, 75, 75, 75, 76, + 77, 78, 79, 80, 81, 82, 83, 84, 85, 85, + 86, 87, 88, 89, 90, 91, 92, 93, 93, 94, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, - 127, 128, 129, 130, 131, 132 + 127, 128, 129, 130, 131, 132, 133, 134 }; /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ @@ -371,11 +372,11 @@ static const short yyr2[] = 2, 3, 3, 3, 3, 3, 3, 2, 1, 1, 3, 3, 3, 3, 2, 5, 2, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 4, 3, - 3, 1, 3, 3, 3, 3, 3, 2, 2, 3, - 2, 3, 3, 3, 3, 3, 3, 2, 0, 0, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, + 3, 3, 1, 3, 3, 3, 3, 3, 3, 2, + 2, 3, 2, 3, 3, 3, 3, 3, 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 + 0, 0, 0, 0, 0, 0, 0, 0 }; /* YYDEFACT[S] -- default rule to reduce with in state S when YYTABLE @@ -383,26 +384,27 @@ static const short yyr2[] = error. */ static const short yydefact[] = { - 112, 2, 120, 0, 1, 0, 0, 4, 114, 5, - 114, 7, 0, 3, 6, 110, 121, 116, 117, 110, - 110, 110, 110, 110, 122, 123, 124, 124, 119, 119, - 125, 8, 9, 10, 11, 12, 23, 13, 14, 15, - 16, 17, 18, 19, 21, 20, 22, 24, 115, 0, - 0, 0, 0, 36, 0, 115, 115, 115, 115, 115, - 115, 0, 115, 0, 115, 0, 115, 115, 0, 115, - 115, 0, 25, 0, 28, 113, 66, 31, 32, 115, - 110, 115, 34, 35, 39, 0, 41, 42, 43, 44, + 114, 2, 122, 0, 1, 0, 0, 4, 116, 5, + 116, 7, 0, 3, 6, 112, 123, 118, 119, 112, + 112, 112, 112, 112, 124, 125, 126, 126, 121, 121, + 127, 8, 9, 10, 11, 12, 23, 13, 14, 15, + 16, 17, 18, 19, 21, 20, 22, 24, 117, 0, + 0, 0, 0, 36, 0, 117, 117, 117, 117, 117, + 117, 0, 117, 0, 117, 0, 117, 117, 0, 117, + 117, 0, 25, 0, 28, 115, 66, 31, 32, 117, + 112, 117, 34, 35, 39, 0, 41, 42, 43, 44, 46, 45, 47, 48, 40, 51, 53, 52, 54, 55, 26, 27, 56, 58, 59, 57, 60, 64, 61, 62, - 98, 63, 49, 50, 29, 113, 68, 0, 30, 37, - 0, 33, 97, 65, 67, 111, 110, 118, 118, 119, - 110, 119, 109, 108, 108, 108, 108, 108, 108, 118, - 71, 72, 80, 69, 70, 78, 79, 73, 75, 74, - 76, 77, 81, 82, 83, 84, 85, 86, 87, 38, - 0, 115, 115, 115, 115, 115, 115, 115, 0, 115, - 0, 115, 115, 115, 115, 115, 115, 91, 115, 89, - 92, 93, 95, 90, 96, 99, 100, 101, 107, 102, - 103, 104, 105, 106, 94, 88, 0, 0, 0 + 100, 63, 49, 50, 29, 115, 68, 0, 30, 37, + 0, 33, 99, 65, 67, 113, 112, 120, 120, 121, + 112, 121, 111, 110, 110, 110, 110, 110, 110, 120, + 112, 71, 72, 80, 69, 70, 78, 79, 88, 73, + 75, 74, 76, 77, 81, 82, 83, 84, 85, 86, + 87, 38, 0, 117, 117, 117, 117, 117, 117, 117, + 0, 117, 0, 117, 117, 117, 117, 117, 117, 117, + 92, 117, 90, 94, 95, 97, 91, 98, 101, 102, + 103, 109, 104, 105, 106, 107, 108, 96, 93, 89, + 0, 0, 0 }; static const short yydefgoto[] = @@ -411,92 +413,93 @@ static const short yydefgoto[] = 48, 72, 34, 79, 35, 81, 82, 119, 83, 53, 94, 36, 70, 37, 38, 39, 40, 41, 42, 62, 105, 43, 44, 45, 46, 64, 47, 50, 115, 116, - 143, 144, 145, 146, 178, 147, 148, 149, 150, 151, - 84, 67, 152, 167, 153, 154, 155, 156, 157, 158, - 169, 170, 168, 49, 160, 3, 117, 12, 73, 52, - 54, 85, 68, 6, 51, 61, 63, 65, 71 + 144, 145, 146, 147, 181, 148, 149, 150, 151, 152, + 153, 84, 67, 154, 169, 155, 156, 157, 158, 159, + 160, 171, 172, 170, 49, 162, 3, 117, 12, 73, + 52, 54, 85, 68, 6, 51, 61, 63, 65, 71 }; static const short yypact[] = { - -32768, 5,-32768, 7,-32768, -20, 29,-32768,-32768,-32768, - -14,-32768, 20,-32768,-32768,-32768,-32768,-32768,-32768,-32768, + -32768, 7,-32768, 10,-32768, -44, 13,-32768,-32768,-32768, + -30,-32768, 58,-32768,-32768,-32768,-32768,-32768,-32768,-32768, -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, - -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 33, - -9, 39, 12, -13, 34,-32768,-32768,-32768,-32768,-32768, - -32768, 25,-32768, 2,-32768, 30,-32768,-32768, 31,-32768, - -32768, 35,-32768, -5,-32768,-32768,-32768,-32768,-32768,-32768, - -32768,-32768,-32768,-32768,-32768, 40,-32768,-32768,-32768,-32768, + -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 21, + -17, 37, 23, -13, 114,-32768,-32768,-32768,-32768,-32768, + -32768, 25,-32768, 5,-32768, 26,-32768,-32768, 28,-32768, + -32768, 30,-32768, -12,-32768,-32768,-32768,-32768,-32768,-32768, + -32768,-32768,-32768,-32768,-32768, 32,-32768,-32768,-32768,-32768, -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, - -32768,-32768,-32768,-32768,-32768, 0,-32768, 117,-32768,-32768, - 54,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, + -32768,-32768,-32768,-32768,-32768, 0,-32768, 20,-32768,-32768, + 48,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, - 43,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 48,-32768, - 49,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, + -32768,-32768, 36,-32768,-32768,-32768,-32768,-32768,-32768,-32768, + 45,-32768, 50,-32768,-32768,-32768,-32768,-32768,-32768,-32768, -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, - -32768,-32768,-32768,-32768,-32768,-32768, 75, 76,-32768 + -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, + 67, 74,-32768 }; static const short yypgoto[] = { - 77,-32768,-32768,-32768,-32768, 68,-32768, -38,-32768,-32768, - -2, -55, -37,-32768,-32768,-32768,-32768,-32768,-32768,-32768, - -32768,-32768,-32768,-32768,-32768,-32768,-32768, -35,-32768,-32768, - -32768,-32768,-32768,-32768,-32768, 56,-32768,-32768,-32768, -30, + 75,-32768,-32768,-32768,-32768, 66,-32768, -40,-32768,-32768, + -1, -55, -38,-32768,-32768,-32768,-32768,-32768,-32768,-32768, + -32768,-32768,-32768,-32768,-32768,-32768,-32768, -37,-32768,-32768, + -32768,-32768,-32768,-32768,-32768, 54,-32768,-32768,-32768, -33, -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, - -98, -16,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, - -64,-32768,-32768, 6,-32768,-32768,-32768,-32768,-32768,-32768, - -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768 + -32768, -96, 1,-32768,-32768,-32768,-32768,-32768,-32768,-32768, + -32768, -42,-32768,-32768, 6,-32768,-32768,-32768,-32768,-32768, + -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768 }; -#define YYLAST 165 +#define YYLAST 164 static const short yytable[] = { - 95, 96, 97, 98, 99, 100, -118, 102, -112, 106, - 7, 108, 109, 69, 111, 112, 80, 55, 56, 57, - 58, 59, 77, 78, 118, 15, 121, 16, 17, 162, - 163, 8, 18, 9, 19, 20, 103, 104, 13, 74, - 21, 176, 75, 76, 101, 22, 23, 86, 114, 107, - 110, 24, 123, 25, 113, 87, 88, 89, 90, 122, - 159, 91, 177, 26, 27, 28, 29, 186, 188, 30, - 171, 172, 173, 174, 175, 197, 198, 196, 14, 140, - 141, 92, 142, 66, 93, 124, 120, 0, 0, 0, + 95, 96, 97, 98, 99, 100, -120, 102, 8, 106, + -114, 108, 109, 7, 111, 112, 80, 9, 55, 56, + 57, 58, 59, 13, 118, 15, 121, 74, 17, 125, + 69, 164, 165, 77, 78, 75, 126, 127, 128, 103, + 104, 76, 114, 178, 101, 107, 23, 110, 129, 113, + 130, 122, 131, 123, 161, 180, 132, 133, 134, 135, + 136, 137, 138, 15, 189, 16, 17, 201, 139, 191, + 18, 140, 19, 20, 202, 200, 14, 141, 21, 142, + 143, 66, 124, 22, 23, 0, 120, 0, 0, 24, + 0, 25, 173, 174, 175, 176, 177, 0, 0, 0, + 0, 26, 27, 28, 29, 0, 0, 30, 182, 183, + 184, 185, 186, 187, 188, 0, 190, 0, 192, 193, + 194, 195, 196, 197, 198, 163, 199, 86, 0, 167, + 166, 0, 168, 0, 0, 87, 88, 89, 90, 179, + 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 179, 180, 181, 182, - 183, 184, 185, 164, 187, 166, 189, 190, 191, 192, - 193, 194, 15, 195, 161, 17, 125, 0, 165, 0, - 0, 0, 0, 126, 127, 128, 0, 0, 0, 0, - 0, 0, 0, 23, 0, 129, 0, 130, 0, 131, - 0, 0, 0, 132, 133, 134, 135, 136, 137, 138, - 0, 0, 0, 0, 0, 139 + 0, 92, 0, 0, 93 }; static const short yycheck[] = { - 55, 56, 57, 58, 59, 60, 19, 62, 3, 64, - 3, 66, 67, 29, 69, 70, 29, 19, 20, 21, - 22, 23, 10, 11, 79, 5, 81, 7, 8, 127, - 128, 51, 12, 4, 14, 15, 34, 35, 52, 6, - 20, 139, 51, 4, 19, 25, 26, 13, 53, 19, - 19, 31, 52, 33, 19, 21, 22, 23, 24, 19, - 6, 27, 19, 43, 44, 45, 46, 19, 19, 49, - 134, 135, 136, 137, 138, 0, 0, 0, 10, 117, - 117, 47, 117, 27, 50, 115, 80, -1, -1, -1, + 55, 56, 57, 58, 59, 60, 19, 62, 52, 64, + 3, 66, 67, 3, 69, 70, 29, 4, 19, 20, + 21, 22, 23, 53, 79, 5, 81, 6, 8, 9, + 29, 127, 128, 10, 11, 52, 16, 17, 18, 34, + 35, 4, 54, 139, 19, 19, 26, 19, 28, 19, + 30, 19, 32, 53, 6, 19, 36, 37, 38, 39, + 40, 41, 42, 5, 19, 7, 8, 0, 48, 19, + 12, 51, 14, 15, 0, 0, 10, 117, 20, 117, + 117, 27, 115, 25, 26, -1, 80, -1, -1, 31, + -1, 33, 134, 135, 136, 137, 138, -1, -1, -1, + -1, 43, 44, 45, 46, -1, -1, 49, 163, 164, + 165, 166, 167, 168, 169, -1, 171, -1, 173, 174, + 175, 176, 177, 178, 179, 126, 181, 13, -1, 130, + 129, -1, 131, -1, -1, 21, 22, 23, 24, 140, + -1, 27, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 161, 162, 163, 164, - 165, 166, 167, 129, 169, 131, 171, 172, 173, 174, - 175, 176, 5, 178, 126, 8, 9, -1, 130, -1, - -1, -1, -1, 16, 17, 18, -1, -1, -1, -1, - -1, -1, -1, 26, -1, 28, -1, 30, -1, 32, - -1, -1, -1, 36, 37, 38, 39, 40, 41, 42, - -1, -1, -1, -1, -1, 48 + -1, 47, -1, -1, 50 }; /* -*-C-*- Note some compilers choke on comments on `#line' lines. */ #line 3 "/sw/share/bison/bison.simple" @@ -1489,6 +1492,10 @@ case 24: [cur_backend.nappendserverheader++] = yyvsp[0].set[i].v.sval; break; + case cf_retriesspec: + pimsg ("backend retries:", yyvsp[0].set[i].v.ival); + cur_backend.retries = yyvsp[0].set[i].v.ival; + break; default: error ("Internal jam, unhandled type %d " "in backend specification", @@ -1502,8 +1509,10 @@ case 24: if (!cur_service.port) error ("Back end %s lacks port", cur_service.port); - if (!cur_backend.weight) + if (cur_backend.weight < 1) cur_backend.weight = 1; + if (cur_backend.retries < 1) + cur_backend.retries = 1; /* Add to the list. */ cur_service.backend = xrealloc (cur_service.backend, @@ -1516,7 +1525,7 @@ case 24: ; break;} case 25: -#line 442 "parser.y" +#line 448 "parser.y" { pimsg ("port statement:", lastnr); yyval.n = 1; @@ -1526,7 +1535,7 @@ case 25: ; break;} case 26: -#line 454 "parser.y" +#line 460 "parser.y" { psmsg ("bindto statement:", laststr); yyval.n = 1; @@ -1536,7 +1545,7 @@ case 26: ; break;} case 27: -#line 465 "parser.y" +#line 471 "parser.y" { setlaststr (laststring); free (laststring); @@ -1544,13 +1553,13 @@ case 27: ; break;} case 28: -#line 474 "parser.y" +#line 480 "parser.y" { setlastnr (yytext); ; break;} case 30: -#line 488 "parser.y" +#line 494 "parser.y" { pimsg ("verbosity statement:", lastnr); yyval.n = 1; @@ -1560,25 +1569,25 @@ case 30: ; break;} case 31: -#line 498 "parser.y" +#line 504 "parser.y" { lastnr = 1; ; break;} case 32: -#line 502 "parser.y" +#line 508 "parser.y" { lastnr = 0; ; break;} case 33: -#line 511 "parser.y" +#line 517 "parser.y" { yyval = yyvsp[-2]; ; break;} case 37: -#line 526 "parser.y" +#line 532 "parser.y" { pimsg ("dispatch mode statement:", lastnr); yyval.n = 1; @@ -1594,13 +1603,13 @@ case 37: ; break;} case 38: -#line 543 "parser.y" +#line 549 "parser.y" { setlastovernr (yytext); ; break;} case 39: -#line 549 "parser.y" +#line 555 "parser.y" { psmsg ("external handler:", laststr); if (lastnr != ds_externalhandler) @@ -1610,7 +1619,7 @@ case 39: ; break;} case 40: -#line 560 "parser.y" +#line 566 "parser.y" { yyval.n = 1; yyval.set = xmalloc (sizeof(Confset)); @@ -1618,55 +1627,55 @@ case 40: ; break;} case 41: -#line 568 "parser.y" +#line 574 "parser.y" { lastnr = ds_roundrobin; ; break;} case 42: -#line 572 "parser.y" +#line 578 "parser.y" { lastnr = ds_random; ; break;} case 43: -#line 576 "parser.y" +#line 582 "parser.y" { lastnr = ds_byduration; ; break;} case 44: -#line 580 "parser.y" +#line 586 "parser.y" { lastnr = ds_bysize; ; break;} case 45: -#line 584 "parser.y" +#line 590 "parser.y" { lastnr = ds_byorder; ; break;} case 46: -#line 588 "parser.y" +#line 594 "parser.y" { lastnr = ds_byconnections; ; break;} case 47: -#line 592 "parser.y" +#line 598 "parser.y" { lastnr = ds_externalhandler; ; break;} case 48: -#line 596 "parser.y" +#line 602 "parser.y" { lastnr = ds_byclientip; ; break;} case 49: -#line 604 "parser.y" +#line 610 "parser.y" { pimsg ("user account statement:", laststr); yyval.n = 1; @@ -1676,7 +1685,7 @@ case 49: ; break;} case 50: -#line 615 "parser.y" +#line 621 "parser.y" { setlaststr (laststring); free (laststring); @@ -1684,7 +1693,7 @@ case 50: ; break;} case 51: -#line 625 "parser.y" +#line 631 "parser.y" { pimsg ("reviving interval statement:", lastnr); yyval.n = 1; @@ -1694,7 +1703,7 @@ case 51: ; break;} case 52: -#line 637 "parser.y" +#line 643 "parser.y" { pimsg ("backlog statement:", lastnr); yyval.n = 1; @@ -1704,7 +1713,7 @@ case 52: ; break;} case 53: -#line 649 "parser.y" +#line 655 "parser.y" { pimsg ("shmkey statement:", lastnr); yyval.n = 1; @@ -1714,7 +1723,7 @@ case 53: ; break;} case 54: -#line 661 "parser.y" +#line 667 "parser.y" { pimsg ("connection timeout statement:", lastnr); yyval.n = 1; @@ -1724,7 +1733,7 @@ case 54: ; break;} case 55: -#line 673 "parser.y" +#line 679 "parser.y" { pimsg ("max clients statement (service):", lastnr); yyval.n = 1; @@ -1734,7 +1743,7 @@ case 55: ; break;} case 56: -#line 685 "parser.y" +#line 691 "parser.y" { pimsg ("service type:", lastnr); yyval.n = 1; @@ -1744,19 +1753,19 @@ case 56: ; break;} case 58: -#line 700 "parser.y" +#line 706 "parser.y" { lastnr = type_any; ; break;} case 59: -#line 704 "parser.y" +#line 710 "parser.y" { lastnr = type_http; ; break;} case 60: -#line 712 "parser.y" +#line 718 "parser.y" { psmsg ("allow from: ", laststr); yyval.n = 1; @@ -1766,7 +1775,7 @@ case 60: ; break;} case 61: -#line 724 "parser.y" +#line 730 "parser.y" { psmsg ("allow from: ", laststr); yyval.n = 1; @@ -1776,7 +1785,7 @@ case 61: ; break;} case 62: -#line 736 "parser.y" +#line 742 "parser.y" { psmsg ("allow file: ", laststr); yyval.n = 1; @@ -1786,7 +1795,7 @@ case 62: ; break;} case 63: -#line 748 "parser.y" +#line 754 "parser.y" { psmsg ("allow file: ", laststr); yyval.n = 1; @@ -1796,7 +1805,7 @@ case 63: ; break;} case 64: -#line 759 "parser.y" +#line 765 "parser.y" { setlaststr (laststring); free (laststring); @@ -1804,20 +1813,20 @@ case 64: ; break;} case 65: -#line 771 "parser.y" +#line 777 "parser.y" { yyval = yyvsp[-1]; ; break;} case 66: -#line 778 "parser.y" +#line 784 "parser.y" { psmsg ("backend name:", yytext); cur_backend.name = xstrdup (yytext); ; break;} case 67: -#line 786 "parser.y" +#line 792 "parser.y" { yyvsp[-1].n++; yyvsp[-1].set = xrealloc (yyvsp[-1].set, yyvsp[-1].n * sizeof(Confset)); @@ -1826,145 +1835,152 @@ case 67: ; break;} case 68: -#line 793 "parser.y" +#line 799 "parser.y" { yyval = yyvsp[0]; ; break;} case 69: -#line 800 "parser.y" +#line 806 "parser.y" { yyval = yyvsp[0]; ; break;} case 70: -#line 806 "parser.y" +#line 812 "parser.y" { psmsg ("backend server:", yyvsp[0].set[0].v.sval); yyval = yyvsp[0]; ; break;} case 71: -#line 811 "parser.y" +#line 817 "parser.y" { pimsg ("backend port:", yyvsp[0].set[0].v.ival); yyval = yyvsp[0]; ; break;} case 72: -#line 816 "parser.y" +#line 822 "parser.y" { pimsg ("backend verbosity:", yyvsp[0].set[0].v.ival); yyval = yyvsp[0]; ; break;} case 73: -#line 821 "parser.y" +#line 827 "parser.y" { psmsg ("backend onstart:", yyvsp[0].set[0].v.sval); yyval = yyvsp[0]; ; break;} case 74: -#line 826 "parser.y" +#line 832 "parser.y" { psmsg ("backend onend:", yyvsp[0].set[0].v.sval); yyval = yyvsp[0]; ; break;} case 75: -#line 831 "parser.y" +#line 837 "parser.y" { psmsg ("backend onfail:", yyvsp[0].set[0].v.sval); yyval = yyvsp[0]; ; break;} case 76: -#line 836 "parser.y" +#line 842 "parser.y" { psmsg ("backend trafficlog:", yyvsp[0].set[0].v.sval); yyval = yyvsp[0]; ; break;} case 77: -#line 841 "parser.y" +#line 847 "parser.y" { psmsg ("backend trafficlog:", yyvsp[0].set[0].v.sval); yyval = yyvsp[0]; ; break;} case 78: -#line 846 "parser.y" +#line 852 "parser.y" { pimsg ("backend weight:", yyvsp[0].set[0].v.ival); yyval = yyvsp[0]; ; break;} case 79: -#line 851 "parser.y" +#line 857 "parser.y" { pimsg ("backend decay:", yyvsp[0].set[0].v.ival); yyval = yyvsp[0]; ; break;} case 80: -#line 856 "parser.y" +#line 862 "parser.y" { pimsg ("backend maxconnections:", yyvsp[0].set[0].v.ival); yyval = yyvsp[0]; ; break;} case 81: -#line 861 "parser.y" +#line 867 "parser.y" { psmsg ("backend sticky cookie:", yyvsp[0].set[0].v.sval); yyval = yyvsp[0]; ; break;} case 82: -#line 866 "parser.y" +#line 872 "parser.y" { psmsg ("addclientheader:", yyvsp[0].set[0].v.sval); yyval = yyvsp[0]; ; break;} case 83: -#line 871 "parser.y" +#line 877 "parser.y" { psmsg ("setclientheader:", yyvsp[0].set[0].v.sval); yyval = yyvsp[0]; ; break;} case 84: -#line 876 "parser.y" +#line 882 "parser.y" { psmsg ("appendclientheader:", yyvsp[0].set[0].v.sval); yyval = yyvsp[0]; ; break;} case 85: -#line 881 "parser.y" +#line 887 "parser.y" { psmsg ("addserverheader:", yyvsp[0].set[0].v.sval); yyval = yyvsp[0]; ; break;} case 86: -#line 886 "parser.y" +#line 892 "parser.y" { psmsg ("setserverheader:", yyvsp[0].set[0].v.sval); yyval = yyvsp[0]; ; break;} case 87: -#line 891 "parser.y" +#line 897 "parser.y" { psmsg ("appendserverheader:", yyvsp[0].set[0].v.sval); yyval = yyvsp[0]; ; break;} case 88: -#line 901 "parser.y" +#line 902 "parser.y" +{ + pimsg ("backend retries:", yyvsp[0].set[0].v.ival); + yyval = yyvsp[0]; + ; + break;} +case 89: +#line 912 "parser.y" { psmsg ("server statement:", laststr); yyval.n = 1; @@ -1973,8 +1989,8 @@ case 88: yyval.set[0].v.sval = xstrdup (laststr); ; break;} -case 89: -#line 913 "parser.y" +case 90: +#line 924 "parser.y" { pimsg ("weight statement", lastnr); yyval.n = 1; @@ -1983,8 +1999,8 @@ case 89: yyval.set[0].v.ival = lastnr; ; break;} -case 90: -#line 925 "parser.y" +case 91: +#line 936 "parser.y" { pimsg ("decay statement", lastnr); yyval.n = 1; @@ -1993,14 +2009,24 @@ case 90: yyval.set[0].v.ival = lastnr; ; break;} -case 91: -#line 935 "parser.y" +case 92: +#line 946 "parser.y" { setlaststr (laststring); ; break;} -case 92: -#line 943 "parser.y" +case 93: +#line 954 "parser.y" +{ + pimsg ("retries:", lastnr); + yyval.n = 1; + yyval.set = xmalloc (sizeof(Confset)); + yyval.set[0].cf = cf_retriesspec; + yyval.set[0].v.ival = lastnr; + ; + break;} +case 94: +#line 966 "parser.y" { psmsg ("onstart statement:", laststr); yyval.n = 1; @@ -2009,8 +2035,8 @@ case 92: yyval.set[0].v.sval = xstrdup (laststr); ; break;} -case 93: -#line 955 "parser.y" +case 95: +#line 978 "parser.y" { psmsg ("onfail statement:", laststr); yyval.n = 1; @@ -2019,8 +2045,8 @@ case 93: yyval.set[0].v.sval = xstrdup (laststr); ; break;} -case 94: -#line 967 "parser.y" +case 96: +#line 990 "parser.y" { psmsg ("onend statement:", laststr); yyval.n = 1; @@ -2029,8 +2055,8 @@ case 94: yyval.set[0].v.sval = xstrdup (laststr); ; break;} -case 95: -#line 979 "parser.y" +case 97: +#line 1002 "parser.y" { psmsg ("trafficlog statement:", laststr); yyval.n = 1; @@ -2039,8 +2065,8 @@ case 95: yyval.set[0].v.sval = xstrdup (laststr); ; break;} -case 96: -#line 991 "parser.y" +case 98: +#line 1014 "parser.y" { psmsg ("throughputlog statement:", laststr); yyval.n = 1; @@ -2049,24 +2075,24 @@ case 96: yyval.set[0].v.sval = xstrdup (laststr); ; break;} -case 97: -#line 1002 "parser.y" +case 99: +#line 1025 "parser.y" { setlaststr (laststring); free (laststring); laststring = 0; ; break;} -case 98: -#line 1011 "parser.y" +case 100: +#line 1034 "parser.y" { setlaststr (laststring); free (laststring); laststring = 0; ; break;} -case 99: -#line 1021 "parser.y" +case 101: +#line 1044 "parser.y" { psmsg ("insertcookie statement:", laststr); yyval.n = 1; @@ -2075,16 +2101,16 @@ case 99: yyval.set[0].v.sval = xstrdup (laststr); ; break;} -case 100: -#line 1032 "parser.y" +case 102: +#line 1055 "parser.y" { setlaststr (laststring); free (laststring); laststring = 0; ; break;} -case 101: -#line 1042 "parser.y" +case 103: +#line 1065 "parser.y" { psmsg ("addclientheader statement:", laststr); yyval.n = 1; @@ -2093,8 +2119,8 @@ case 101: yyval.set[0].v.sval = xstrdup (laststr); ; break;} -case 102: -#line 1054 "parser.y" +case 104: +#line 1077 "parser.y" { psmsg ("setclientheader statement:", laststr); yyval.n = 1; @@ -2103,8 +2129,8 @@ case 102: yyval.set[0].v.sval = xstrdup (laststr); ; break;} -case 103: -#line 1066 "parser.y" +case 105: +#line 1089 "parser.y" { psmsg ("appendclientheader statement:", laststr); yyval.n = 1; @@ -2113,8 +2139,8 @@ case 103: yyval.set[0].v.sval = xstrdup (laststr); ; break;} -case 104: -#line 1078 "parser.y" +case 106: +#line 1101 "parser.y" { psmsg ("addserverheader statement:", laststr); yyval.n = 1; @@ -2123,8 +2149,8 @@ case 104: yyval.set[0].v.sval = xstrdup (laststr); ; break;} -case 105: -#line 1090 "parser.y" +case 107: +#line 1113 "parser.y" { psmsg ("setserverheader statement:", laststr); yyval.n = 1; @@ -2133,8 +2159,8 @@ case 105: yyval.set[0].v.sval = xstrdup (laststr); ; break;} -case 106: -#line 1102 "parser.y" +case 108: +#line 1125 "parser.y" { psmsg ("appendserverheader statement:", laststr); yyval.n = 1; @@ -2143,118 +2169,118 @@ case 106: yyval.set[0].v.sval = xstrdup (laststr); ; break;} -case 107: -#line 1113 "parser.y" +case 109: +#line 1136 "parser.y" { setlaststr (laststring); free (laststring); laststring = 0; ; break;} -case 108: -#line 1120 "parser.y" +case 110: +#line 1143 "parser.y" { yyerrmsg = "HTTP header specifier expected"; ; break;} -case 109: -#line 1125 "parser.y" +case 111: +#line 1148 "parser.y" { yyerrmsg = "cookie specifier expected"; ; break;} -case 110: -#line 1130 "parser.y" +case 112: +#line 1153 "parser.y" { yyerrmsg = "number expected"; ; break;} -case 111: -#line 1135 "parser.y" +case 113: +#line 1158 "parser.y" { yyerrmsg = "hostname or IP address expected"; ; break;} -case 112: -#line 1140 "parser.y" +case 114: +#line 1163 "parser.y" { yyerrmsg = "'service' expected"; ; break;} -case 113: -#line 1145 "parser.y" +case 115: +#line 1168 "parser.y" { yyerrmsg = "backend definition statement expected"; ; break;} -case 114: -#line 1150 "parser.y" +case 116: +#line 1173 "parser.y" { yyerrmsg = "service body statement expected"; ; break;} -case 115: -#line 1155 "parser.y" +case 117: +#line 1178 "parser.y" { yyerrmsg = "semicolon (;) expected"; ; break;} -case 116: -#line 1160 "parser.y" +case 118: +#line 1183 "parser.y" { yyerrmsg = "'on' or 'off' expetcted"; ; break;} -case 117: -#line 1165 "parser.y" +case 119: +#line 1188 "parser.y" { yyerrmsg = "dispatch method expected"; ; break;} -case 118: -#line 1170 "parser.y" +case 120: +#line 1193 "parser.y" { yyerrmsg = "command line expected"; ; break;} -case 119: -#line 1175 "parser.y" +case 121: +#line 1198 "parser.y" { yyerrmsg = "file name expected"; ; break;} -case 120: -#line 1180 "parser.y" +case 122: +#line 1203 "parser.y" { yyerrmsg = "service name (identifier) expected"; ; break;} -case 121: -#line 1185 "parser.y" +case 123: +#line 1208 "parser.y" { yyerrmsg = "backend name (identifier) expected"; ; break;} -case 122: -#line 1190 "parser.y" +case 124: +#line 1213 "parser.y" { yyerrmsg = "IP address or 'any' expected"; ; break;} -case 123: -#line 1195 "parser.y" +case 125: +#line 1218 "parser.y" { yyerrmsg = "Service type expected ('any', 'stickyhttp', ...)"; ; break;} -case 124: -#line 1200 "parser.y" +case 126: +#line 1223 "parser.y" { yyerrmsg = "IP filter(s) expected"; ; break;} -case 125: -#line 1205 "parser.y" +case 127: +#line 1228 "parser.y" { yyerrmsg = "username expected"; ; @@ -2492,4 +2518,4 @@ yyreturn: #endif return yyresult; } -#line 1209 "parser.y" +#line 1232 "parser.y" diff --git a/src/parser.h b/src/parser.h @@ -1,5 +1,5 @@ /************************************************************************* - * This file is part of Crosroads 1.34, a load balancer and fail over + * This file is part of Crosroads 1.35, a load balancer and fail over * utility for TCP. Copyright (c) Karel Kubat, distributed under GPL. * Visit http://crossroads.e-tunity.com for information. *************************************************************************/ @@ -58,6 +58,7 @@ # define ONEND 302 # define USERACCOUNT 303 # define BYCLIENTIP 304 +# define RETRIES 305 extern YYSTYPE yylval; diff --git a/src/parser.y b/src/parser.y @@ -122,7 +122,7 @@ static void setuseraccount (char *username) { STICKYCOOKIE ADDCLIENTHEADER SETCLIENTHEADER APPENDCLIENTHEADER ADDSERVERHEADER SETSERVERHEADER APPENDSERVERHEADER ALLOWFROM DENYFROM ALLOWFILE DENYFILE EXTERNALHANDLER ONEND - USERACCOUNT BYCLIENTIP + USERACCOUNT BYCLIENTIP RETRIES %% /* Config file grammar rules */ @@ -409,6 +409,10 @@ servicebody: [cur_backend.nappendserverheader++] = $1.set[i].v.sval; break; + case cf_retriesspec: + pimsg ("backend retries:", $1.set[i].v.ival); + cur_backend.retries = $1.set[i].v.ival; + break; default: error ("Internal jam, unhandled type %d " "in backend specification", @@ -422,8 +426,10 @@ servicebody: if (!cur_service.port) error ("Back end %s lacks port", cur_service.port); - if (!cur_backend.weight) + if (cur_backend.weight < 1) cur_backend.weight = 1; + if (cur_backend.retries < 1) + cur_backend.retries = 1; /* Add to the list. */ cur_service.backend = xrealloc (cur_service.backend, @@ -892,6 +898,11 @@ backendstatement: psmsg ("appendserverheader:", $1.set[0].v.sval); $$ = $1; } +| + retriesstatement { + pimsg ("backend retries:", $1.set[0].v.ival); + $$ = $1; + } ; serverstatement: @@ -937,6 +948,18 @@ serveraddress: } ; +retriesstatement: + RETRIES + number + semicol { + pimsg ("retries:", lastnr); + $$.n = 1; + $$.set = xmalloc (sizeof(Confset)); + $$.set[0].cf = cf_retriesspec; + $$.set[0].v.ival = lastnr; + } +; + onstartstatement: ONSTART commandline diff --git a/src/restart.c b/src/restart.c @@ -1,5 +1,5 @@ /************************************************************************* - * This file is part of Crosroads 1.34, a load balancer and fail over + * This file is part of Crosroads 1.35, a load balancer and fail over * utility for TCP. Copyright (c) Karel Kubat, distributed under GPL. * Visit http://crossroads.e-tunity.com for information. *************************************************************************/ diff --git a/src/runservice.c b/src/runservice.c @@ -1,5 +1,5 @@ /************************************************************************* - * This file is part of Crosroads 1.34, a load balancer and fail over + * This file is part of Crosroads 1.35, a load balancer and fail over * utility for TCP. Copyright (c) Karel Kubat, distributed under GPL. * Visit http://crossroads.e-tunity.com for information. *************************************************************************/ diff --git a/src/serve.c b/src/serve.c @@ -1,5 +1,5 @@ /************************************************************************* - * This file is part of Crosroads 1.34, a load balancer and fail over + * This file is part of Crosroads 1.35, a load balancer and fail over * utility for TCP. Copyright (c) Karel Kubat, distributed under GPL. * Visit http://crossroads.e-tunity.com for information. *************************************************************************/ diff --git a/src/setprogramtitle.c b/src/setprogramtitle.c @@ -1,5 +1,5 @@ /************************************************************************* - * This file is part of Crosroads 1.34, a load balancer and fail over + * This file is part of Crosroads 1.35, a load balancer and fail over * utility for TCP. Copyright (c) Karel Kubat, distributed under GPL. * Visit http://crossroads.e-tunity.com for information. *************************************************************************/ diff --git a/src/showservices.c b/src/showservices.c @@ -1,5 +1,5 @@ /************************************************************************* - * This file is part of Crosroads 1.34, a load balancer and fail over + * This file is part of Crosroads 1.35, a load balancer and fail over * utility for TCP. Copyright (c) Karel Kubat, distributed under GPL. * Visit http://crossroads.e-tunity.com for information. *************************************************************************/ diff --git a/src/showstatus.c b/src/showstatus.c @@ -1,5 +1,5 @@ /************************************************************************* - * This file is part of Crosroads 1.34, a load balancer and fail over + * This file is part of Crosroads 1.35, a load balancer and fail over * utility for TCP. Copyright (c) Karel Kubat, distributed under GPL. * Visit http://crossroads.e-tunity.com for information. *************************************************************************/ diff --git a/src/stagetostring.c b/src/stagetostring.c @@ -1,5 +1,5 @@ /************************************************************************* - * This file is part of Crosroads 1.34, a load balancer and fail over + * This file is part of Crosroads 1.35, a load balancer and fail over * utility for TCP. Copyright (c) Karel Kubat, distributed under GPL. * Visit http://crossroads.e-tunity.com for information. *************************************************************************/ diff --git a/src/statetostring.c b/src/statetostring.c @@ -1,5 +1,5 @@ /************************************************************************* - * This file is part of Crosroads 1.34, a load balancer and fail over + * This file is part of Crosroads 1.35, a load balancer and fail over * utility for TCP. Copyright (c) Karel Kubat, distributed under GPL. * Visit http://crossroads.e-tunity.com for information. *************************************************************************/ diff --git a/src/stopdaemon.c b/src/stopdaemon.c @@ -1,5 +1,5 @@ /************************************************************************* - * This file is part of Crosroads 1.34, a load balancer and fail over + * This file is part of Crosroads 1.35, a load balancer and fail over * utility for TCP. Copyright (c) Karel Kubat, distributed under GPL. * Visit http://crossroads.e-tunity.com for information. *************************************************************************/ diff --git a/src/strcasestr.c b/src/strcasestr.c @@ -1,5 +1,5 @@ /************************************************************************* - * This file is part of Crosroads 1.34, a load balancer and fail over + * This file is part of Crosroads 1.35, a load balancer and fail over * utility for TCP. Copyright (c) Karel Kubat, distributed under GPL. * Visit http://crossroads.e-tunity.com for information. *************************************************************************/ diff --git a/src/strexpandformat.c b/src/strexpandformat.c @@ -1,5 +1,5 @@ /************************************************************************* - * This file is part of Crosroads 1.34, a load balancer and fail over + * This file is part of Crosroads 1.35, a load balancer and fail over * utility for TCP. Copyright (c) Karel Kubat, distributed under GPL. * Visit http://crossroads.e-tunity.com for information. *************************************************************************/ diff --git a/src/stringtostate.c b/src/stringtostate.c @@ -1,5 +1,5 @@ /************************************************************************* - * This file is part of Crosroads 1.34, a load balancer and fail over + * This file is part of Crosroads 1.35, a load balancer and fail over * utility for TCP. Copyright (c) Karel Kubat, distributed under GPL. * Visit http://crossroads.e-tunity.com for information. *************************************************************************/ diff --git a/src/strlcat.c b/src/strlcat.c @@ -1,5 +1,5 @@ /************************************************************************* - * This file is part of Crosroads 1.34, a load balancer and fail over + * This file is part of Crosroads 1.35, a load balancer and fail over * utility for TCP. Copyright (c) Karel Kubat, distributed under GPL. * Visit http://crossroads.e-tunity.com for information. *************************************************************************/ diff --git a/src/strprintf.c b/src/strprintf.c @@ -1,5 +1,5 @@ /************************************************************************* - * This file is part of Crosroads 1.34, a load balancer and fail over + * This file is part of Crosroads 1.35, a load balancer and fail over * utility for TCP. Copyright (c) Karel Kubat, distributed under GPL. * Visit http://crossroads.e-tunity.com for information. *************************************************************************/ diff --git a/src/strvprintf.c b/src/strvprintf.c @@ -1,5 +1,5 @@ /************************************************************************* - * This file is part of Crosroads 1.34, a load balancer and fail over + * This file is part of Crosroads 1.35, a load balancer and fail over * utility for TCP. Copyright (c) Karel Kubat, distributed under GPL. * Visit http://crossroads.e-tunity.com for information. *************************************************************************/ diff --git a/src/sysrun.c b/src/sysrun.c @@ -1,5 +1,5 @@ /************************************************************************* - * This file is part of Crosroads 1.34, a load balancer and fail over + * This file is part of Crosroads 1.35, a load balancer and fail over * utility for TCP. Copyright (c) Karel Kubat, distributed under GPL. * Visit http://crossroads.e-tunity.com for information. *************************************************************************/ diff --git a/src/tcpserve.c b/src/tcpserve.c @@ -1,5 +1,5 @@ /************************************************************************* - * This file is part of Crosroads 1.34, a load balancer and fail over + * This file is part of Crosroads 1.35, a load balancer and fail over * utility for TCP. Copyright (c) Karel Kubat, distributed under GPL. * Visit http://crossroads.e-tunity.com for information. *************************************************************************/ diff --git a/src/tellservice.c b/src/tellservice.c @@ -1,5 +1,5 @@ /************************************************************************* - * This file is part of Crosroads 1.34, a load balancer and fail over + * This file is part of Crosroads 1.35, a load balancer and fail over * utility for TCP. Copyright (c) Karel Kubat, distributed under GPL. * Visit http://crossroads.e-tunity.com for information. *************************************************************************/ diff --git a/src/thruputlog.c b/src/thruputlog.c @@ -1,5 +1,5 @@ /************************************************************************* - * This file is part of Crosroads 1.34, a load balancer and fail over + * This file is part of Crosroads 1.35, a load balancer and fail over * utility for TCP. Copyright (c) Karel Kubat, distributed under GPL. * Visit http://crossroads.e-tunity.com for information. *************************************************************************/ diff --git a/src/trafficlog.c b/src/trafficlog.c @@ -1,5 +1,5 @@ /************************************************************************* - * This file is part of Crosroads 1.34, a load balancer and fail over + * This file is part of Crosroads 1.35, a load balancer and fail over * utility for TCP. Copyright (c) Karel Kubat, distributed under GPL. * Visit http://crossroads.e-tunity.com for information. *************************************************************************/ diff --git a/src/uidassume.c b/src/uidassume.c @@ -1,5 +1,5 @@ /************************************************************************* - * This file is part of Crosroads 1.34, a load balancer and fail over + * This file is part of Crosroads 1.35, a load balancer and fail over * utility for TCP. Copyright (c) Karel Kubat, distributed under GPL. * Visit http://crossroads.e-tunity.com for information. *************************************************************************/ diff --git a/src/uidrestore.c b/src/uidrestore.c @@ -1,5 +1,5 @@ /************************************************************************* - * This file is part of Crosroads 1.34, a load balancer and fail over + * This file is part of Crosroads 1.35, a load balancer and fail over * utility for TCP. Copyright (c) Karel Kubat, distributed under GPL. * Visit http://crossroads.e-tunity.com for information. *************************************************************************/ diff --git a/src/unlockreporter.c b/src/unlockreporter.c @@ -1,5 +1,5 @@ /************************************************************************* - * This file is part of Crosroads 1.34, a load balancer and fail over + * This file is part of Crosroads 1.35, a load balancer and fail over * utility for TCP. Copyright (c) Karel Kubat, distributed under GPL. * Visit http://crossroads.e-tunity.com for information. *************************************************************************/ diff --git a/src/usage.c b/src/usage.c @@ -1,5 +1,5 @@ /************************************************************************* - * This file is part of Crosroads 1.34, a load balancer and fail over + * This file is part of Crosroads 1.35, a load balancer and fail over * utility for TCP. Copyright (c) Karel Kubat, distributed under GPL. * Visit http://crossroads.e-tunity.com for information. *************************************************************************/ diff --git a/src/vsyslog.c b/src/vsyslog.c @@ -1,5 +1,5 @@ /************************************************************************* - * This file is part of Crosroads 1.34, a load balancer and fail over + * This file is part of Crosroads 1.35, a load balancer and fail over * utility for TCP. Copyright (c) Karel Kubat, distributed under GPL. * Visit http://crossroads.e-tunity.com for information. *************************************************************************/ diff --git a/src/wakeuphandler.c b/src/wakeuphandler.c @@ -1,5 +1,5 @@ /************************************************************************* - * This file is part of Crosroads 1.34, a load balancer and fail over + * This file is part of Crosroads 1.35, a load balancer and fail over * utility for TCP. Copyright (c) Karel Kubat, distributed under GPL. * Visit http://crossroads.e-tunity.com for information. *************************************************************************/ diff --git a/src/warning.c b/src/warning.c @@ -1,5 +1,5 @@ /************************************************************************* - * This file is part of Crosroads 1.34, a load balancer and fail over + * This file is part of Crosroads 1.35, a load balancer and fail over * utility for TCP. Copyright (c) Karel Kubat, distributed under GPL. * Visit http://crossroads.e-tunity.com for information. *************************************************************************/ diff --git a/src/writelog.c b/src/writelog.c @@ -1,5 +1,5 @@ /************************************************************************* - * This file is part of Crosroads 1.34, a load balancer and fail over + * This file is part of Crosroads 1.35, a load balancer and fail over * utility for TCP. Copyright (c) Karel Kubat, distributed under GPL. * Visit http://crossroads.e-tunity.com for information. *************************************************************************/ diff --git a/src/xmalloc.c b/src/xmalloc.c @@ -1,5 +1,5 @@ /************************************************************************* - * This file is part of Crosroads 1.34, a load balancer and fail over + * This file is part of Crosroads 1.35, a load balancer and fail over * utility for TCP. Copyright (c) Karel Kubat, distributed under GPL. * Visit http://crossroads.e-tunity.com for information. *************************************************************************/ diff --git a/src/xrealloc.c b/src/xrealloc.c @@ -1,5 +1,5 @@ /************************************************************************* - * This file is part of Crosroads 1.34, a load balancer and fail over + * This file is part of Crosroads 1.35, a load balancer and fail over * utility for TCP. Copyright (c) Karel Kubat, distributed under GPL. * Visit http://crossroads.e-tunity.com for information. *************************************************************************/ diff --git a/src/xstrcat.c b/src/xstrcat.c @@ -1,5 +1,5 @@ /************************************************************************* - * This file is part of Crosroads 1.34, a load balancer and fail over + * This file is part of Crosroads 1.35, a load balancer and fail over * utility for TCP. Copyright (c) Karel Kubat, distributed under GPL. * Visit http://crossroads.e-tunity.com for information. *************************************************************************/ diff --git a/src/xstrcatch.c b/src/xstrcatch.c @@ -1,5 +1,5 @@ /************************************************************************* - * This file is part of Crosroads 1.34, a load balancer and fail over + * This file is part of Crosroads 1.35, a load balancer and fail over * utility for TCP. Copyright (c) Karel Kubat, distributed under GPL. * Visit http://crossroads.e-tunity.com for information. *************************************************************************/ diff --git a/src/xstrdup.c b/src/xstrdup.c @@ -1,5 +1,5 @@ /************************************************************************* - * This file is part of Crosroads 1.34, a load balancer and fail over + * This file is part of Crosroads 1.35, a load balancer and fail over * utility for TCP. Copyright (c) Karel Kubat, distributed under GPL. * Visit http://crossroads.e-tunity.com for information. *************************************************************************/