
ChangeLog for Crossroads
------------------------------------------------------------------------------

1.80 [KK 2008-05-19]
     - "Read from <client/server> timed out" is now only an error when
       it concerns the server. When it concerns the client, it's only a
       verbose message.
     - In http_copy(): Copy-thru mode from server to client is NOT
       entered when the server sent a HTTP/1.x 3xx response. HTTP 300
       responses are not assumed to have a body.     

1.79 [KK 2008-04-01]
     - Changed 'make' in '$(MAKE)' in all Makefiles to support 'gmake'
       invocations.
     - Added debugging to config_write() (Solaris problems)
     - Changed limits_msg() to avoid RLIMIT_MEMLOCK, RLIMIT_NPROC,
       RLIMIT_RSS on systems that don't have these (Solaris problems)
     - Rewrote Messaging functions msg(), error(), warning() to
       autosupply the service name.
     - The configuration file is now searched relative to the program,
       then as /etc/crossroads.conf. So if eg. the program is
       /opt/crossroads/bin/crossroads, then the config may be
       /opt/crossroads/etc/crossroads.conf. 

1.78 [KK 2008-03-14]
     - Limits of running service are shown when verbosity is on.
     - Fixed "no child processes" error when doing system() calls
       under Linux. The signal handler for SIGCHLD must apparently be
       off (see src/lib/sysrun.c). Also fixed for popen() calls (see
       src/lib/choosebackend.c).

1.77 [KK 2008-03-07]
     - Next development version. Introduced %l for last-connect timing.

1.76 [KK 2008-01-31]
     - Parser again made stricter: a backend's maxconnections is not allowed
       when the service's dispatch type is an external handler.
     - Porting issues for gcc 4.0.2 (default at MacOSX Leopard) solved.

1.75 [KK 2008-01-25]
     - Changed chunked transfer copying in HTTP mode. The trailing
       \r\n, following a zero-bytes chunk, also gets handled in
       http_copy(). Before it was left for handling in a next loop.
     - Bugfix in the parser, regarding handling of external dispatcher
       definitions.
     - Change in the way Crossroads handles responses from external
       dispatchers: when no back ends are available, XR will sleep for
       a short time. Better handling of incorrect responses.
     - Irritating svn messages during build phase suppressed.

1.74 [KK 2008-01-22]
     - Bugfix in HTTP header scanning.
     - strnstr() added for systems that lack it
     - Warning stanza enhanced when select() fails during network writes,
       back end names are displayed

1.73 [KK 2008-01-17]
     - Upon service startup the initial configuration is logged (if
       verbose is on).
     - Flag -P added for parser/lexer verbosity (debugging only).
       <stringstate> rewritten. String-state lexer strips trailing
       spaces in stringstate mode.
     - Backend-level directive "httptiminglog" implemented.
     - "througputlog" logging will also include the # of bytes.

1.72 [KK 2008-01-14]
     - Lexical analyzer changed: whitespace leading up to strings (eg.
       external handler specifiiers) are skipped.
     - Porting issues with Intel Macs solved.
     - Upped c-conf to 1.11 (compatible with MacOSX's extensions
       MacPorts and with Fink).
     - External dispatchers are called even when NO back ends are
       available. Previously asking an external dispatcher would only
       occur when one or more back ends was up. Furthermore,
       Crossroads will always accept the dispatcher's suggestion, even
       when that back end was previously unavailable.

1.71 [KK 2008-01-12]
     - Bugfix in 1.70 related to HTTP body copy-thru mode.

1.70 [KK 2008-01-11]
     - Bugfix in 1.69 (yeah that was fast)..

1.69 [KK 2008-01-11]
     - The HTTP header processing was rewritten to work with octet
       chunks. Previously TCP buffers would be processed byte by byte
       to match headers. Hopefully this will speed up HTTP processing.

1.68 [KK 2008-01-10]
     - "crossroads status" now also reports the PID of each service
       listener process (in both plain text and XML). Thanks Felix Ostmann
       for suggesting.

