Change History for W3C Reference Library

# Change History of libwww

This is a list of changes to the W3C Reference Library in reverse chronological order.

## Library 3.1, November 14 1995

Official release

## Library 3.1pre3 Release Notes, November 13

This is a last test of the 3.1 release. The official 3.1 release will follow in a few days. The purpose of this third pre-release is simply to avoid any obvious problems while we still have time. Very little will change in the final release! The big difference is that Windows NT is fully supported!

### New Features and Interfaces

- Changed "rs6000" to "AIX" and "decstation" to "ultrix" in BUILD script. The previous names were not obvious
- Have created HTProt module which handles protocol module registration. It used to be in HTAccess module, but this module is now uniquely for user requests
- Changed the names of the following functions in the HTProt module

      	HTRegisterProtocol	-> HTProtocol_add
      	HTProtocolDispose	-> HTProtocol_deleteAll
      	HTProtocolBlocking	-> HTProtocol_isBlocking

- Canonicalization now understands host names terminated with a ":", for example "www.w3.org:" is converted into "www.w3.org"
- HTEvnttd.c is removed from the source tree; it's no longer needed. Likewise, HTEvent.c is no longer needed; it has been superseded by HTEvntrg.c and HTEvntrg.html.
- Added support for REENTRANT versions of

      	getlogin_r
      	gethostbyname_r
      	gethostbyaddr_r
      	ctime_r
      	localtime_r
      	gmtime_r
      	asctime_r
      	ctermid_r
      	rand_r
      	readdir_r

  except in HTFTP module as it will be changed later. Some of the function cause problems on Solaris...

### Bug Fixes

- Fixed bug in HTBind_getSuffix that caused garbage file suffixes
- Fixed memory leak in HTAnchor if a child has more than one destination

## Library 3.1 Prerelease 2, November 1 1995

The code word for the 3.1 release is support for remote collaborate work where people can use HTTP and the Web as a remote authoring environment. The reason for the slight delay is that this release has a new "Post Web" model for implementing PUT and POST, the documentation has been reorganized and rewritten, and some other important features have been incorporated. The Post Web model is described in the new documentation, see the reference below.

In addition to the new set of features and functionality this release also is the first example of source code distributed under the W3C conditions. This means that the code is available to consortium members only within a month from the release date.

A lot of the work put into this release has been to update the API of the Library. This is mainly described in the new "User Guide", so please do read this and remember that comments are welcome!

### New Features and Interfaces

- The Post Web model is supported by the following methods to handle the HTRequest object
  - HTRequest_removeDestination()
  - HTRequest_linkDestination()
  - HTRequest_unlinkDestination()
  - HTRequest_removePostWeb()
  - HTRequest_killPostWeb()
- HTFile module is completely rewritten as a state machine much like the HTTP module. It is now possible to have non-blocking, interruptible I/O and to PUT and POTS from a local file as well as from a remote HTTP server.
- HTCopyAnchor is rewritten to use the PostWeb
- The thread model is extended to include a HTThread_kill() function so that threads are terminated immediately upon request
- HTProxy module is introduced. This module substitutes the environment variables for defining gateways and proxies. It can now be done dynamically at run time. For backwards compatibility HTProxy_getEnvVar() can be used to read the most used environment variables.
- Taken socket read/write functionality out of HTFormat and created HTSocket module which handles all the basic network access
- Spawned HTMethod module from HTAccess module
- Better handling of WAIS src files and use of gateway information
- Upgraded the WAIS to handle version 0.5 of the freeWAIS library.
- Better handling of media types from WAIS responses (guessing)
- All HTTP headers can now be transmitted and received and they can all be enabled/disabled using a bitmask.
- New functions to support accept encoding, language, and charset
- Guess stream now handles macbinhex format
- No more circular references in any of the Library include files
- Introduced REMOVE and RMDIR as macros instead of direct system calls
- Removed HTRequest_clear() - it's not safe to reuse a request object
- HTStrip() is now placed in the HTString module
- introducing the method used in the link object in the anchor
- HTTP modified to support PostWeb

### Bug Fixes

