Changes since 1.0: * Fix issue with chunked keep-alive responses when the initial chunk content starts with a NULL byte. [Justin Erenkrantz] * Fix HTTP keepalives over SSL. [Justin Erenkrantz] * Support building against installed Ubuntu APR packages. [Justin Erenkrantz] * Update relative times report to use appropriate APR format string. [Justin Erenkrantz] * Protect relative times report output with a mutex to avoid overlap. [Justin Erenkrantz] * Fix compilation error with newer gcc versions. [Ohad Lutzky ] * Implement a random substitution feature; requires a requesttemplate, one or more substitution variables of the form ${varname) in the requesttemplate and a substitution file formatted with one value per newline delimited line (more than one variable per URL permitted). The variables and files are referred to as subst variables and subst files. Each time the URL is sent the subst variable is replaced with one line randomly selected from the subst file. Any part of the requesttemplate can be randomly substituted, protocol, host, port, etc. [Guy Ferraiolo ] * 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 child element to 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 ] * Remove .deps code that is just broken for now. [Justin Erenkrantz] * Added configversion attribute (root element ) which ties config file structure with certain flood version and warns user if there is a conflict. [Jacek Prucia] * Added attribute responsescript (element ), 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 element. When present, it's contents are copied in front of every element, which makes relative urllist's possible. [Jacek Prucia] * Added basic auth support. When user and passowrd attributes of 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 ] * Fixed compiler warning about signed/unsigned mismatch in generic_recv_resp. [Phi-Long Tran ] * Include correct header to import defintion of apr_pstrmemdup in flood_socket_keepalive.c. [Phi-Long Tran ] * Namespace protect expand_param_e enum values to not conflict with Win32 headers. [Phi-Long Tran ] * Added error handling for failed config-file open. [Phi-Long Tran ] * Fix Win32 crash resulting from strtoll() macro [Phi-Long Tran ] * Catch some badly formed URLs and exit instead of later crashing. [Jacek Prucia ] * Fix tab formatting in some analysis scripts. [Reini Urban ] 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: 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 ] * 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 n 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 tag, like so: http://example.com/ http://example.com/ 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: easy,simple generic,ssl,keepalive round_robin 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]