1.67 [KK 2008-01-09]
     - In the case of an external dispatcher: the dispatcher will be
       called even when there is only one backend available. The
       dispatcher may have side-actions to perform. Thanks Nicolas
       Prochazka for suggesting this. EXPERIMENTAL VERSION - use 1.65
       until this code has proven stable.

1.66 [KK 2008-01-09]
     - Forking of a servicer moved 'forward', before dispatching
       phase. That way external dispatchers won't slow down the
       listener. Thanks, Nicolas Prochazka, for suggesting this. 
       This version is EXPERIMENTAL ONLY - use 1.65 until this code
       has proven stable. Incidentally, this makes the system load
       lower as well...
       
1.65 [KK 2008-01-08]
     - Bugfix in parsing of -B option (TCP buffer size)

1.64 [KK 2007-12-27]
     - Bugfix in "dispatchmode byclientip"
     - Added testing utility test/hashtest
     - The parser is stricter. HTTP-related directives are now only
       allowed when 'type http' is given.

1.63 [KK 2007-12-10]
     - Cosmetic change to usage text.
     - Flag -p implemented.
     - Commandline functions (start/stop) etc now in properly named
       §sources.
     [KK 2007-12-14] Promoted to Stable.

1.62 [KK 2007-10-03]
     - Extended format specifiers with %g. In time-related modifiers
       like %g, %t, %T, the optional number is an offset into the
       future (so %3600t is now + 1h). Thanks Gunnar S. for pointing
       this out. 

1.61 [KK 2007-10-02]
     - Added messaging to allowfrom/denyfrom rule handling. Bugfixes
       in the parsing and handling of allow/deny rules. Thanks Chris
       G. for pointing this out to me.

1.60 [KK 2007-08-29]
     - upped c-conf to 1.10
     - Support for __progname_full in systems that have it, see setproctitle()

1.59 [KK 2007-08-22]
     - 1.58 Stable

1.58 [KK 2007-08-21]
     - Bugfix in the handling of "bindto any". Thanks, Simon M. for
       pointing it out.

1.57 [KK 2007-08-20]
     - Next development release.

1.56 [KK 2007-08-20]
     - This is basically only version 1.55 marked STABLE.

1.55 [KK 2007-08-16]
     - Changed error handling of the finding of duplicate ports. Same
       ports in different service statements are now an error only if
       one or both services don't list a bindto address (or if the two
       listed bindto addresses are the same). Thanks, Rodd Johnson,
       for finding this bug.

1.54 [KK 2007-07-30]
     - Changed copyright to GPL V3.

1.53 [KK 2007-07-29]
     - Misc small changes, thanks Simon Matter for all suggestions,
       fixes and diffs! Changes include: ps fix for Linux systems in
       crossroads-mgr, 'use POSIX' fix in Perl, C code fix for for
       older gcc's.
     - crossroads-mgr now supports a flag '-a address' to specify a
       listening address (also suggested by Simon).