- Cache is now avoided if in secure mode (no access to local file system)
- Bug fix to allow simultaneous read and write on the same socket
- Stream stack now dumps to local file if no conversion can be made
- Bug fix that caused core dumps for HTTP 0.9 servers
- Bug fixed in stream stack if system() call is not present. This release has a new model called "Post Web" for handling put and post from a source to a multiple number of destinations. Furthermore

## Library 3.1 Prerelease 1, May 20 1995

A lot of the work put into this release has been to update the API of the Library. This is mainly described in the new User Guide, so please do read this and remember that comments are welcome!

### New Features and Interfaces

- Windows NT Support (and possibly Windows 3.1 with Win32S) thanks to Charlie Brooks, <cbrooks@osf.org>
- A lot easier handling of headers in the HTTP module including support for extra headers
- Improved HTTP/MIME parser which recognizes 99% of the HTTP headers The rest will be ready in the next release! This includes support for "charset" and "level" parameter
- Support for PUT and POST. This is not yet fully implemented but it is possible to experiment with it
- Big enhancement of the anchor module with support for all HTTP/1.0 headers, garbage collection etc.
- The Cache manager is made more object oriented with a broader set of methods. The garbage collector is not the best
- HTBind module created for better bindings to file system with new hash function for improved speed and more functionality than before
- Created HTDateTimeStr() and HTMessageID() in HTString
- Separated HTStructured into its own stream definition module (HTStruct.h)
- Introduced STREAM_TRACE and BIND_TRACE as new debug flag
- Original reason messages are now passed back as a parameter by the error handler when talking to a remote HTTP server
- Introduction of error_format in the request object. This can be used to get debug information out of the Library
- Better handling of media types in FTP and Gopher including recognition of UU encoded files

### Bug Fixes

- Eventloop responds now faster on events as it more often does a select
- HTTP version strings are now string and not floats
- Many platform dependent macros introduced and a lot of cleanup

CERN terminated its direct engagement in the World-Wide Web with the release of Library version 3.0. The code is now developed and maintained at W3C.

## Library 3.0, Mar 21 1995

Many of the modifications and new features are mentioned under the pre-releases.

- Changed all float to double in order get it consistent with the working floating type in C
- Fixed problems with memory in HTML.c
- Introduced definition of `errno` constants for WIN32, as WinSock doesn't define them using BSD notation

## Library 3.0 Prerelease 3, Mar 10 1995

### New or Changed Features

- All library include files which contains public information for applications are now contained in the single include file WWWLib.h which is the only one necessary PLEASE DON'T USE ANYTHING ELSE!!!
- Changed TRACE messages so that the target is the macro TDEST and not stderr. This means that on platforms that don't support stderr, TRACE messages can be redirected to a local file.
- Due to the PC Port some modules (definition and declaration files) have changed names so that the max length is 8 characters:
  - s?HTFWriter?HTFWrite?g
  - s?HTHistory?HTHist.h?g
  - s?HTEPtoClient?HTEPtoCl?g
  - s?HTDescript?HTDescpt?g
  - s?HTExtParse?HTXParse?g
  - s?HTErrorMsg?HTErrMsg?g
