# Library 5.1 Release Notes

If you are reading the text version of this document then you can find a HTML version in

    	Library/User/ReleaseNotes.html

The main features in this release are:

- Full HTTP/1.1 sample implementation
- Advanced use of HTTP/1.1 Pipelining and persistent connections
- Persistent cache manager

The focus for version 5.1 was to implement a high-performance HTTP/1.1 client used as a testbed for the "Network Performance Effects of HTTP/1.1, CSS1, and PNG" paper. Note that this code is sample code so please take it as that and nothing more!

Check out the latest list of public functions

## Release 5.1k (To be released)

This is the set of things that have been done for the next release.

### New Features

- Improved support in the configure script for determining whether the WAIS libraries are available for direct WAIS access.
- Added a simple "single user lock" on the persistent cache as it gets confused if multiple users are using it.

### Bug Fixes

- Fixed a problem where libwww may loop if several requests are coming on a connection that is not yet established.
- Fixed the mapping rules for internal icons used when presenting local file directory listings. The icons are installed as part of the libwww distibution package
- These are the patches that I have recieved for the current release. They have all (with minor modifications) been applied to this upcoming release.

## Release 5.1j March 9 1998

### New Features

- Made the distinction between Transfer-Encoding and Content-Transfer-Encoding clear - they were somewhat mixed up before. Libwww also now supports multiple transfer-codings as well as multiple content-codings as required by HTTP/1.1.
- Changed the Stream Stack to not call the `SaveLocally` stream any more but instead return an ErrorStream. The reason for this is that there are several places in the stram stack building algorithm where we might want to save the file to local file: when there is a content type that we don't understand, a content-encoding, or a transfer-encoding (or a combiunation of these) that we don't understand. Now we can make sure that the `SaveLocally` stream is only called once
- Added support for "identity" transfer-coding and content-coding
- Added support for Allow header when doing PUT and POST

### Bug Fixes

- Fixed a problem handling wrong HTTP responses from NCSA HTTPD dereived servers (they don't include a version number when responding to an HTTP/1.1 request)
- PUT now works much more reliable, and it also works on Windows (at least NT, I haven't tested it on 95).
- Fixed a refresh problem in the Line Mode Browser which caused it to sometimes render the screen twice.

## Release 5.1f January 1998

### New Features

- Changed the referer HTTP header field to use relative URIs instead of absolute. This saves a lot of bytes on the wire
- Added support for logging the charset media type parameter
- Added support for logging when the ALT tag is missing from inlined images
- Extended the log class to support arbitrary log files

### Bug Fixes

- Fixed some problems in the HTRelative function in HTParse.

## Release 5.1e January 1998

### New Features

- Added support for linking against a POSIX Regular Expression (regex) library. This is used in the Robot, for example, to support regular expressions on URIs to include and exclude from a traversal. The code has been tested with the GNU regex library.
- Added more logging features to the webbot

### Bug Fixes

- Fixed bug in ouputstream that caused buffer to be overwritten in some cases when blocked on write

## Release 5.1d December 1997

### Bug Fixes

- Lots of bug fixes in the pipelining code and increased performance

### New Features

- Better logging facilities with support for multiple log objects including referer logging, Common Log File format logging and general logging filters.

## Release 5.1c September 1997

- Lots of bug fixes

## Release 5.1b April 1997

### Bug Fixes

- Fixed a problem in HTRules.c as described in this bug report
- Fixed coredump problem in HTGetTmpFileName() as described in this bug report. This affects also the HTCache module which relies on temporary file names
- Made the persistent cache more robust which in some cases will save a segmentation fault
- Fixed problem in sysdep.h as reported in this bug report
- Fixed problem where a request was not flushed if using blocking sockets as reported by this bug report.
- A limitation in the current persistent cache is that it only works in non-preemptive mode. Hence if using blocking sockets then the cache should be disabled. This is now the default behavior in the libwww profiles.
- Bug fixed that caused the `maxsock` variable used in `select()` not to be decreased when deleting a socket in the default event manager
- Changed the connection management so that it complies with the Connection Management draft by Jim Gettys and Alan Freier. The HTTP client now closes idle connections after 60 seconds which is a heuristic period chosen by Jeff Mogul in the paper "The Case for Persistent-Connection HTTP". The number can be dynamically changed using the `HTHost_setPersistTimeout()` and the `HTHost_persistTimeout()` methods. This could be made more advanced so that we take into account any information given in the "`Keep-Alive`" header but isn't for now.
- Fixed a problem when a HTTP/1.1 server sent a response including a `Connection: close` header using the close of the TCP connection as a delimiter. This problem was pointed out in this bug report
- Fixed security hole handling HTTP 305 proxy redirection codes. The proxy location returned in the responses was enabled as a permanent proxy without any notification. The operation now requires explicit acknowledgement from the user
- Fixed potential (but small) security whole handling parsing a new rules file. This operation now requires explicit acknowledgement from the user.

## Release 5.1 February 18 1997

### New Features and APIs

- Added support pipelining
- Support for zlib based decompression in content encoding

### Bug Fixes

- A whole bunch of them...