Serf 0.7.2 [2011-03-12, branch 0.7.x r1451]
  Actually disable Nagle when creating a connection (r1441).
  Return error when app asks for HTTPS over proxy connection (r1433).

Serf 0.7.1 [2011-01-25, branch 0.7.x r1431]
  Fix memory leak when using SSL (r1408, r1416).
  Fix build for blank apr-util directory (r1421).

Serf 0.7.0 [2010-08-25, r1407]
  Fix double free abort when destroying request buckets.
  Fix test server in unit test framework to avoid random test failures.
  Allow older Serf programs which don't use the new authn framework to still
    handle authn without forcing them to switch to the new framework. (r1401)
  Remove the SERF_DECLARE macros, preferring a .DEF file for Windows
  Barrier buckets now pass read_iovec to their wrapped bucket.
  Fix HTTP header parsing to allow for empty header values.


Serf 0.6.1 [2010-05-14, r1370]
  Generally: this release fixes problems with the 0.4.0 packaging.
  Small compilation fix in outgoing.c for Windows builds.


Serf 0.6.0 [2010-05-14, r1363]
  Not released.


Serf 0.5.0
  Not released.


Serf 0.4.0 [2010-05-13, r1353]
  [NOTE: this release misstated itself as 0.5.0; use a later release instead]

  Provide authn framework, supporting Basic, Digest, Kerberos (SSPI, GSS),
    along with proxy authn using Basic or Digest
  Added experimental listener framework, along with test_server.c
  Improvements and fixes to SSL support, including connection setup changes
  Experimental support for unrequested, arriving ("async") responses
  Experimental BWTP support using the async arrival feature
  Headers are combined on read (not write), to ease certian classes of parsing
  Experimental feature on aggregate buckets for a callback-on-empty
  Fix the bucket allocator for when APR is using its pool debugging features
  Proxy support in the serf_get testing utility
  Fix to include the port number in the Host header
  serf_get propagates errors from the response, instead of aborting (Issue 52)
  Added serf_lib_version() for runtime version tests


Serf 0.3.1 [2010-02-14, r1320]
  Fix loss of error on request->setup() callback. (Issue 47)
  Support APR 2.x. (Issue 48)
  Fixed slowdown in aggregate bucket with millions of child buckets.
  Avoid hang in apr_pollset_poll() by unclosed connections after fork().


Serf 0.3.0 [2009-01-26, r1216]
  Support LTFLAGS override as a config-time env. variable (Issue 44)
  Fix CUTest test harness compilation on Solaris (Issue 43)
  Fix small race condition in OpenSSL initialization (Issue 39)
  Handle content streams larger than 4GB on 32-bit OSes (Issue 41)
  Fix test_ssl.c compilation with mingw+msys.
  Fix conn close segfault by explicitly closing conn when pool is destroyed.
  Expose the depth of the SSL certificate so the validator can use that info.
  Fix socket address family issue when opening a connection to a proxy.
  Provide new API to take snapshots of buckets.
  Implement snapshot API for simple and aggregate buckets.
  Build with bundled apr and apr-util VPATH builds.
  Build with bundled OpenSSL builds.


Serf 0.2.0 [2008-06-06, r1188]
  Enable use of external event loop: serf_create_context_ex.
  Enable adding new requests at the beginning of the request queue.
  Handle 'Connection:close' headers.
  Enable limiting the number of outstanding requests.
  Add readline function to simple buckets.
  Concatenate repeated headers using comma as separator, as per RFC 2616,
   section 4.2. (Issue 29)
  Add proxy server support.
  Add progress feedback support. (Issue 11)
  Provide new API to simplify use of proxy and progress feedback support.
  Add callback to validate SSL server certificates. (Issue 31)
  Add new test framework.
  Send current version string in the test programs (Issue 21)
  Bugfixes:
     Fix segfault with epoll when removing a NULL socket.
     Reset OpenSSL thread-safety callbacks when apr_terminate() called.
     Do not remove the socket from the pollset on pool cleanup.
     Do not issue double close on skt w/second one being close(-1) (Issue 33)


Serf 0.1.2 [2007-6-18, r1114]
  Enable thread-safety with OpenSSL (Issue 19)
  Teach serfmake to install headers into include/serf-0.
  Be more tolerant when servers close the connection without telling us.
  Do not open the connection until we have requests to deliver.
  Fix serfmake to produce the library that corresponds to the minor version.
  Fix a memory leak with the socket bucket (Issue 14)
  Fix uninitialized branch in serf_spider (Issue 15)


Serf 0.1.1 [2007-5-12, r1105]
  Add SSL client certificate support
  Implement optimized iovec reads for header buckets
  Fix up 'make clean' and 'make distclean' (Issues 9, 10)
  Add SERF_VERSION_AT_LEAST macro
  Remove abort() calls (Issue 13)


Serf 0.1.0 [2006-12-14, r1087]
  Initial Packaged Release
