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]