- Move EnableFrom to HTAccess module. This variable determines whether the HTTP header From: should be generated. The default value is off
- Sockets are no longer assumed to be small, non-negative integers, but uses macros. This should ensure portability to Windows NT.
- Introduced socerrno and errno so that WinSock can use its own definition whereas `local' errno can still use the well-known version.
- Introduced `error_stream` as field a HTRequest object. All information contained in HTTP responses which don't naturally contain a body entity, for example redirection codes (3xx) and client error codes (4xx) will be put down this stream so that it can be put into a debug window.
- HTNewsHost is now a local variable in the HTNews module. Use HTGetNewsHost and HTSetNewsHost to set and get the current value. The news module will be rewritten in the near future as it has many problems.
- The HTTP module understands all HTTP/1.0 return codes and is more solid
- Many portability problems has been solved and optimized. Most system dependent things are now put into tcp module
- Interface to CSO name server made nicer - generates correct HTML

### Bug Fixes

- file:// no more tries ftp:// if host=localhost
- Improved proxy support and fixed bug when reloading a document from a proxy
- Bug fixed in HTGetHostName() which didn't include a dot <.>
- Bug fixed if UserID/passwd was not correct and don't want to retry
- HTErrorAdd and HTErrorSysAdd no always return HT_ERROR
- Fixed bug in HTGetDomainName when no domain name is present at all
- Add output_flush to request object
- Uses IOCTL as a macro now - not fcntl
- and a lot of other stuff...

## Library 3.0 Prerelease 2, Dec 2 1994

- Introduced memory cleanups from Eric Sink into `HTLibTerminate()`
- Now the client can provocate a call to `HTEventRequestTerminate()` even when the request never enters the eventloop. This is necesary so that the client can cancel busy icons, spinning globes etc.
- Introduced `EVENT_TERM` as return code for the HTEventHandler function
- `HTEventHandler() now` has a double pointer so that the request pointer can be modified from the client
- Fixed bug in `HTSearch()` and `HTLoadRelative()` where wrong return code was returned (BOOL instead of int)
- Introduced BlockingIO field in the request object to override the the mode registered in the protocol object. This can be used as an easy way to make blocking I/O

## Library 3.0 Prerelease 1, Nov 26 1994

### New and Changed Features

- Introduced the function HTLibInit() and HTLibTerminate() which MUST be called when the application starts up and terminates.
- Introduced the modules HTThread and HTEvent. HTEvent is the client interface when using multithreaded functionality and HTThread is the internal socket management
- All __STDC__ defines now concentrated to HTUtils.html where it is called _STANDARD_CODE_ so that _cplusplus also handles this
- `new' and `template' not used a names anymore (confuses C++)
- Removed from field in HTRequest object. This is now handled by the functions HTGetMailAddres and HTSetMailAddress and the flag HTEnableFrom in the HTTP module.
- Changed HTSetMailAddress so that a call with parameter equals NULL or "" clears the contents of the mail-address.
- The number of parameters to Streamstack function is now compatible with the arguments to a stream converter, so that we don't loose any information while putting up the stream stack.
- HTOutputSource variable is removed. You should use WWW_SOURCE in the request object
- HTGuess stream is a a converter compatible stream so that it actually can be setup as a converter
- The stream methods `abort' and `_free' now returns int instead of void. On success from these methods `_free' returns 0 and `abort' return EOF
- Taken HTEscape and HTUnescape and put them into the HTEscape module. The functionality is the same but now they can be used in utility programs without linking in the whole Library

### Bug Fixes

- Removed bug in WAIS module which caused a lot of core dumps
- Removed bug in format classification from URL suffix in HTGoper when the file was plaintext
- localhost is now recognized again after canonicalization in `HTLoadFile()`
- WAIS SEARCH now produces proper HTML
- Max number of lines in WAIS decreased to 200 as 250 (previous) dumps core
- Bug fixed in `HTGetHostName()` if we must use the getdomainname() function.
- Added some support for SCO
- Handling of gopher items of type ERROR (3) changed so no more core dumps in server

## 2.17 Release on November 25 1994

### New and Changed Features

- The host-cache is now extended so that it tries all IP-addresses before it fails the request. It always starts with the fastest IP-address.Different penalty is added to the connect times dependent of the errno returned from `connect()`.
- In addition to HTSimplify which canonicalizes the URL path, a new function now canonicalizes the host-part of the URL. This means that URLs like

      	http://info/ = http://www.w3.org:80/ = http://INFO.CeRn.CH/ =
      	http://www.w3.org. = http://www.w3.org/

  now all are treated identical. This is useful for all the caches based on URLs such like the Server document cache and the hostname cache
- TRACE is now differentiated into a bit flag so that TRACE messages can be turned on and off for individual groups of messages. This was necessary as the amount of verbose output was growing too much
- Redirection understands now `URI:' and `Location:'. Implemented after discussion on www-talk
- Changed 404 Error Message to `Access Forbidden'. The URL is no more included in the message as it is sensitive information
- FTP client now sends full email address of the user as the password for anonymous access instead of USER@. This allows access to some servers which don't accept the old format
- The data connection in a FTP session is now based on the return value sent by the PASV return code rather than the URL. It is not always the case that the data connection is on the same host as the control connection
- UserID and Passwd in FTP URLs can now contain special characters, like '@' etc.
- The Gopher listings are now slightly lighter and don't contain the `name' and `files' any more
- Support of Gopher info items. They are treated as normal messages. The gopher code for this is `i'
- WAIS module now guesses the stream format when TEXT is returned from the WAIS library as it might be HTML.
- The Protocol modules: FTP, WAIS, and Gopher now produce proper HTML with
  etc. in the beginning
- Added a function that returns the domain name taken from the same location as HTGetHostName(). The functionality of obtaining current host names, mail addresses etc. have improved, see HTTCP.html for more
- Introduced the flag HTInteractive in HTAccess.html to tell whether functions in HTAlert can prompt the User from within the Library or not. Default is YES.
- The common BUILD for the Line Mode Browser, the CERN Server and the W3C Reference Library now accepts a command line option:

      	BUILD linemode | daemon | library

  to build a specific component. The default action is to build all three parts. BUILD is now also provided in a Bourne Shell version

### Bug Fixes

- Fixed memory leak in HTWAIS Doc retrieval. However, the functionality or performance has not changes
- If no host is found in the URL then no attempt is made to connect to host 0.0.0.0 that is localhost. Some hosts do have an alias for this address
- Fixed free memory read in redirections. Put redirection counter into request object. Now no more than (default) 10 redirections are allowed
- Fixed bug in FTP module to handle really slow hosts in the select call. The select timed out without the right action taken.
- FTP module chopped off the first line of a Windows NT ftp server as it doesn't send a traditional first UNIX line. Fixed! Well, it did look like UNIX, but no more than that :-(
- Problem in HTTeXGen. Some markups was spread over a new line, and LaTeX doesn't like that.
- Remove the `ACCESS_AUTH` define as it is never used anymore (no more compilation without access authentication)
- Fixed bug in the ISO Latin 1 translation table in HTML.c. This was a problem for estonian documents or other with many special characters
- Fixed bug in HTSimplify not skipping host names. HTSimplify is made faster and is now only called once (both from the server and the client). Before it was called 2-3 times.
- Bug found in FTP URLs containing UserID and Passwd fixed
- Bug fixed in name generation in client cache
- Removed bug in FTP and IP-rotation on multi-homed hosts. When FTP server is in PASV mode it sends back a port number on a specific host. In this case we can't use IP-address rotation.
- Bug with FTP IP-address network order fixed for PASV mode
- Gopher errors (code 3) are now just put as a string as they are not real error
- Bug fixed in HTWriter.c function `flush()` where a partial success in NETWRITE would produce a wrong output (repeated buffer)

## 2.16 Prerelease 2, November 1994

### WAIS Client

The WAIS client has been improved and some bugs have been fixed:

- Bug in the parser of the search result from the WAIS module fixed
- Maximum number of lines presented from a search made a configuration variable. Default value is 100 (was 40)
- Introduced WAIS's own error messages as they are returned from the WAIS library
- The presentation of WAIS on the screen made nicer (well - I think it is!)

### HTTCP Module

- Bug in the host cache fixed

### Access Authorisation

- Premature free of memory fixed
- Missing initialization fixed

## 2.16 Prerelease 1, April 1994

### New Features and Changed Interfaces

#### HTTP Client

HTTP module contains the code for the HTTP client. The module is now reorganized and made more modular.

Automatic Redirection
  Now supported by the HTTP Module. The name of the new URL is parsed to the client via the error_stack as a ERR_INFO message, see HTError module. The maximum number of redirections is set by the variable HTMaxRedirections.
Referer Field in HTTP request
  Clients are provided the possibility of sending a Referer Field in a HTTP Request. This is done by filling out the HTRequest->parentAnchor field.
From field in HTTP Request
  Clients can now send the full email address of the current user in the HTTP From field. The feature is turned off by default as it might get a bit tricky through a Proxy.
204 Response
  Support of return code `204 No Response'

