ra_serf status
==============

This library is an RA-layer implementation of a WebDAV client that uses Serf.

Serf's homepage is at:
  http://code.google.com/p/serf/

The latest serf releases can be fetched at:
  http://code.google.com/p/serf/downloads/list

The latest serf sources can be fetched via SVN at:
  http://serf.googlecode.com/svn/trunk/

ra_serf can be enabled with the following configure flags:
 "--with-serf=/path/to/serf/install"
As Neon is currently Subversion's default RA DAV layer, you also need
to add "http-library = serf" to your ~/.subversion/servers file to
choose ra_serf at runtime.  Alternately, you can build with only
support for ra_serf:
 "--without-neon --with-serf=/path/to/serf/install"

For more about how ra_serf/ra_neon talk WebDAV, consult notes/webdav-protocol.

Working copies are interchangeable between ra_serf and ra_neon.  (They both use
the svn:wc:ra_dav:version-url property to store the latest revision of a file.)

Completed tasks
---------------
- Core functionality complete (see regression test status below)
- https support (SSL)
- Basic authentication
- Update parallelization/pipelining (also for status/diff/switch/etc)
  - Does not require inline base64-encoding of content
  - 4 connections are open on an update (matches browser's default behavior)
  - 1 connection is used for the REPORT; 3 are used to fetch files & props
- Supports http-compression config flag
- SSL client and server certificates
- Proxy support
- NTLM/SSPI integration for Windows folks
- REPORT body buckets can now be read twice (#3212)

Regression test status
----------------------
All current regression tests are known to pass on:
  - Debian/AMD64 with APR 1.3.x
  - Mac OS X
  - Solaris
  - Windows

Things to do before the next release (1.6.x timeframe)
------------------------------------------------------

- Digest authentication

- Fix the editor API violation (TBC, #2932)

Nice to haves
-------------

- Move some of the code from ra_serf into serf.  Serf doesn't have a very
  high-level API; but the code in util.c can go a long way towards that.

- Commit parallellization/pipelining
  - Determine how to use HTTP pipelining and multiple connections for commit
  - May need response from CHECKOUT to issue PUT/PROPPATCH
  - ra_svn has a custom commit pipelining that may be worth investigating too

- Use PROPFIND Depth: 1 when we are adding a directory locally to skip
  fetching properties on files

- Discover server's keep-alive setting via OPTIONS requests and notify serf

- Fix bug in mod_dav_svn that omits remove-prop in the update-report when a
  lock is broken and send-all is false.
  (See upd_change_xxx_prop in mod_dav_svn/update.c)

- Fix bug in mod_dav_svn/mod_deflate that causes it to hold onto the entire
  REPORT response until it is completed.  (This is why ra_serf doesn't request
  gzip compression on the REPORT requests.)

- Remove remaining abort()s - ;-) aka add better debug logging

- Support for HTTP/1.0 pnly proxies.
