Version 1.0 -- Dec 91.  Original source created.

Version 2.0 -- Dec 91.  Added man pages.  Server bug fix.  In 1.0, files
	       in a directory that is protected from deletion can still
	       be written over. In 2.0, it is prohibited as well. 

Version 2.1 --	Jan 1, 92.

		1) The maximum length of a name in pre-2.1 server is
		   both limited by the 1k-byte udp packet size and, in
		   some cases more severely, by the OS it is running in.
		   On some systems, the OS imposes a limite of 14 chars.
		   For those systems, the server can now be made to hash
		   long names into short ones.  The effect is transparent
		   to the clients except when two long names gets hashed
		   into the same value.  In that case, they will refer
		   to the same file during downloading, and they will
		   displace each others during uploading.

		2) Since directories, unlike files, have undisputable
		   ownership, removal of a directory owned by a client
		   should depends only on the ownership of the directory
		   itself, and not on that of its parent directory.  In
		   pre-2.1 server, the client must have delete permission
		   to the parent directory before it is allowed to delete
		   the subdirectory.  In 2.1, the permission is not needed.

Version 2.2 --	Feb 15, 92.

		1) The fput and fgetcmd utilities will now accept a list of
		   files from its standward input.  See their man pages for
		   this expanded usage.  This is useful if you don't want
		   file names to show on 'ps' output.

		2) The retransmit timer for client code has been changed
		   to use an adaptive algorithm.  In pre-2.2 versions of
		   FSP, clients will retransmit if it has not received a
		   response from the server after a delay of 3 seconds.
		   In version-2.2, two separate delays are used.  The
		   "busy" delay is used when waiting for a reply for the
		   first try and the second try.  Any time a second try
		   is necessary, the delay is increased by 50%.  Every
		   first try brings the delay 12.5% closer to the initial
		   delay setting (3 seconds by default, settable by the
		   FSP_DELAY variable).  For the third try and beyond,
		   the "idle" delay is used.  For each try, the delay is
		   doubled.

		3) Makes available FSP request code space 0x80 - 0xff for
		   future user extensions.  Each such extension will begin
		   with a code byte in that range, and followed by a control
		   block, which is likely to be different from the existing
		   one.  The basic operations of FSP will not require the
		   use of such extensions.

		Note:  2.2 does not involve changes to the server itself.
		       The server is been checked out and added to by a
		       few people on the net.  I will wait until the
		       modifications stabilize before I consolidate them.

Version 2.3 -- Mar 9, 92

		1) The bsd_src/glob.c file has a bug in blkfree function
		   in that it tries to free something that is actually
		   on the stack of the glob function. The last call to
		   free has been commented out to fix the bug. 

		2) The fspd has a bug whoes only visible manifestation
		   is the that protection can't be changed.  The fix has
		   required a moderate amount of code change in fspd.

		3) .FSP_NO_DEL and .FSP_NO_ADD mechanism has been replaced
		   by .FSP_OK_DEL and .FSP_OK_ADD mechanism.  Thus by
		   default, a directory is no delete and no add.

		4) fprocmd is modified to relax option checking, allowing
		   arbitrary option characters be passed to the fsp server.

		5) A fls bug is fixed so that a "fls /" in a directory other
		   than the root directory will not cause an error.

		6) A -DDIRENT switch is added in Makefile to help support
		   those machines that does not have /usr/include/dirent.h.

Version 2.3a -- March 20, 1992

		1) In a few places, non-critical errors of the form:
		       if(errno = EINTR) ....
		   was made.  It obviously should have been == instead.
		   The problem is fixed.

		2) In the previous versions there is a potential problem
		   such that if the first reply packet is dropped or is
		   messed up, making a retransmit necessary, fspd will
		   make the client utility wait for a 1 minute timeout.
		   A potential loop hole for this happening has been
		   closed by modifying server_lib.c where the packet key
		   is checked. 

Version 2.4 -- March 27, 1992

		1) fgrab/fgrabcmd client utility is added.  It is like
		   fget except it also deletes the named files in such a
		   way that if there are multiple fgrabs for the same
		   file, only one will succeed. One bug/mis-feature of
		   fgrab is that when fgrab is terminated abnormally, the
		   file is not restored. This command is useful for things
		   like sharing bone files for modified versions of nethack. 

		2) FSP now allows multiple client programs to run at the
		   same time if one of the three multiplexing mechanisms
		   are chosen during compile time.  It is likely that at
		   least one of them will work for your system.  The
		   multiplexing is done at the client side, and does not
		   allow the client machine to issue request messages at
		   a higher rate compared to the previous versions.  The
		   FSP_LOCALPORT variable is no longer needed.  However,
		   if used, it will force serialization of client programs,
		   which might be desireable if none of the multiplexing
		   mechanisms are suitable for your machine.  In order to
		   accommodate this change, the server code has been
		   changed to store temporary upload files with a different
		   name from the previous version.  The names now have to
		   identify sender's port as well as sender's internet id.
		   Change is necessary to keep it under 14-character limit
		   of some OS.

		3) Progress report mechanism enabled by FSP_TRACE variable
		   now try to update the kbyte display more promptly.

		4) fcat/fcatcmd will now turn off FSP_TRACE during its
		   file transfer if its stdout is a tty.

Version 2.5 -- April 8, 1992

		1) A bug introduced during the last release --- fspd will
		   not timeout and exit when running under inetd mode.
		   This bug is now fixed.  It was introduced because it
		   is more convienent at one time for it not to exit when
		   it is still being debugged.  The patch to stop it from
		   exiting was not removed before release time. 

		2) A very rarely seen bug in some OS is circumvented. UDP
		   packet's headers contain a checksum field.  If the
		   checksum option is disabled, the OS will set the
		   checksum field to 0 before sending, and will not check
		   the checksum field when message is received. If the
		   option is enabled, the OS will stuff the checksum into
		   the checksum field.  When a packet is received, the
		   checksum field is checked.  If the checksum field is 0,
		   then the OS assume that the sender does not have option
		   enabled, and therefore the checking is skipped.

		   Problem arises when a packet's computed checksum is
		   zero.  Some OS will stuff 0xffff into the checksum
		   field before sending such a message to distinguish it
		   from the case for which checksum is disabled.  Other
		   OS couldn't recognize 0xffff as an indication that the
		   actual checksum could be either 0 or 0xffff, and
		   subsequently reject the message. The client can thus
		   get stuck forever in retransmitting a request that
		   happens to have 0 for the computed checksum, but
		   0xffff for the checksum field.

		   To get around the problem, the sequence number field
		   of the request message (which has meaning only to the
		   client software), is partitioned such that 2 of the
		   bits reflect the retry sequence, and the remaining 14
		   bits reflect the request sequence.  This will ensure
		   that if one request got ignored because it happens to
		   have a checksum of 0, the next retry will result in
		   a packet that does not have a checksum of 0.  The only
		   file affected here is client_lib.c.

		3) In response to those who have severely limited UDP
		   packet sizes, the environment variable FSP_BUF_SIZE
		   is supplied to set the data size of file and directory
		   information transfers. The default is 1024.  You cannot
		   set it to be bigger than 1024, but you can set it to
		   be smaller if you find that your system cannot pass
		   UDP packets that includes 1024 bytes of data.  This
		   requires changes both in the server and the client
		   code.  The first parameter field of get-file and
		   get-directory requests contains the path of the file
		   or directory.  The second parameter field was unused,
		   but it is now used to hold the number of bytes to read.
		   This change is backward compatible in the sense that
		   if the second field is empty (old client code), the
		   new server code will default to 1024.  Changes to the
		   client code is confined to client_util.c.