#### FTP Client

HTFTP module contains the code for the FTP client. The FTP client has changed a lot in this release. It is now a complete state machine where the actual action executed is a function of the current state.

- The client now follows the suggestions given in rfc 1123: "Requirements for Internet Hosts -- Application and Support".
- Establishment of the data connection now comply to rfc 1579: "Firewall- friendly FTP" such that the procedure is
  1. try PASV
  2. if that fails, try PORT
- The URL is now parsed according to the (latest) specifications:

      	url	: f t p: / / login / path [  ftptype ]
      	login	: [ user [ : password ] @ ] hostport
      	hostport: host [ : port ]
      	ftptype	: A formcode | E formcode | I | L digits
      	formcode:  N | T | C

- Both directory listings and file retrieval use the same procedure:
  1. First try to go to the location directly, as we are often talking to a UNIX server or one that 'understands' UNIX syntax
  2. If it fails, then go to the location step by step using CWD. In that way we should not have any problems on any platform, and thus it is not necessary to make special hacks for VMS, etc.
- Long directory listings are supported for unix-like systems and VMS. This includes NetWare and WindowsNT. See Future plans for more and Directory Listings
- Information from the FTP-server is pr default presented to the client using the following rule:
  1. If you are connecting to the root directory at a ftp site, we show the 'login' message (might be a concatenation of several messages) just like in a normal ftp session.
  2. If you have a more specific URL, then you probably already know the site and are less interested in the login message. Instead we show any local message when making a CWD to the right location.