1.52 [KK 2007-07-12]
     - Added list of keywords to the docs
     - Removed Log4Perl dependency in crossroads-mgr (easier for distro's)

1.51 [KK 2007-07-10]
     - Removed global MAX_BACKEND setting. The number of back ends per
       service is now totally dynamic - derived from the
       configuration.
     - Added counts of available back ends, unavailable back ends and
       so on to "crossroads -x status". The web interface
       crossroads-mgr now picks this up.
     - Documentation updated. Small fixes.

1.50 [KK 2007-07-08]
     - Back end states can be initially set using the "state"
       directive. Command "crossroads tell" now requires keyword
       "state" for setting the state.
     - Introduced actual_server and actual_port in SHM block for back
       end addresses. Introduced define FQDN_LENGTH. Back end addresses
       can be set using "crossroads tell".
     - Web front end crossroads-mgr can now redefine a back end address.

1.49 [KK 2007-07-04]
     - Next development cycle version.

1.48 [KK 2007-07-04]
     - Added strupr() for systems that lack it.
     - Version tagged STABLE.

1.47 [KK 2007-06-27] 
     - Added "externalhandler" to "revivinginterval"
     - Added "checkinterval"
     - Last connect time per back end gets stored

1.46 [KK 2007-06-25] 
     - Flag -X added (for xslt reference embedding)
     - "crossroads tell {service} {backend} {state}": state can be
       numeric
     - Added crossroads-mgr, updated all docs, etc..
     - Fixed "make distclean"

1.45 [KK 2007-06-12]
     - Configuration option 'headerinspection {deep|shallow}'
       implemented. Documentation updated. Several other documentation fixes.
     - New make target 'dbginstall', installs gdb-able versions into
       /usr/local/bin
     - Upped c-conf to 1.09: /usr/lib64 is in the library search path
       (thanks Joern F. for pointing this one out).
     - Added setproctitle() for non-BSD-ish systems. Previous
       set_program_title() is obsolete (it woundn't save the envp).
     - Flag -B <bufsize> introduced, making the TCP buffer size
       variable. Previous constant TCP_BUFSZ is now DEFAULT_TCP_BUFSZ,
       which is now 5k instead of 10k.

1.44 [KK 2007-06-12]
     - Small bugfix in -b flag handling (useful during debugging only).

1.43 [KK 2007-05-22] 
     - Changed the way that shmkeys are computed; the old way would
       cause more collisions.
     - Implemented DNS caching. By default 20 gethostbyname() results
       can be cached, with a ttl of 1 hour per entry; though the ttl
       has a default of 0 (no caching). Flag -d can overrule the TTL.
     - Fixed makefile dependency for crossroads-daemon.
     - Upped c-conf to 1.08.
     - Reorganized docs. Key variables (author, maintainer, ...) are
       passed from the Makefile.
     - Added a small test run to the making: test/t*conf should parse
       OK, test/bad*conf should fail. These tests are auto-run on
       'make local'.
     - Added #include to the grammar. Shell-style #-comments are no
       longer allowed. Added #define to the grammar.

1.42 [KK 2007-05-21]
     - Fixed small portability issue for gcc 4.0.3 (library dependency
       with libm.a)
     - Added etc/svncheck to verify that SVN holds all files, before
       making a distro.

1.41 [KK 2007-05-18] 
     - Included c-conf 1.07 (caching provisions - way faster build)
     - Fixed deliverable, version 1.40 lacked files (DISTRO WAS BROKEN)

1.40 [KK 2007-05-16] 
     - Added flag -m to control shared memory access mode.
     - Implemented flag -x for XML report of status.
     - Added tips sections on health check scripting and on XSLT's.
     - Cosmetic code changes.
     - The daemon 'sec' is now in in a separate crossroads-daemon
       binary. Configuration parsing, usage info etc. not included, so
       that the sec daemon has a smaller footprint.

1.39 [KK 2007-05-06]
     - This is the next development release (1.38 promoted to stable).
     -  Fixed tcp_serve() to only warn when accept() fails (this used
        to be fatal).

1.38 [KK 2007-04-26] Many changes:
     - 'crossroads status' now supports optional service/backend arguments.
     - Added specific nullstring initializers to parser.y.
     - Added info on ip_conntrack_max to the tips section of the docs
       (Thanks, Felix).
     - Rewritten the code that timeouts upon network connect (this used
       to have jumps which isn't safe). 
     - Added docs on -t (tabular status report) flag.
     - Added code to avoid logging and running on-end hooks when HTTP
       mode fails to find a suitable back end.
     - Added test/t8.conf which works with breaking-client, to
       simulate clients that hang up.
     - 'make clean' removes GDB's history files
     - Removed usage of non-reentrant functions from signal handler
       (interrupt.c) 
     - Added RETRY_WAIT, small sleep time when retrying connecting to
       the same back end
     - Added description of retries keyword to the Tips&Tricks section
     - Fixed mark_activity() to apply decays only for 'true'
       connections, not for wakeup calls
     - Split up the tips section of the docs into separate sources.
     - Added flag -C to show compile-time settings.
     - Sped up make process by scanning c-conf output just once (:=
       instead of =, probably GNU Make only, we'll see).

1.37 [KK 2007-04-17] Intermediate release for bughunts on 64bit Linux.

1.36 [KK 2007-04-16] Fixed small bug in total usage counting. Bugfix
     in resetting temporary failure counts of back ends (while waiting
     for retries to expire). Added __attribute__ compiler macro to
     functions such as msg(), warning() -- and fixed format conversion issues.

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'
     (useful for automated parsing, e.g. for heartbeat scripts).
     [KK 2007-04-06] Increased max # of back ends per service to
     20. (In the future this should be a dynamic value - but it'll
     take code changes; so for now, I'm taking 20.)

1.33 [KK 2007-04-02] Added hashpjw.c to the repository - I had
     forgotten that in 1.32 (so, 1.32 is broken..).

1.32 [KK 2007-03-30] Change net_read() and net_copy(): Read exceptions
     on the client network socket don't issue error or warning
     messages; clients are notorious for just dropping dead. Logging
     this just clogs up the syslog. These situations are only logged
     when verbosity is on.

1.31 [KK 2007-03-21] Changed messaging from error to warning when a
     TCP write fails towards the server. The fact that the server
     hangs up, can be actually intended -- Crossroads can't make
     assumptions about it. Marked 1.30 as stable, 1.31 is the next
     development release.

1.30 [KK 2007-03-20] Signed/unsigned fix in net_read() (return value <
     0 would get evaluated badly when taken as unsigned). Changed
     state/string handling, so that "up" is a synonym for "available"
     (eg. in "crossroads tell {myservice} {mybackend} up"). Fixed up
     sources so that compilation with -pedantic is OK. Added flag -W
     to warn against loads of things, mainly signed/unsigned comparisons.

1.29 [KK 2007-02-25] Small code changes in error/msg/warning, no
     action when no format string.
     [KK 2007-03-07] fork_tcp_servicer() won't abort upon fork
     failure, just warn. This avoids fatal stops when the process
     table is full.

1.28 [KK 2007-02-15] Added small dependencies to src/Makefile. Added
     debugging code to http_header_add(). The signal handler (see
     interrupt.c) will exit immediately upon SIGPIPE when in serving
     mode. There is no need to wait for the current request to finish,
     when one of the network pipes has gone. Change exiting to _exit()
     instead of exit() to avoid cleanup code execution. Misc small
     changes in http mode.

1.27 [KK 2007-02-14] Verbosity gets set correctly in HTTP type
     services. 

1.26 [KK 2007-02-13] Backends that are unavailable are skipped in the
     determination of targets during sticky HTTP sessions. This used
     to be: only backends that are available are candidate. Difference
     is that backends that are now marked down, can still be selected
     -- so that sticky HTTP sessions get a chance to continue.

1.25 [KK 2007-01-26] Next development release.

1.24 [KK 2007-01-26] This is identical to version 1.23, tagged Stable.

1.23 [KK 2007-01-04] Removed "sampleconf" program option. There are
     too many config options to have all the sample text in the
     binary. Other small fixes.     

1.22 [KK 2006-12-21] Implemented username directive.
     [KK 2006-12-22] Fixed counting of total sessions.

1.21 [KK 2006-12-11] Implemented externalhandler as dispatch mode.
     Added a few sample handlers, updated the docs. NOTE: The external
     dispatcher handlers are ALPHA CODE at this time.
     [KK 2006-12-13] Changed the 'configuration' section of the
     docs. Directives are now in their own subsection, so that they
     have their own TOC entry.
     [KK 2006-12-14] Changed the 'onsuccess' directive to
     'onstart'. Implemented 'onend'. Commands that are run via these
     hooks, plus via 'onfailure', get expanded. Added format expanders
     '%n' (connections of a back end) and '%w' (weights of a back
     end). Thanks Bernd Krumboeck for loads of suggestions, code,
     diffs and testing!
     [KK 2006-12-19] Compilation fixes, thanks again Bernd.

1.20 [KK 2006-12-06] Updated connection handler in HTTP requests to
     show the right title (which backend is being served). Fixed bug
     in client connection counting. Fixed status reporter to show an
     's' after the display of seconds.
     [KK 2006-12-08] Fixed status reporter to use suffix Tb (tera) or
     Gb (giga) for large bytecounts.

1.19 [KK 2006-12-04] Implemented IP filtering (configuration:
     allowfrom/allowfile, denyfrom/denyfile). Updated docs. Recoded
     filtering so that the order is "deny,allow" (a-la Apache). More
     messaging in "dispatchmode roundrobin".

1.18 [KK 2006-11-29] Next development version. Fixed net_copy() to
     correctly decrement the client connection count (thanks Bernd
     Krumboeck for the fix!). Small document fix.
     [KK 2006-12-01] http_header_connectiontype() will now correctly
     understand Connection-Type: TE, close (ie. when the "close" is
     part of a larger setting).

1.17 [KK 2006-11-28] Next development version.
     [KK 2006-11-29] Removed debugging stuff which by mistake slipped
     into 1.16 stable. Shipping this 1.17 as next-stable (instead of
     the previous 1.16, which is theoretically unnecessarily slow).     

1.16 [KK 2006-11-01] New development version. Usage text updated to
     point to http://crossroads.e-tunity.com. Flag -s
     implemented. Small bugfix in 'restart' action.
     [KK 2006-11-28] Promoted to next stable version.

1.15 [KK 2006-10-23] Speedup in the handling of chunked HTTP message
     transfer. Furthermore, chunked messages are treated as
     single-shot actions (see RFC2616, liberally explained by yours
     truly).
     [KK 2006-11-01] Bison- and flex-generated files are no longer
     removed in 'make clean'. This helps folks who want to build
     Crossroads but don't have these tools.
     Version 1.15 marked as 'stable'.

1.14 [KK 2006-10-19] Bugfix in chunked transfer encoding (yeah I
     know.. yet again.. hopefully the last time). This was a
     particularly nasty one.

1.13 [KK 2006-09-26] Next development release.
     [KK 2006-10-03] Porting issues for Solaris 9: localtime() issues
     fixed, cp/strip used instead of install -s, ctype.h macro's avoided.

1.12 [KK 2006-09-13] Small changes in wakeup handler. Timeout handling
     in HTTP service processing slightly changed.
     [KK 2006-09-15] Added checks whether both client and server want
     persisting HTTP connections (see http_serve()). Header
     Proxy-Connection: close is inserted if the connections should get
     closed. Rewrote network to- and fro- copying: net_copy() now
     replaces net_read() + net_write().
     [KK 2006-09-26] Promoted to STABLE.

1.11 [KK 2006-09-12] HTTP type services now analyze not only the first
     request/response pair to apply header magic; Subsequent pairs are
     also analyzed.

1.10 [KK 2006-09-11] Small speedup in header reading. Commandline
     option "restart" will now act as "start" if no Crossroads is
     found running. Rewrote chunked transfer-encoding transmission in
     HTTP type services. Messaging now shows the type of message with
     a prefix: ERROR, WARNING or INFO.

1.09 [KK 2006-09-05] Small changes for HP-UX port. Crossroads should
     now compile on HP-UX 11.23 / ia64. (Thanks, Bernd Krumboeck):
     - gcc selected if both gcc and cc are present (c-conf 1.04)
     - conditional compilation of vsyslog() function
     [KK 2006-09-06] Neater support of streamed HTTP transfer
     (eg. video); data is sent instantly to the client.

1.08 [KK 2006-08-28] Next development (trunk) version.
     [KK 2006-08-29] Implemented net_read() / net_write() so that
     socket reads and writes are centralized, with their logging and
     error handling. HTTP transfer buffers are now 'unsigned
     char'. Shell script test/runtest added to drive sanity checks.
     [KK 2006-08-31] Rewrote HTTPP message parsing (http_msg_*()).
     Added directives 6 header modification directives. Lots of code
     cleanups. The HTTP 502 error text (proxy error) is now in a
     separate text file. Byte and second counts of 'crossroads status'
     are now correctly displayed. Documentation updated.

1.07 [KK 2006-07-25] Next development (trunk) version. Directive
     'insertrealip' implemented. Docs updated. While creating docs,
     leading tabs are now expanded (needed for PDF documentation).
     [KK 2006-08-28] 1.07 promoted to next stable version.

1.06 [KK 2006-07-25] Small documentation fix. Embedded c-conf upped to
     1.03 (protection from endless recursive directory
     scans). Optimized http_serve() for short messages (no
     piggybacking is necessary after the initial chat). Flag -u (user
     switch) removed; user switching won't work given privileged TCP
     ports, shared memory access and semaphores all mixed together (or
     in other words: I'm too lazy right now to make this work
     elegantly.)
     Version 1.06 promoted to the next stable.

1.05 [KK 2006-07-12] Restarting heavily sped up, plus it won't affect
     creation of new listener sockets. Messaging improved, the
     affected service is reported. Flag -f (foreground mode) removed;
     this debugging option is no longer useful given the complexity of
     it all. Added socket shutdowns to interrupt handler
     (interrupt.c). Fixed up shared memory free ups.
     THIS VERSION SHOULD MAKE "CROSSROADS RESTART" WORK WELL!

1.04 [KK 2006-06-26] Next development version.
     [KK 2006-07-03] Fixed http_read(); the # of historic
     connections ('totuses')  would be counted double in sticky HTTP
     mode.
     [KK 2006-07-04] Added call to sranddev() to make weighted random
     dispatching more conforming to the weights (HAVE_SRANDDEV defined
     in the Makefile when sranddev() is available).

1.03 [KK 2006-06-20] Support for older gcc's (incase strlcat() is
     missing; added strlcat.c).
     Added -lm to linkage flags for fmod().
     This is a new development version despite the fact that 1.02
     isn't promoted to 'stable'.
     [KK 2006-06-22] Changed internal-server-error HTTP
     response. Fixed very small bug in weighted random dispatchmode;
     the old code wouldn't correctly see similar high weights.
     [KK 2006-06-26] Fixed counting of total nr. of connections in
     sticky HTTP mode (as shown with 'crossroads status').
     This version is tagged as 'stable'.

1.02 [KK 2006-05-11] Next development release.
     [KK 2006-05-12] In HTTP mode, the nr of sessions per back end is
     stored. Improved status reporting: the nr of sessions is shown
     (when type is http), the seconds and bytes are shown in a more
     readable format.
     [KK 2006-05-13] Fixed weighted random balancing; 1.01 had a bug
     that didn't distribute new connections according to the weights
     (see choose_backend()). Introduced new make target 'commit'.
     [KK 2006-05-19] New flag -a introduced, that logs incoming and
     ending activity. See further log_activity_*(). Docs
     updated. Cleaned up the source tree (stale sources removed).
     [KK 2006-06-07] Introduced -l flag for LOG_LOCAL0 to LOG_LOCAL7
     openlog facility selection. Bugfix in log_activity*() calls.
     [KK 2006-06-07] Fixed lock_reporter() / unlock_reporter() so that
     running connection (in program_stage == stage_serving) don't
     crash during semaphore operations. This actually happens when
     there's a running connection and crossroads is stopped on the
     commandline.
     [KK 2006-06-07] Modified the source to use strlcat/snprintf
     instead of strcat/sprintf, to avoid warnings on
     e.g. OpenBSD. Enveloped include <stdint.h> with an #ifdef.

1.01 [KK 2006-05-09] Small codechange in http_serversocket() for GCC <
     4.0. (There was accidentally post-3 code which I didn't notice:)
     [KK 2006-05-10] Improved messaging in choose_backend(), in the
     case of round robin balancing. Implemented weighted balancing with
     "dispatchmode random".
     [KK 2006-05-11] Updated the docs regarding the new primary site
     http://crossroads.e-tunity.com. Promoted 1.01 to the next stable
     release, versioned 1.02 as the next development release.

1.00 [KK 2006-05-05] This version is identical to 0.33, except that
     crossroads will now be hosted in a publicly accessible SVN
     repository at svn://svn.e-tunity.com/crossroads.

0.33 [KK 2006-05-05] Fixed small bug in http_findcookie() concerning
     routing cookies matching.

0.32 [KK 2006-05-02] Fixed set_program_title() to have a separate
     argv[0] argument, so that 'killall' e.a. match 'crossroads'.

0.31 [KK 2006-04-06] Slight change of functionality in
     http_serversocket(). Fail over implemented for existing HTTP
     sessions. Furthermore: small code optimizations.         

0.30 [KK 2006-03-17] Optimization in http_serversocket() routine.

0.29 [KK 2006-03-14]
     - Small bugfix in chunked transfer handling (added: ishexdigit())

0.28 [KK 2006-03-13] 
     - Chunked transfer handling improved.
     - Flag -V implemented.

0.27 [KK 2006-03-10]
     - Small changes in HTTP handling (better support for proxies as
       back ends).
     - Verbosity of HTTP handling somewhat throttled.

0.26 [KK 2006-02-27]
     - Backend definitions now support HOSTNAME:PORT in a 'server'
       specifier.
     - Status overview compressed to fewer lines.
     - Documentation updated and refined.
     - Service types introduced, defaulting to 'any'.
     - New service 'stickyhttp'. New directives 'stickycookie' and
       'insertcookie' to make HTTP sessions.. well.. stick.
     - Old keywords 'sessiontimeout' and 'bysessions' renamed to
       'connectiontimeout' and 'byconnections'.

0.25 [KK 2006-02-08] Program stages are displayed as strings in
     debug/error messages (see stagetostring.c).

0.24 [KK 2006-01-20] Fixed display of high-ascii chars in the dumplog.

0.23 [KK 2006-01-03] Fixed potential race condition when creating
     network sockets over and over. Now a short sleeptime is inserted
     between the retries, so that e.g. new file descriptors become
     available. Fixed potential fd leak.
     
0.22 [KK 2005-12-12] Portability issues fixed for Solaris builds
     (thanks, Lasse Osterild, for pointing this out and fixing
     it). Version ID added to the docs.

0.21 [KK 2005-12-07] Implemented the 'configtest' command line
     argument. Configuration file parsing improved (no more
     shift/reduce conflicts, better error checks). Docs updated.

0.20 [KK 2005-12-06] Changes in the dispatching machine. Added a
     "dispatchmode bysessions", which selects the back end with the
     least active clients (adjusted for weights). All durations are
     now logged with millisecond accuracy, the "dispatchmode
     byduration" uses this. (All this due to Ray Pittigher's requests
     to load-balance MySQL RDBMS back ends ;-)

0.19 [KK 2005-11-29] Cosmetic fix of debug messages. Typo fix in the
     documentation (thanks, Marc Uebel for pointing this one out).
     Fixed the status updater: updates now occur DURING sessions, not
     just at the closing. That makes balancing by duration or by size
     more precise.

0.18 [KK 2005-11-28] Fixed #ifdef/#if clausing of
     SET_PROC_TITLE_BY_ARGV. (Thanks to Ray Pittigher for pointing
     this out, Linux on Redhat AS4 was too critical to grok this code.)

0.17 [KK 2005-11-23] Maintenance-related release. Messages are now logged with
     priority LOG_NOTICE (which ensures debug-information on default
     Mac OSX). When the creation of a listening socket fails, 
     crossroads will retry after X sleep-seconds (this prevents 'port
     steals'). Stability of the wakeup handler improved.

0.16 [KK 2005-11-18] Documentation updated for the throughputlog statement.

0.15 [KK 2005-11-17] Bugfix in time calculation of thruputlog().

0.14 [KK 2005-11-16] Statement 'dumptraffic' renamed to 'trafficlog'.
     Implemented the 'throughputlog' statement.

0.13 [KK 2005-11-09] Implemented support for either flock(), lockf()
     or none of the above; whichever is available. Added #defines for
     flock()-related calls and for others, incase your Unix lacks them
     (thanks to Patrick Debois & Jan Vanhaecht, a Solaris port
     effort). Added linkage flags for the libs: ucb, nsl, pthread,
     socket (thanks also to Patrick Debois & Jan Vanhaecht). Added a
     maxclients statement at the level of back end definitions (thanks
     to Martin Lonkwitz for suggesting this).     

0.12 [KK 2005-11-03] Minor documentation update.

0.11 [KK 2005-10-28] Docs updated. Makefiles somewhat cleaned
     up. Fixed a 'make install' related issue (thanks go to Johnatan
     Cua or pointing this one out).

0.10 [KK 2005-10-26] Minor bugfix. The nr. of sessions in the report
     would not get decreased upon timeout of a session (thanks go to
     Martin Lonkwitz for pointing this one out).

0.09 [KK 2005-10-18] Warnings of backend connections are avoided in
     the wakeup handler. This prevents too much messaging in the
     system log. Implemented commandline action 'restart'. Docs updated.

0.08 [KK 2005-10-13] Minor build changes; port to Mac OSX Darwin.

0.07 [KK 2005-09-15] Small change of verbose messages. Verbose
     messages now go to stderr (instead of stdout). Added shmctl()
     calls to make sure that we're the rightful owner of the shared
     memory segment. Fixed checking of the return value of shmat()
     for 64bit systems [Thanks, Ray Pittigher, for helping me find
     this bug].

0.06 [KK 2005-09-14] Improved error messaging during the parsing of
     the configuration. The onfailure or onsuccess triggers now also
     run during an initial connect; this used to be only during
     interrupted sessions. Improved the handling of new connections
     when no back ends are available: in that case, the client's
     connection gets denied (instead of accepted and closed).
     Increased the default sleep time (pause when no back ends are
     available) to 10 secs; edit etc/Makefile.def if you want to
     change this. Implemented the statement 'bindto ip-address' in
     service configurations; this can be used in situations where
     crossroads must only listen to a specific IP address.

0.05 [KK 2005-09-12] Changed the wakeup handler to generate less
     messages to syslog. Hearing that a back end still hasn't woken up
     is not very relevant.
     Moved release from alpha to beta.

0.04 [KK 2005-07-18] Added manual page. Internal: update of project to
     svn (instead of CVS). Implemented flag -u to set the effective
     uid  of running services. More documentation updates.

0.03 [KK 2005-07-15] Fixed potential race condition in mark_activity()
     to set back end states. Implemented set_program_title() so that
     'ps ax | grep crossroads' shows what's going on. Change in
     show_status(), the output is more condensed. Implemented "over N"
     in dispatchmode, and "weight N" in backend
     configurations. Rewrote the backend selection algorithm. Then of
     course lots of changes in the docs.

0.02 [KK 2005-07-11] Maintenance stuff: fixed minor things in the
     docs, updated timeout message in backend_connect(), fixed minor bug in
     wakeup_handler(), 'tell' argument now matches services and back
     ends without regard to casing. More maintenance in the 'upload'
     target: a crossroads-latest.tar.gz is created to facilitate easy
     downloads from public.e-tunity.com.

0.01 [KK 2005-07-06] First release, alpha.
