/** @page CHANGES


@section v2_03_dev Changes with libapreq2-2.03-dev (released June 12, 2004)

- C API [joes]
  "Objectify" cookie/jar API: s/apreq_(make|serialize)_cookie/apreq_cookie_$1/
  and reordering args so the cookie/jar object is always the first argument.
  Macros added to provide source-compatibility with the old names.

- Perl API [joes]
  Added $upload->slurp($data), which reads the contents of the file
  upload "$upload" into the scalar "$data".

- C API [joes, randyk]
  apreq_run_(hook|parser) are macros, so they are capitalized now.
  Fixed apreq_params_as_string() and added apreq_params_as_array().
  Reworked definitions of APREQ_DECLARE_HOOK, APREQ_DECLARE_PARSER 
  and apreq_(parser|hook)_t, hopefully to be more Win32 friendly.
  Also updated the documentation.

- C API [joes]
  Compensate for a missing CRLF in empty file upload block, which 
  actually complies with RFC 2046 Section 5.1.1.  Konqueror (version unknown)
  and Mozilla 0.9.7 are known to emit such blocks.

- Perl API [joes]
  $req->upload() in list context failed to filter out non-uploads.
  Also $req->upload("nonexistent-key-name") segfaults.

- Perl test suite
  t/TEST.PL must run parent class' pre_configure to get the
  configuration right

- C API [joes]
  apreq_brigade_concat() wasn't supplying the final EOS bucket
  to large brigades (>256K), which somtimes caused the prefetch 
  loop in mod_apreq.c's apreq_filter() to hang.

- Documentation [joes]
  CHANGES file reformatted, removing dates & other clutter 
  as Stas suggests.

- C API [joes]
  Rewrote cgi_read() in apreq_env.c and reworked mod_apreq.c 
  to enforce apreq_env_max_body() settings.

- C API [joes]
  Fixed bug in url_parser code- missing context brigade was
  needed to track key-value pairs which span multiple buckets.

- C API [joes]
  API modifications: removed struct apreq_cfg_t, adding
  new apreq_env hooks max_body, max_brigade_len, and temp_dir.
  Folded apreq_parsers.h into apreq_params.h and modified the arguments 
  to apreq_run_parser() and apreq_run_hook(). Renamed 
  apreq_parser_t's content_type as enctype and apreq_copy_brigade()
  as apreq_brigade_copy().
  These changes make libapreq2.so.2.0.5 incompatible with earlier 
  versions.

- Perl API [stas]
  Include ppport.h from blead-perl to support older perls.
  Add a proper support for ithreads.

- C API [Swen Schillig, joes]
  Fixed bug in calculation of Netscape cookie expiration dates.
  apr_time_t is measured in microseconds, not seconds, which
  threw off the arithmetic; apr_time_from_sec was needed for
  the conversion.

- C API [Max Kellermann]
  Fix segfault caused by invalid %-escape sequence in query string.


@section v2_02_dev Changes with libapreq2-2.02-dev (released Nov 15, 2003)


- Perl API [joes]
  Fix bogus pool/cookie initializers in Apache::Cookie::set_attr(),
  which caused Apache::Cookie::new to segfault.  Bug
  first reported to modperl list by Wolfgang Kubens.


@section v2_01_dev Changes with libapreq2-2.01-dev (released Nov 10, 2003)


- build system [joes]
  Skip Apache::Test tests in env/ when Apache::Test is unavailable.
  This allows the C API to be build and installed without requiring
  Apache::Test (it is still a requirement for compiling the perl glue).

- C API mod_apreq.c [joes]
  Parser errors were creeping into the return value of apreq_filter,
  which breaks the "transparent tee" paradigm.  This caused bogus
  "400 Bad Request" responses (first reported by Vladimir Dudo) 
  to occur when libapreq2 was used by an output filter during a GET 
  request (handled by apache2's default handler).  The test suite 
  has been updated accordingly.

- C API [joes]
  Incorporate libapreq_cgi into libapreq2 as the default environment,
  and add apreq_env_t and initializer apreq_env_module() to manage the
  environment at runtime (determining the environment at load-time
  was problematic on non-ELF systems).


@section v2_0_0 Changes with libapreq2-2.00-dev (Oct 25, 2003)


- C API: libapreq_cgi.c [randyk, joes]
  CGI environment defined by env/libapreq_cgi.c is functional
  (with tests added to env/t).  This library may soon be incorporated
  directly into libapreq2 as a default enviroment.

- C API: mod_apreq.c [joes]
  Added ctx->saw_eos to ensure we don't read from upstream filters
  after receiving an eos bucket.  Otherwise it was possible for
  two eos buckets to appear when a prefetch read is involved, which
  breaks other modules like mod_proxy.  This bug was uncovered by
  Philippe Chiasson.  mod_apreq's apreq_env_majic_number bumped to
  reflect the added fixes.

- configure: --enable-perl-glue [joes]
  The --enable-perl-glue option integrates the perl glue into the 
  normal Unix build cycle.  It is disabled by default, but is silently 
  reenabled if the user configures the source tree via Makefile.PL.

- C API [joes]
  Added apreq_header_attribute() and fixed mfd parser to allow 
  "charset" attribute to appear in the Content-Type header.  Sven
  Geisler points out that Opera 7.20 does generate such headers. 

- C API [joes]
  Added versioning API following http://apr.apache.org/versioning.html
  apreq_env renamed apreq_env_name, and apreq_env_magic_number added
  to provide versioning for environments (modules).  The header files 
  are now installed to "include/apreq2", and the library is renamed 
  "libapreq2". Also added an apreq2-config script based on apu-config.

- configure: static mod_apreq.c [Bojan Smojver, joes]
  Add --with-apache2-src configure option, along with --with-apr-config
  and --with-apu-config, and provide support for compiling mod_apreq 
  into httpd as a static apache module.

- C API: mod_apreq.c [joes]
  Support for internal redirects added to the mod_apreq filter.
  This ensures any POST data prefetched in the main request 
  gets passed along to the subrequest handler(s).

- C bugfix: apreq_decode [Graham Clark]
  If the source and destination strings are represented by the same
  pointer - e.g. if called as apreq_unescape(s) - string s is modified
  incorrectly in general.  Patch includes new unit test.

- Perl API [joes]
  Added $req->parse, $req->status, & "preparse" logic 
  to $req->param & $req->upload.

- C API [joes]
  Added "preparse" logic to apreq_params & apreq_uploads
  to bring behavior in line with libapreq-1.x.

- C API [joes]
  Dropped param->charset.
  Make apreq_brigade_concat public, so mod_apreq can use it
  for its ctx->spool brigade.

- Documentation [joes]
  Updated Cookie_pod to reflect API changes over v1.X.

- Documentation [joes]
  Added doxygen links to Apache::Request and Apache::Cookie 
  perl docs.

- C API [joes]
  Added apreq_copy_brigade(bb) to apreq.h.

- C API [joes]
  The new filter-based design required a complete 
  departure from libapreq-1.X codebase. libapreq-2
  is based solely on APR, and to be fully functional, 
  requires a supporting environment similar to Apache-2.
  A person wishing to port libapreq-2 to a new environment
  needs to provide definitions for the declarations in apreq_env.h.

- Perl API [joes]
  Aggregates are always collected into an APR::Table-based package.
  New table packages: Apache::Cookie::Table, Apache::Request::Table,
  and Apache::Upload::Table.

- Perl API [joes]
  Apache::Cookie->fetch now requires an "environment" argument ($r).
  Its return value is blessed into the Apache::Cookie::Jar class.

- Perl API [joes]
  Two new request lookup functions:
  -# $req->args - param lookup using only the query string
  -# $req->body - param lookup using only the POST data


**/