#### Gopher Client

The Gopher has been revised and improved error handling has been implemented.

Information Messages
  Some Gopher servers send back information messages in a line containing "error.host". This information is treated like login information from FTP servers so that it is represented as a message before or after the actual listing.
Iconized Listings
  Listings now contain icons in the same way as the other listings.
CSO Name Server
  The CSO Name Server client outputs in HTML and not only <PRE> as before.
Content Type Recognition
  The Gopher module uses it's own content-type recognition inherited from HTTP when handling gopher text and gopher binary files. This means, that e.g. PostScript files get handled correctly.

#### Local File Access

The new version of HTFile module is a lot smaller as all Directory listing stuff has moved to HTDirBrw module. New error handling has been implemented.

#### Passive and Active Connection Establishment

Calls to connect() and accept() now go through the functions HTDoConnect() and HTDoAccept() respectively.

#### Cache of Host Names and Addresses

HTInetParse() that is called from within HTDoConnect now has an internal cache of the names and (possible multiple) IP-addresses of visited hosts. This minimizes the access to the file /etc/hosts and the Domain Name Server, even though aliases are not recognized in the cache.

The default cache size is 500 entries and a host stays as long as a connect() succeeds. That is, if connection is refused for some reason, the host is taken out of the cache.

The time to make a connection to a multihomed host is measured every time and a mean access time is calculated so that HTDoConnect always takes the fastest IP-address, see Future plans.

#### Improved Functionality of DNS requests

The Library now provides functionality for obtaining the full mail address of the user, full domain name of the host and also the possibility for setting both values. This means that the user can use his official email address, e.g. in the HTTP request.

#### Long Directory Listings

Long directory listings for HTTP, FTP and files on the local file system supported. For the moment only a part of the functionality, e.g, sorting, which columns to show etc. is exploited, see Future Plans.

#### Icon Management

Icons in directory listings are bound to MIME content-types and encoding. They can be found in the HTIcons module. The default set of icons is set up using HTStdIconInit() and new icons can be added dynamicly using HTAddIcon().

#### File Descriptions in Directory Listings

File descriptions are supported for long HTTP directory listings. The default thing is to peek the title of the HTML files.

#### Error and Information Message Management

A new error handling module is introduced in HTError. It uses the error_stack entry in the HTRequest object. It handles nested error messages so that we can give a reason for the error, e.g.

        Error in ...
            This error occurred because ...
                This is caused by ...
                    etc.

