'+' = done, '-' = todo, '*' = done except doc

1.2.12 :
 + weighted RR/SH

1.2.13 :
 + maxconn
 + queueing

1.2.14 :
 + HTML status page

        stats enable
        stats uri /?stats  
        stats realm w.ods.org\ statistics
        stats auth user1:pass1
        stats auth user2:pass2
        stats auth user3:pass3
        stats scope <px_id> | '.'

 + allow server-less proxies (for stats)

 - separate timeout controls

 + option 'abortonclose' : if the session is queued or being connecting
   to the server, and the client sends a shutdown(), then decide to abort
   the session early because in most situations, this will be caused by
   a client hitting the 'Stop' button, so there's no reason to overload
   the servers with unservable requests. However, this is not HTTP compliant
   and might cause little trouble to some very specific clients used to
   close immediately after sending the request (no support for KA, which ones?)

 + minconn : makes the server's maxconn dynamic, which will be computed as a
   ratio of the proxy's sessions :
     srv->effective_maxconn =
          max(srv->maxconn * px->nbsess / px->maxconn, srv->minconn)

1.2.15 :
 + monitor-uri : specify an URI for which we will always return 'HTTP/1.0 200'
   and never forward nor log it.

 + option ssl-hello-chk : send SSLv3 client hello messages to check the servers

1.3 :
 - remove unused STATTIME

 - reference all the include files that must be created, possibly under subdirs :

   - acl.h      => more general ACL work
   - appcook.h  => appsession-related cookies
   - backend.h  => back-end part of the PR_O_* + backend definitions
   - buffers.h  => buffer management relying on memory.h
   - capture.h  => header and cookie capture
   - cfgparse.h => configuration parser
   - checks.h   => health checks
   - clireq.h   => the client side "request" part of the current sessions.
   - compat.h   => compatibility with other OSes (TCP_NODELAY, ...)
   - config.h   => config parameters, renamed CONFIG_HAP_*, includes defaults.h
   - controls.h => SN_CACHEABLE, ...
   - cookies.h  => definitions related to cookie management + SN_SCK_*
   - defaults.h => many default values, might disappear soon after cleanup
   - frontend.h => front-end part of the PR_O_* + client definitions + listeners
   - global.h   => shared global variables
   - http.h     => HTTP state definitions and transitions
   - httperr.{hc} => HTTP return codes
   - libtask.h  => task scheduler
   - libtime.h  => time-related definitions
   - loadbal.h  => load balancing algorithms
   - log.h      => log definitions
   - memory.h   => pools
   - polling.h  => definitions of select(), poll(), INTBITS, ...
   - queue.h    => queue management
   - regex.h    => filtering
   - servers.h  => servers definitions (SRV_*, states, ...)
   - fd.h       => FD_ST* (add FD_DGRAM), RES_*, socket states, etc...
   - srvreq.h   => the server side "request" part of the current sessions.
   - standard.h => general purpose macros and defines (eg: MIN/MAX, ...)
   - startup.h  => MODE_*
   - tuning.h   => platform-specific tuning parameters


 - clarify licence by adding a 'MODULE_LICENCE("GPL")' or something equivalent.

 - handle half-closed connections better (cli/srv would not distinguish
   DATA/SHUTR/SHUTW, it would be a session flag which would tell shutr/shutw).
   Check how it got changed in httpterm.

 - 3 memory models : failsafe (prealloc), normal (current), optimal (alloc on
   demand)

 - wait queues replaced for priority-based trees

 - ability to assign a prio based on L7 matching

 - prio-based O(1) scheduler

 - maxconn reserve for VIP/admins

 - verify if it would be worth implementing an epoll_ctl_batch() for Linux

 - balance LC/WLC (patch available)

 - option minservers XXX : activates some backup servers when active servers
   are insufficient

 - monitor minservers XXX : monitor-net and monitor-uri could report a failure
   when the number of active servers is below this threshold.

 - option smtp-chk : use SMTP health checks (avoid logs if possible)

 - new keyword 'check' : check http xxx, check smtp xxx, check ssl-hello

