Changes since milestone-03:

* 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]

