varnishd

Only look for sendfile on platforms where we know how to use it, which is FreeBSD for now.

Make it possible to adjust the shared memory log size and bump the size from 8MB to 80MB.

Fix up the handling of request bodies to better match what RFC2616 mandates. This makes PUT, DELETE, OPTIONS and TRACE work in addition to POST.

Change how backends are defined, to a constant structural defintion style. See http://varnish.projects.linpro.no/wiki/VclSyntaxChanges for the details.

Add directors, which wrap backends. Currently, there's a random director and a round-robin director.

Add "grace", which is for how long and object will be served, even after it has expired. To use this, both the object's and the request's `grace` parameter need to be set.

Manual pages have been updated for new VCL syntax and varnishd options.

Man pages and other docs have been updated.

The shared memory log file is now locked in memory, so it should not be paged out to disk.

We now handle Vary correctly, as well as Expect.

ESI include support is implemented.

Make it possible to limit how much memory the malloc uses.

Solaris is now supported.

There is now a `regsuball` function, which works like `regsub` except it replaces all occurences of the regex, not just the first.

Backend and director declarations can have a `.connect_timeout` parameter, which tells us how long to wait for a successful connection.

It is now possible to select the acceptor to use by changing the `acceptor` parameter.

Backends can have probes associated with them, which can be checked with `req.backend.health` in VCL as well as being handled by directors which do load-balancing.

Support larger-than-2GB files also on 32 bit hosts. Please note that this does not mean we can support caches bigger than 2GB, it just means logfiles and similar can be bigger.

In some cases, we would remove the wrong header when we were stripping Content-Transfer-Encoding headers from a request. This has been fixed.

Backends can have a `.max_connections` associated with them.

On Linux, we need to set the dumpable bit on the child if we want core dumps. Make sure it's set.

Doing `purge.hash()` with an empty string would cause us to dump core. Fixed so we don't do that any more.

We ran into a problem with glibc's malloc on Linux where it seemed like it failed to ever give memory back to the OS, causing the system to swap. We have now switched to jemalloc which appears not to have this problem.

`max_restarts` was never checked, so we always ended up running out of workspace. Now, `vcl_error` is called when we reach `max_restarts`.

varnishtest

`varnishtest` is a tool to do correctness tests of varnishd. The test suite is run by using `make check`.

varnishtop

We now set the field widths dynamically based on the size of the terminal and the name of the longest field.

varnishstat

`varnishstat -1` now displays the uptime too.

varnishncsa

`varnishncsa` now does fflush after each write. This makes `tail -f` work correctly, as well as avoiding broken lines in the log file.

It is possible to get `varnishncsa` to output the `X-Forwarded-For` instead of the client IP by passing `-f` to it.

Build system

Various sanity checks have been added to `configure`, it now complains about no ncurses or if SO_RCVTIMEO or SO_SNDTIMEO are non-functional. It also aborts if there's no working acceptor mechanism

The C compiler invocation is decided by the configure script and can now be overridden by passing `VCC_CC` when running configure.