Changes since 1.0:

* Add extraheader attribute to url's to allow custom headers to be set.
  [Justin Erenkrantz]

* Add payloadfile attribute to url's to allow the body to be read from a file.
  [Justin Erenkrantz]

* Support custom HTTP methods. [Justin Erenkrantz]

* Fix corruption when we have multiple usefarmer's without a count.
  [Justin Erenkrantz]

* Sync with latest find_apr.m4 and find_apu.m4 to detect 1.0 APR and APR-util.
  [Justin Erenkrantz]

* Add <proxyurl> child element to <urllist> to request against a proxy.
  [Justin Erenkrantz]

* Accept HTTP/1.0 responses to HTTP/1.1 requests.  [Justin Erenkrantz]

* Use APR's bundled mkdir script.  [Justin Erenkrantz]

* Support VPATH builds again.  [Justin Erenkrantz]

* Added the "content-type" parameter for URLs using the POST method.
  [Philippe Marzouk <phil@ozigo.org>]

* Remove .deps code that is just broken for now.  [Justin Erenkrantz]

* Added configversion attribute (root element <flood>) which ties config
  file structure with certain flood version and warns user if there is a
  conflict.  [Jacek Prucia]

* Added attribute responsescript (element <url>), which allows flood to
  delegate response processing to external script.  [Jacek Prucia]

* Change open_socket prototype to return errors.  [Justin Erenkrantz]
  
* Fix HEAD responses with Content-Length specified being handled incorrectly.
  [Justin Erenkrantz]

* Flood manual (DocBook based).  [Jacek Prucia]

* Added <baseurl> element. When present, it's contents are copied in front
  of every <url> element, which makes relative urllist's possible.
  [Jacek Prucia]

* Added basic auth support. When user and passowrd attributes of <url>
  element are present and non-empty, flood sends auth data with request.
  [Jacek Prucia]

* Added generic_fullresp_recv_resp() to force full response.
  [Phi-Long Tran <ptran@pobox.com>]

* Fixed compiler warning about signed/unsigned mismatch in generic_recv_resp.
  [Phi-Long Tran <ptran@pobox.com>]

* Include correct header to import defintion of apr_pstrmemdup in
  flood_socket_keepalive.c.  [Phi-Long Tran <ptran@pobox.com>]

* Namespace protect expand_param_e enum values to not conflict with Win32
  headers.  [Phi-Long Tran <ptran@pobox.com>]

* Added error handling for failed config-file open.
  [Phi-Long Tran <ptran@pobox.com>]

* Fix Win32 crash resulting from strtoll() macro
  [Phi-Long Tran <ptran@pobox.com>]

* Catch some badly formed URLs and exit instead of later crashing.
  [Jacek Prucia <jacek.prucia@7bulls.com>]

* Fix tab formatting in some analysis scripts.
  [Reini Urban <rurban@inode.at>]

Changes since milestone-03:

* Revamp keepalive_recv_resp to use the APR table API.  This allows true
  case insensitivity with the response headers.  [Justin Erenkrantz]

* Support autoconf-2.5+.  [Justin Erenkrantz]

* Switch to new apr_poll() API.  [Justin Erenkrantz]

* Stop using the apr_lock.h API and start using apr_thread_mutex.h
  instead.  [Aaron Bannert]

* Remove the USE_RW_LOCK_FOR_SSL conditional compiles since we
  didn't have an autoconf feature test for it nor was it really
  giving us any benefit.  [Aaron Bannert]

* Add ability to detect when the server has closed the connection instead
  of erroring out (think Keep-Alive).  [Justin Erenkrantz]

* Add chunked support.  [Justin Erenkrantz]

* Add detection of CAPATH variable for RedHat installs.
  [Justin Erenkrantz]

* Fix return value in parse_xml_url_info.  [Justin Erenkrantz]

* Fix linking problems due to misordering of libraries on Solaris.
  [Justin Erenkrantz]

* Add config.nice support from apr_common.m4.  [Justin Erenkrantz]

* Add apr_common.m4 and fix up building/configuration of source
  apr/apr-util.  [Justin Erenkrantz]

* Introduce sequence tag to urllist element.  This tag has the following
  form:

  <urllist> 
    <sequence sequencename="myseq" sequencelist="bob, jane, joe">
        <url requesttemplate="http://www.you.com/~${myseq}/" />
        <url requesttemplate="http://www.you.com/~${myseq}/index.html" />
    </sequence>
  </urllist>

    This will hit:
        http://www.you.com/~bob/
        http://www.you.com/~bob/index.html
        http://www.you.com/~jane/
        http://www.you.com/~jane/index.html
        http://www.you.com/~joe/
        http://www.you.com/~joe/index.html

  This allows certain URL patterns to be simplified.  [Justin Erenkrantz]

* Remove shadow declaration of stat in flood_round_robin.c.
  [Justin Erenkrantz]

* Factor out handling of URI XML fields. [Justin Erenkrantz]

* Properly detect and use APR's libtool.  [Justin Erenkrantz]

* Reworked build system to ease integration with APR/apr-util.
  [Justin Erenkrantz]

Changes since milestone-02:

* Updated apr_lock_create to reflect the API change in APR.
  [Aaron Bannert]

* Fix an unterminated string that would produce garbage cookie strings
  when processing multiple cookies.  [Chris Williams <chriwill@cmguc.com>]

* Allow OpenSSL to seed from memory rather than a file if we don't
  have random support.  [Doug MacEachern]

* Allow better detection of randfile and capath options when SSL is 
  enabled.  [Justin Erenkrantz]

