UFTP Changelog

What's new in UFTP 4.6.1

Mar 25, 2015
  • At the start of the transfer phase with congestion control enabled, the server would sometimes select a client that had dropped out earlier in the session as the initial CLR, slowing down the file transfer. Fixed.
  • In restart mode for a partially sent file, the server sends a DONE right away before sending data to get NAKs from the clients. The clients normally have a short delay before responding to a DONE to ensure that out of order data packets arrive. In this case, since no data has been sent yet, the clients will now respond right away to avoid the unneeded delay.
  • When the clients joins or leaves a multicast group, it checks to see if any other active sessions are using that group before doing so. Fixed a bug that prevented the client from searching the whole list.

New in UFTP 4.6 (Jan 8, 2015)

  • Added the -F option to the client to print status info to a file. Like the server's -s option, passing in @LOG mixes this info with the regular logging output.
  • The client now prints the hostname/IP address where an ANNOUNCE originates from, which may be either the server itself or a proxy. The -q option was added to prevent DNS lookups in the event it causes delays.
  • Several spelling fixes in documentation and code comments.
  • Fixed a memory leak in the fingerprint parsing routine.

New in UFTP 4.5.1 (Sep 15, 2014)

  • On the rare occasion a seek call made by the client errors or returns a file offset that was unexpected, a second call to seek is made to set the destination file offset to the proper place. However, this second seek was jumping to the wrong place in the file. This has been fixed, and a similar fix was made on the server as well.
  • Allow the -s (status file) option on the server to take a special value of @LOG, which allows status info to be mixed with the regular logging output.
  • This behavior is consistent with older versions that did this when sync mode was enabled.

New in UFTP 4.5 (Aug 27, 2014)

  • Added disk caching on the client, greatly improving high speed throughput.
  • The cache size is controlled via the -c option.
  • Changed logging levels on several log statements so that effectively
  • level 0 is "error" and level 1 is "warning". The default log level of 2
  • will continue to contain semi-detailed logging.
  • Increased client timeout for REG_CONF and DONE_CONF to 4*robust*grtt.
  • This helps to prevent client from timing out too early.
  • When the server receives a REGISTER or FILEINFO_ACK from a client and
  • calculates its round trip time, enforce a lower limit of 0.01 seconds.
  • This prevent client from timing out too quickly.
  • Occurrences of SIGPIPE while writing to a log could result in an infinite
  • loop. SIGPIPE is now ignored, relying on normal error handling instead.

New in UFTP 4.4 (Aug 27, 2014)

  • Added max rate option to TFMCC implementation
  • Added -U option to server to specify the server's UID
  • Removed stale UFTP3 congestion control code

New in UFTP 4.3.1 (Jul 4, 2014)

  • Have clients send an ABORT for all active sessions on shutdown
  • Fixed #ifs that enable dual mode sockets
  • Removed -O0 from BSD section of makefile

New in UFTP 4.3 (Jul 4, 2014)

  • Added support for ECN (Explicit Congestion Notification) in the TFMCC implementation in the server and client. Proxy support is forthcoming. See the man pages for known supported systems.
  • Fixed warning in encrypt_openssl.c when compiling under FreeBSD x64.
  • Explicitly enable dual mode IPv4/IPv6 sockets when IPv6 is used on systems that support it.

New in UFTP 4.2 (Jul 4, 2014)

  • Added distinct exit codes for various error conditions
  • In client and proxy, check if private address is already in use before joining
  • Fixed log rolling under Windows

New in UFTP 4.1.5 (Mar 14, 2014)

  • Fixed casting bug in server TFMCC operations when calculating client rate.
  • Fixed server proxy bug where group round trip time was being read from client messages when it should only be read from server messages.

New in UFTP 4.1.4 (Dec 6, 2013)

  • During a restart session, a bug caused the full file to be resent on the first pass, and client wouldn't send back NAKs for the first session. This has been fixed.
  • Fixed incorrect reading of client ID lists in DONE, DONE_CONF, and CONG_CTRL messages.
  • Added group ID and file ID to server logging when timestamps are enabled.
  • Added more warning checks for Linux and corrected warnings.
  • Cleaned up error checking code for malloc and calloc calls.

New in UFTP 4.1.3 (Oct 14, 2013)

  • Since 4.0, compilation failed on MacOSX. This has been fixed.

