SSH.NET v2016.1.0-beta2 Release Notes

Release Date: 2017-08-16 // over 6 years ago
  • ๐Ÿ”„ Changes

    General

    • Increase initial window size for SSH channels from 2 MB to 2147483647 (231 - 1) bytes. This results in less protocol overhead when receiving data from a SSH server.

    SftpClient

    • When the read buffer is empty, SftpFileStream.Read(byte[], int, int) only writes those bytes to the buffer that go beyond the number of bytes requested by the caller.
    • Reduced memory allocations in SftpFileStream by lazily allocating read and write buffer.
    • Improved compatibility of SftpFileStream.SetLength(long value) with System.IO.FileStream (PR #272):
      • Flush buffers before changing the length of stream.
      • Move the current position to the last byte of the stream if the current position is greater than the new length.
    • Eliminated extra read from server in SftpFileStream to determine EOF.
    • ๐ŸŽ Greatly improved performance of SftpClient.(Begin)DownloadFile(...) by asynchronously reading ahead chunks (issue #145 and #100).

    ๐Ÿ’ฅ Breaking changes

    SftpClient

    The IsAsync property was removed from SftpFileStream. Previously this property always returned false.

    The read and write position in SftpFileStream are no longer tracked separately. Reading from or seeking in the SftpFileStream will now also affect the position at which a subsequent write is performed, and vice versa (issue #253).

    For example, the following code snippet will now write "123456" to the console:

    var buffer = Encoding.UTF8.GetBytes("123456"); using (var client = new SftpClient("host", "user", "pwd")) { client.Connect(); using (var ws = client.OpenWrite(path)) { ws.Write(buffer, 0, 3); } using (var ws = client.OpenWrite(path)) { ws.Seek(3, SeekOrigin.Begin); ws.Write(buffer, 3, 3); } Console.WriteLine(client.ReadAllText(path, Encoding.UTF8)); }
    

    To improve compatibility of SftpFileStream with System.IO.FileStream, Append mode is now only allowed when combined with write-only access (issue #267). This only affects SftpClient.Open(string path, FileMode mode, FileAccess access).

    The following code snippet will now throw an ArgumentException :

    using (var client = new SftpClient("host", "user", "pwd")) { client.Connect(); using (var fs = client.Open("/home/user/file.log", FileMode.Append, FileShare.Read)) { } }
    

    Result:
    System.ArgumentException: Append mode can be requested only when combined with write-only access.

    To improve compatibility of SftpClient with System.IO.File, the following methods now use UTF-8 encoding without a Byte-Order Mark (BOM):

    • void AppendAllLines(string path, IEnumerable<string> contents)
    • void AppendAllText(string path, string contents)
    • StreamWriter AppendText(string path)
    • StreamWriter CreateText(string path)
    • void WriteAllLines(string path, IEnumerable<string> contents)
    • void WriteAllLines(string path, string[] contents)
    • void WriteAllText(string path, string contents)

    ๐Ÿ›  Fixes

    General

    • ConnectSocks5() throws a ProxyException with a wrong message (issue #167).
    • Comments in ProxyException.cs are not relevant (issue #163).
    • ๐Ÿ‘ป SSH exception after client connect using .NET 3.5 version (issue #113).

    SftpClient

    • SftpFileStream allows invalid combinations of FileMode and FileAccess (issue #191).
    • SftpFileStream.ReadByte() throws ArgumentException when no data is available in read buffer (issue #173).
    • SftpFileStream also sends SSH_FXP_FSTAT upon initialization when mode is not Append (issue #154).
    • In Append mode, SftpFileStream throws a SftpPathNotFoundException when the specified file does not exist (issue #266).