* Detect when we have a https URL and don't have SSL support built in.
  [Justin Erenkrantz]

* Fix longstanding bug that was probably leaking massive file descriptors
  when SSL was being used.  [Aaron Bannert]

* Always link the runtime library search path into our binary for
  libararies like APR, APR-UTIL, etc.  [Aaron Bannert]

* Conditionally compile SSL support (set with the --enable-ssl parameter).
  We no longer require SSL to build flood.  [Aaron Bannert]

* SSL is now disabled by default and must be explicitly enabled.
  This is to comply with certain legal restrictions.  [Aaron Bannert]

* Require openssl 0.9.6 or greater. (This may be raised to 0.9.6b if
  rumors of lower versions crashing under load become true.)
  [Aaron Bannert]

* If SSL is enabled we now check that we have the appropriate headers
  and libraries available.  [Aaron Bannert]

* Rework of --with-openssl parameter to work with the new --enable-ssl
  param. There are three ways to use an installed openssl: if it
  exists in the default places, if you specify CFLAGS/LDFLAGS to
  the configure script, or if you specify the path prefix to the
  installation with this new parameter.  [Aaron Bannert]

* Add new parameter (--enable-ssl). [Aaron Bannert]

* Display URL that failed when we get an error.  [Justin Erenkrantz]

* Add support for platforms that do not have threads (or are unusable by APR).
  [Justin Erenkrantz]

* Sleep for four minutes (typical TIME_WAIT period) when we run out of 
  ports rather than exiting with an error.  [Justin Erenkrantz]

* Fix regex code to work with Linux as well.  [Justin Erenkrantz]

* Add ability to have a staggered startup of threads.  By specifying
  startdelay="X" and startcount="Y", flood will start Y threads every
  X seconds until the count value is reached.  [Justin Erenkrantz]

* Rewrite the expression/template code to use variable names (backed by a 
  hash table) and allow use of regular expressions for the response
  template.  
  The new syntax is as follows:
    ${foo}  substitutes foo's value.
    ${=foo} generates a random number and stores it in foo and substitutes it.
    ([^>]*) (regex sub-expression) coupled with responsename="foo" allows 
            that subexpression to be stored in foo based on what is in the
            response from the server.  It will only take the first 
            sub-expression in the regex and store it in the value.
  [Justin Erenkrantz]

Changes since milestone-01:

* Merge SSL socket code in with the normal socket calls.  flood will
  now determine (based on the protocol scheme) whether it should use
  SSL or not.  [Justin Erenkrantz]

* Add ability to retrieve some data from the response and place it in 
  state variables (max of 10).  These "state" variables live for the 
  life of the profile (i.e. all elements in the urllist).  They may be 
  referred in any template via $[0-9].  Add ability to store the 
  entire response (only active if a response template is present).
  [Justin Erenkrantz]

* Added a new report type called "relative_timers". Each
  of our 4 main timers is printed just as with the "easy"
  reporting scheme, only they only show elapsed time since
  the beginning of the request/response test cycle.
  [Aaron Bannert]

* Added another timer (begin) that happens immediately before
  the connect() is made (or would be made). This is necessary
  if we want to calculate the elapsed time for the rest of
  our timers. [Aaron Bannert]

* Add better resolution timers (connect, write, read, close).  
  [Justin Erenkrantz]

* A farmer may now be run for an arbitrary amount of time (specified in
  seconds) rather than a specific number of requests.  [Justin Erenkrantz]

* The seed used for the global pseudo-random number generator
  can now be set with the <seed>n</seed> tag. [Aaron Bannert]

* Added random pre and post delay. You can also specify a precision
  amount. This means that the actual delay will be:
      actual_delay + (precision * e)
    (where e is a number between -1 and 1).
  This can be accomplished in the <url> tag, like so:
  <url predelay="10" predelayprecision="2">http://example.com/</url>
  <url postdelay="10" postdelayprecision="2">http://example.com/</url>
  Both types of delays can be used together, and they are all optional.
  [Aaron Bannert]

* Add pseudo-random data to a POST payload via the $$ character in the
  new payloadtemplate parameter for a URL.  [Justin Erenkrantz]

* Add group shortcuts when defining a profile.  The following syntaxes are
  now valid:
    <report>easy</report>,<report>simple</report>
    <socket>generic</socket>,<socket>ssl</socket>,<socket>keepalive</socket>
    <profiletype>round_robin</profiletype>
  These tags will now setup the functions for this "group."  You do not need
  to know the function names anymore (although the old syntax is still valid).
  [Justin Erenkrantz]

* Profile events are now split into logical "groups". A "group"
  is a bunch of functions that all need to be overriden together
  to add some new functionality. This logical grouping may
  become enforced in code at some later time (it will make
  it easier for users to build configurations). Currently
  the groupings we have are:
  profile events, socket events, reporting events, and
  verification events. [Aaron Bannert]

* Added delay support for urllist. A urllist entry can now be
  given a delay (in seconds) that happens each time that URL
  is used in a request. [Justin Erenkrantz]

* Changed "simple" and "easy" reporting systems to both print
  out the URL for each request. [Aaron Bannert]

* Now using strncasecmp() instead of strncmp() to compare XML
  identifiers. [Aaron Bannert]

* There is now limited support for Cookies in a Round Robin profile.
  [Justin Erenkrantz]

* A Farm can consist of multiple Farmers now, instead of being
  restricted to a single Farmer named "Joe". (This is only correct
  if you have thread support on your system.) [Aaron Bannert]

* Limited support for Farms has been implemented. There can
  be one Farm named "Bingo". [Aaron Bannert]