New in UFTP 4.1.2 (Aug 21, 2013)

  • Fixed client pathname checking that disallows ".." path elements.
  • Server wasn't writing clients to the restart file that didn't send a COMPLETE message for the session.
  • Bug fixed.

New in UFTP 4.1.1 (Aug 10, 2013)

  • Fixed byte ording issue EXT_FREESPACE_INFO extension

New in UFTP 4.1 (Aug 10, 2013)

  • Changed the way the server handles NAKs from the clients. Instead of rewinding its current position as soon as NAKs are received, the server will wait until the end of the pass, then start a new pass. This more closely resembles version 3.x behavior.
  • Added special metafiles @DELETE:{filename}, which deletes filename on the client, and @FREESPACE, which reports the available free disk space on the client's primary destination directory.
  • Upon receiving a FILEINFO, a client will abort if it doesn't have enough free disk space to receive the file.
  • Added -S option to server to write parsable status information to a separate log file. This information was previously available only with the -z option, and -z will no longer print this info without -S.
  • Added -N option which specifies the maximum NAK percentage a client may report before potentially getting dropped. Also added related -m option, which specifies the number of times a client can exceed the maximum NAK percentage before it is dropped.
  • Reinstated the -W option, which specifies the maximum file transfer time as a percentage of the optimal time.
  • Added -i option to client to allow moving files one at a time from the temp directory to the dest directory. This option is necessary to prevent previously received files in dest from being deleted when full directories are received.
  • Added -u option to server to specify outgoing UDP port number.
  • Added log rolling to the server, client, and proxy. The -g option specifies the max log file size in MB before rolling, and the -n option specifies the number of rolled log files to save.
  • The server may now specify clients by their IPv4 name/address as well as their ID, assuming the clients in question use their IPv4 address as their ID, making for cleaner backward compatibility with version 3.x.
  • Fixed several bugs in the TFMCC implementation:
  • Fixed counter wraparound issue.
  • Fixed crash when more than a few hundred clients are active.
  • Fixed bug which caused rate to be set to 0.
  • Fixed crash when sending an empty file.
  • Added signal handlers in server so that it will save restart info if the user interrupts it.
  • Fixed issue with printing of client IDs in server.
  • Dependency fixes in makefile.

New in UFTP 4.0 (Aug 10, 2013)

  • Added support for IPv6. On systems that support dual stack IPv4/IPv6 sockets, clients and proxies may listen on multicast groups for both IP versions.
  • Dynamically determine round trip time to clients and base control message retransmissions and timeouts on that. Old server timing options -A, -S, -a, -s, -r, -d, -W, and -m are no longer used, with -r and -s options repurposed to put constraints on round trip time calculations and control message retransmission counts.
  • The server no longer waits for client responses in the middle of sending a file. Multiple threads are used to send data packets while reading client responses, resulting in shorter overall transmission times. Also, clients won't send back STATUS messages unless they require retranmissions of data packets, reducing to amount of back traffic the server must handle.
  • Replaced simple congestion control scheme with TCP Friendly Multicast Congestion Control (TFMCC) as specified in RFC 4654.
  • Upgraded available security protocols, including support for Elliptic Curve Diffe-Hellman key exchange, Elliptic Curve DSA signatures, AES in GCM and CCM authenticated modes, and SHA-384 and SHA-512 hashing. As a result of this, the key fingerprinting algorithm has changed, so existing RSA keys will have different signatures.
  • Clients and proxies are now always identified by a 32-bit ID instead of their local IPv4 address. This ID will be derived from either the local IPv4 or IPv6 address if not explicitly specified.
  • The format of the server list file on the client and the client/proxy list files on the server have changed as a result of the new method of identifying clients. See the man pages for more details.
  • Modified protocol to support the above new features and to be more extendable in the face of future upgrades. While these changes break backward compatibility with 3.x versions, the added support for header extensions should prevent future instances of this.

New in UFTP 3.7.2 (Jul 12, 2013)

  • When a client aborts and isn't using a temp directory, delete the current file

New in UFTP 3.7.1 (Jul 12, 2013)

  • Fixed bug where clients would occasionally fail to register in open
  • group mode if the client doesn't have a UID assigned. First appeared
  • in version 3.4.3.
  • With a congestion control file in use, the speed wouldn't increase if
  • the max_rate parameter was not specified in the congestion control
  • config file. First appeared in version 3.6. Fixed.
  • Under Windows, a postreceive script with a .bat extension wouldn't
  • execute. Bug fixed.

