Build 3127: Wildcards in SFTP, better oversized packet support

Wildcards in SFTP

Even though the SFTP protocol does not support using wildcards to filter its directory listings, this feature was requested so often that we simply had to add it to the GetList method and its variants. How do we do it? It's simple - all the filtering is done at the client side. Of course, this won't help you speed up the listing if you have thousands of files in a directory, but at least you would be able to limit the listing scope easily.

Better support for oversized packets

We have noticed that one popular SFTP server sometimes sends packets that are about 4 times larger than the maximum packet size specified by the protocol draft. And this was too large even for our packet parser. To be able to communicate flawlessly with these servers, we implemented a growable receive buffer that can accomodate even very oversized packets, yet doesn't waste any precious memory space with servers that do behave according to the rules.

Similar problem was discovered in the IMAP protocol - here it occured i the Search method on some servers. A similar workaround was added for these as well.

Complete list of changes:

  • FTP: Fixed a bug introduced in the last release that caused a bad InvalidOperationException to be thrown when FTP server reported an error during upload.
  • SFTP: Enhanced packet reader to support oversized SFTP packets.
  • SFTP: GetList, GetRawList and GetNameList enhanced to support wildcards. However, they are processed at the client side because the SFTP protocol can't do that at the protocol level.
  • SSH: Fixed a problem in RSA private key reader that caused an error with some keys.
  • SSH: Enhanced packet reader to support oversized SSH packets.
  • IMAP: Response-reading code enhanced to handle oversized responses that occured while searching with some servers.
  • SNTP: Ntp.SynchronizeSystemClock method can now syncrhonize system time even if the current clock value is outside the range supported by NTP.
  • SNTP: Added experimental support for setting system time on Linux.

The next release of FTP and SFTP components will finally feature directory tree transfers!