It also makes it possible for the Library to pass information back to the client so that the the Library doesn't act like a `black hole'. An example is HTTP redirection with status code `Moved 301'. Now the new URL is parsed back to the client via the error_stack so that the client can update the reference when possible.

The function that generates and outputs the error messages to the user is put into HTErrorMsg Module so that it can be overwritten by a smart client or server.

#### Guessing the Content Type of a Stream

The HTGuess module reads a part a stream and determines the content type with the highest probability from a statistical analysis.

#### Minor Stuff

tmpnam()
  Because of problems on NeXT platforms the tmpnam() function is now replaced by HTFWriter_filename() in HTFWriter.c. The function has two modes: Give back a hash name or the last part of the URL (which normally is more readable).
HTMLPutImg()
  New function to make it easier to put out an HTML <IMG> tag.
HTParseInet()
  Added one more parameter to tell whether it is a multihomed host or not. (This is used in the host cache).
HTInetStatus()
  Should no more be used directly but is called from HTErrorAdd so that the message goes all the way back to the user
HTError
  This typedef is now obsolete and will be removed in future releases
HTLoad()
  Added new parameter to HTLoad: BOOL keep_error_stack. If YES then the error_stack is not cleared. This is used in redirection etc.
HTLoadError()
  Because of the new HTError module, this function in HTML.c is not needed anymore.

### Bug Fixes

This is a list of fixed bugs from earlier versions.

- Memory faults in HTSimplify() in HTParse.c has been fixed
- README files in directory listings now know how to handle '<', '>' and '&' correctly. Though the file still has to be Ascii. See future plans for handling this file.
- tmpnam is no more used in the Library because of problems on NeXT platform. Instead a new function called HTFWriter_filename() in HTFWriter.c is written.
- HTInputSocket_getCharacter now returns a int and not a char so that EOF is no longer a member of the char set.
- HTMLGen_start_element() is only allowed to put extra '\n' in <PRE> mode if it is between parameters in a tag
- Changed type of <IMG> into SGML_EMPTY so that it doesn't expect end tag <\IMG>
- Nested <PRE> is no more a problem in HTMLGen_start_element.
- Removed all #elif as not all compilers on HPUX likes it.
- Changed HTChunk such that chunk->data is '\0' terminated at any time. This actually makes HTChunkTerminate less needed but be aware that HTChunk->size changes.
- Removed non-portable d_namlen field in HTMulti.
- Moved definition of NO_GROUPS to tch.html
- Moved definition of HT_MAX_PATH to tch.html
- Proxy server now closes connection in HTTP.c. This was only problem in non-forking servers (VMS).
- Definition of HT_NO_DATA moved to HTUtils.html where the other return codes are placed.
- Functions from HTAlert Module that prompt the user don't get confused about ctrl-D anymore.

## 27 March 94 2.16beta VMS version

- Distribution for VMS

## 25 March 94 - 2.15

### General Upgrade

- Lou Montulli's Lynx and LIST NEWSGROUP diffs put in to HTNews.c
- Complete HTML+ DTD in parser as per Dave Raggett's internet draft 00. All 78 elements in the spec plus COMMENT, H7, HTML, XMP, LISTING and PLAINTEXT for back-compatibility.
- Backup files created on PUT to local file (in server or client) according to global flag HTTakeBackup, defaults to YES.
- Changed interface to HText -- added HText_new3 creation method. All clients using this interface should ensure that the structured stream used during creation is reopen()ed if it is still needed to hold dcoument structure after the original load has been done. In this case it should later be freed.
- CHANGED INTERFACE to HTAccess: Now an HTRequest environment is passed to almost all calls. Allows better reentrant use of library for image embedding, etc. Implies (minor) changes to all clients.
- Changed HTConverter definition. Should be internal only, uness you register new converters. Now take more useful parameters.
- HTSaveAndCallBack stream allows simple implementation of embedded graphics: just load them with all conversions you can hadle using HTSaveAndCallBack -- you will be called back with a filename when the image is on disk.
- Initialization: Calling of HTInit functions now not done by library -- if you want them, you call them from the application.
- xxx_proxy environment variables for forwarding requests to a proxy (e.g. http_proxy , ftp_proxy , gopher_proxy ).
- no_proxy environment variable to override the proxy; e.g.

              setenv no_proxy "cern.ch, foo.bar:8001, ncsa.uiuc.edu"

- Bug causing FTP binary file transfers failing fixed.
- Fix to Gopher code -- Now tries to do own filetyping with unknown gopher types. Even if this fails doesn't truncate binary files.
- Local directory listing bug with trailing slash fixed.
- Better multiformat handling, HTMulti(), with welcome page support.
- The eight misplaced cern_httpd access authorization modules moved away from the library.
- Parts with inefficient list handling rewritten -- better performance.
- Non-modal changes for password prompting -- I suspect this doesn't work yet. Someone who is implementing a GUI client please contact me <luotonen@dxcern.cern.ch>.
- The PlainToHTML text converter now works.
- A basic HTMLToTeX converter is implemented. It understands fairly well written HTML documents but can not recover serious HTML errors.
- All caching is turned off on the client side in this release until a more stable solution is found.
- tmpnam() not used any more as it caused problems on a NeXT. Instead the function HTFWriter_filename() returns a hash or the last part of the URL as filename.
- HTML titles now get parsed as well. This is in order to convert foreign letters etc. But if somebody puts a list into the title....

### International

- Patches for parsing SGML with 2-byte japanese encoding included, from takada@seraph.ntt.jp .

### Bug Fixes

- Bug fixed in HTFile.c prevented .multi multiformat links from working under Solaris, maybe other SYSV.
- Bug fix in client HTTP: "Accept" line params preceded by ";" now as per spec.
- Bug fixed in HTBTree.c that crashed for some large directories.

## 15 December 2.14vms

- Provisional Distribution for VMS

## 17 November 2.14

- Contains port to VMS.
- Bug fix in HTML generation -- line wrapping code produced garbage. Affected servers working as gateways and also editors writing back HTML.
- Buf fix: static string returned by crypt() was free() 'd.

## 4 Nov 93 Version 2.13

- Bug fix: FTP text transfer don't end when 8 bit characters used. Still end on character -1. Thanks to Bjoern Stabell (bjoerns@staff.cs.uit.no)
- A single function HTPromptUsernameAndPassword() so that GUIs can have a single authentication dialog box.
- Extensive filename suffix recognition defaults.

## 11 Oct 93 Version 2.12

- Authroization in. See Ari's documentation. Everything is back-compatible, but there are large extenions to the rule file syntax, plus new ACL and protection setup files. Authorization is done by password in the clear now, with hooks for public key later.
- Some other bug fixes. Not all the reported ones.

## 8 Sept 93 Version 2.11

- Binary transfer problems tackled in HTTP. Yukky problem of existing illegal 0.9 server producing binary which looks like text is unsolved. No problems with HTTP 1.0 transfer.
- Streams: end_document method removed. "Abort" method added as requested at W5 -- use this when a pipe (stream stack) is broken by an error prevents execution etc of partially written files for example.
- New stream HTNetToText for converting Net ASCII to local C representation.
- Bug fix: Directories represented with anchors all with empty string (as opposed to no) names: many NAME="" in anchors.
- Bug fix: application/octet-stream replaces application/binary as per MIME.
- CSO Nameserver code to HTGopher added as Mosaic originally from ???. (AS)
- Bug fix: HTTPD would return an old-style (non-MIME) response when sending back a file in unrecognised format, evn if client was using HTTP 1.0.

## Version 2.10 Not released due to WWWWW

- Bug fix: crashed with error message when doing a Gopher search.
- WAIS type "HTML" recognised as HTML. Other types treated as application/binary.

## 30 November 1993, version 2.09a

- Bug fix: A space was not allowed befoe the tagcloser (>) of an end tag. Now it is. Also (untested), empty close tags should be allowed a la "<h1>heading</>". Not recommended, but in.
- Bug fix: HTML nesting stack overflow check.
- Bug fix: Compilation under IBM MVS didn't work.

## 23 November 1993, version 2.09

At last this stupid library is aware of content-transfer-encoding. When defining file suffixes you must define not only the content-type (eg application/postscript) but also the encoding (eg binary, or 7bit). The first effect of this is to get the proper mode selected for FTP transfers. This means you can do a

    	www -source ftp:/xx.yy.edu/pub/junk/foo.tar.Z > junk.tar.Z

and it will work as expected.

On the client side, you can define the presentation method for any given MIME-style 'content type". This is done in the rule file too.

## 2.08

- You can define file suffix conventions in the server and/or client rule files. This allows you to set up a server which for example, trateas .ai files as application/postscript, etc, or specifies that .ME is generally text.
- You can define how a new content type will be rendered in the rule file of a client.

## 15 November 93, version 2.07

- If you telnet to the www client (-h option): 1. it is more secure: No local file access. 2. you can use /etc/www-remote.url file to specify the url of the home page for telnet users.
- Library uses fopen() rather than open(), allowing file access on non-unix machines.

## 7 November 93, 2.06

- Check against local hostname in file access is now string insensitive.
- HTML parser: entities were not expanded at outer level.
- HTTP client sends client name and version. Requires HTAppName
- FTP client fix: Continuation lines which do not have - in are now handled properly as per the spec.

## May 1993 version 2.05a

- Bug fix in directory reading of local files -- it didn't work! The stopped the daemon working on directories.
- Bug fix in DIR handling for browers: tabs work again in directory listsings.

## 22 April 1993 version 2.04

- WAIS handling code in library, no need to go through a gateway of you compile with the right options abd link with freeWAIS. First version of this, no bells or whistles.
- tcp.h systems specifics for SCO picked up from mosaic but directory handling not fixed yet ...

## 20 April 1993 version 2.03c:

- Use of identifier "this" removed to prevent conflicts with C++
- _AIX cpp defined picked up for AIX.
- In networking code, no assumption that \n is 10 on even on ASCII machines (for Mac/MPW).
- Server bug fix after Sebastian.Wilhelmi@isst.fhg.de -- exited with bad status even if all OK.

## 19 April 1993 version 2.03b

- Distribution bug fix: s/Specific/All/ on line 2 of WWW/All/Makefile.product
- SGML bug fix: treatment of entities was on when would be off and vice-cversa.
- Sun binaries linked with -Bstatic to make them transportable
- Bug fix: Sometimes, client would ignore first part of returned file.

## 17 Mar 93 Version 2.02-beta

- Bug fix: Falls back to old HTTP with servers which don't like the new HTTP.
- BUILD file for easy installation of library, httpd and www

## 15 Mar 93 Version 2.0 alpha:

Incompatible library release has cleaned up interfaces. Developers read the .h files! Version 2 libraries must be compiled with version 2 products and vice-versa. Version 2 clients will access (most) version 1 servers OK, version 2 servers will respond correctly to (all) version 1 clients.

- Bug fix: Gopher connections wasted socket numbers and eventually used them all up. (Thanks Marc Andreessen)
- Rule file used by clients as well as servers.
- MIME parser takes content-type field from MIME messages and invokes appropriate registerd presentation method for each type.
- Local and remote multiformat files.
- ***HTSearch and HTLoadRelative parameters changed! HTMainAnchor and HTMainText globals are no longer used by the library.
- HTAccess package now registers known protocols in list.
- HT{G,S}etNewsHost available from HTNews module.
- SGML parser speeded up
- New software intrerface introduced: HTStructuredClass. This should make use of the library easier with clients, and allow more code in common between clients and servers.
- Hooks for handling new formats with other applications
- General hooks for status messages, user query, progress monitoring, etc. (HTAlert module)

## 6 January 1993, Version1.1a

- Can revisit telnet nodes.
- Tn3270 access type accepted.
- FTP password for anonymous is now WWWuser@ withouyt a hostname, for software on ftp.uu.net etc.
- Bug fix in HTML.c: Would crash when a list was the first visible element in a text object.

## 11 December 1992, Version 1.1

- Added <PRE> tag as in new HTML spec.
- Added numeric character reference handling for future use.

## December 1992, Version 1.0c

- Fixed bug in FTP handling (FTP file retrieve put control connection in bad state)
- Fixed bug in Gopher handling on non-ASCII platforms. Also, bug fix in Gopher search of index whose name contained characters (like blanks) escapes with %.
- Fixed bug in NEWS handling, failed on non-ASCII platforms.

## November 1992 Version1.0b

- Fix some bugs in Make system.
- Memory bug fixed: On failure to connect to HTTP server, it would free() an uninitialized pointer!
- Some trace messages were output to stdout instead of stderr
- Allow "ftp:" prefix on URL . Effect is currently equivalent to that of the "file:" prefix.
- Local file access not allowed in secure mode. (telnet access was never allowed in this mode). Secure mode is used for telnet server and mail robot.

## November 1992 version 1.0

- Library libwww.a made independently of browsers to save time and space and to force good modularity