New in UFTP 3.7 (Jul 12, 2013)

  • Added the much-requested option to the client to run an external command
  • upon receiving a file. See the -s option.
  • Increased the maximum number of recognized network interfaces to 100.
  • Fixed data corruption bug caused by a file write error on the client.

New in UFTP 3.6.1 (Jul 12, 2013)

  • Reverted the change in 3.6 that allowed the client and proxy to bind only to one interface. Doing so breaks multicast on UNIX-like systems.

New in UFTP 3.6 (Jul 12, 2013)

  • Added option (-N) to client and proxy to specify process priority.
  • Default behavior change: prior to this release on UNIX-like systems,
  • the client and proxy had a default nice() value of -20. The new
  • default is 0.
  • Added max_rate parameter to congestion control config file. Previously,
  • with congestion control enabled, the initial rate would be the max rate.
  • This parameter allows a max rate to be set separate from the initial rate.
  • On client and proxy, if only interface is specified to -I (or if -I is not
  • specified and only one non-loopback interface is detected), the
  • client/proxy will bind only to that interface. If more than one is
  • specified or detected, it will bind to all interfaces. Prior to this
  • release, it would always bind to all interfaces.
  • Explicitly disable MTU discovery on systems that support it. Since the
  • server specifies the MTU, it doesn't make sense to allow this.
  • When using a congestion control file, it is reread at each DONE interval.
  • This allows an external process to adjust the parameters on the fly based
  • on network conditions or business rules.
  • Fixed bug where a proxy wouldn't properly handle an ABORT from a client.
  • Fixed bug that would cause all clients to abort on when max file transfer
  • timeout was exceeded.
  • Fixed server bug where -j wouldn't work if specified before -H.

New in UFTP 3.5.1 (Jul 12, 2013)

  • Send COMPLETE(rejected) instead of ABORT for file/path issues.
  • Allow server to send broadcast packets.
  • Improved memory management in server.
  • Proxy wasn't propigating COMPLETE status upsteam. Fixed.
  • Filenames passed to server are no longer checked on startup. They are
  • instead checked as they are handled.
  • Fixed proxy bug in open group mode where a client's address isn't detected.
  • Fixed a few proxy bounds checking issues.

New in UFTP 3.5 (Jul 12, 2013)

  • Added sync mode - Incoming files won't overwrite existing files
  • unless the existing file is older. In this mode the server's output
  • displays whether a file is copied, overwritten, or skipped, and also
  • displays a count of each at the end of the session. See -z on the server.
  • Added sync preview mode - like sync mode, except no files are actually
  • transferred. The server displays the status of each file (copy,
  • overwrite, or skip) had it actually been copied. See -Z on the server.
  • When using -D on the server to specify the destination file name, an
  • absolute pathname may be specified. Clients must be configured to
  • allow incoming absolute pathnames.
  • Allow clients to specify multiple destination directories. The client will
  • allow an incoming file with an absolute pathname if it matches at least
  • one destination directory.
  • Added a simple congestion control method controled by a config file.
  • See the -C option to the server.
  • Added backup directory option to client. If an incoming file would overwrite
  • an existing file, the existing file is backed up. See -A on the client.
  • Added option to client to use an individual temp file for each incoming
  • file as opposed to a temp directory for all files. See -t on the client.
  • Added configurable logging levels to server, client, and proxy. See -x.
  • Added ability to send proxy heartbeat messages from clients. See -H and -h.
  • Fixed bug where clients assigned a UID don't register properly.
  • Fixed crash when reading from config files with blank lines.

New in UFTP 3.4.3 (Jul 12, 2013)

  • Under Windows, allow use of the system key container for private keys.
  • See -y on the server, and -m on the client and proxy for more details.
  • Previously, when a client registered with a server in open group membership
  • mode, it responded using the IP of the first network interface, which is
  • not necessarily the interface the ANNOUNCE was received on. The client
  • now responds with a blank IP, telling the server/proxy to use the source
  • IP of the incoming packet as the client's IP.
  • Enabled NO_ENCRYPTION compile flag on Windows.