Build 3723: Speed measuring in FTP and SFTP, enhanced terminal emulation

Speed measuring in FTP and SFTP

Rebex SFTP and Rebex FTP now have built-in transfer speed measuring support. To retrieve the estimated current speed, simply read it from the BytesPerSecond property of TransferProgress event arguments.

Terminal emulation enhancements

Terminal emulation classes in Rebex SSH Shell and Rebex Telnet were extended with lots of new methods and properties. Also, experimental support for Wyse 60 terminal emulation was added. If you use this, please let us know how well it works.

Bugfixes and small enhancements

This release contains lot of these. Many of them were reported or requested by our customers, so if there is something you would like to have, just let us know about it.
 

Complete list of changes:

  • FTP: FtpTransferProgressEventArgs.BytesPerSecond property added that contains the estimated current speed.
  • FTP: Ftp.TransferProgress event is called less often on high-speed connections now (several times per second is sufficient).
  • FTP: Added support for OTC S/KEY(tm) (One-Time Password System) authentication according to RFC 2289 (optionally used by Serv-U FTP Server). (S/KEY is a trademark of Bellcore.)
  • FTP: Added FtpBatchTransferOptions.XCopy batch transfer mode. This is an alternative form of FtpBatchTransferOptions.Recursive that traverses all subdirectories but only transfers files that match the specified mask.
  • FTP: Maximum allowed UploadBufferLength changed from 64KB to 16MB.
  • FTP: New Ftp.DataAddress property to make it possible to specify active mode IP address transmitted to the FTP server.
  • FTP: HierarchyRetrieve events are no longer raised when only a single file is transferred.
  • FTP: A more meaningful exception is thrown when a directory path is passed to Ftp.GetFile method instead of file path.
  • FTP: FtpOptions.SendDataAsynchronously is deprecated and ignored.
  • FTP: Fixed PutFiles method to accept all kinds of root paths (such as "c:", "c:/", or "c: " - previously, only "c: ." worked).
  • FTP/SSL: Added Ftp.DefaultImplicitSslPort constant.

  • SFTP: SftpTransferProgressEventArgs.BytesPerSecond property added that contains the estimated current speed.SFTP: A more meaningful exception is thrown when a directory path is passed to Sftp.GetFile method instead of file path.

  • SFTP: Sftp.TransferProgress event is called less often on high-speed connections now (several times per second is sufficient).
  • SFTP: Added SftpBatchTransferOptions.XCopy batch transfer mode. This is an alternative form of FtpBatchTransferOptions.Recursive that traverses all subdirectories but only transfers files that match the specified mask.
  • SFTP: Added support for getting and setting file creating date (only works with servers that support SFTP v4).
  • SFTP: Data-block-receiving routines optimized to write directly to the output stream without a round-trip through a temporary buffer.
  • SFTP: Added experimental SftpOptions.UseLargeBuffers to use larger internal buffers (doesn't seem to make substantial difference on most systems).
  • SFTP: Fixed SSH _FXP _READ packet logging code that caused some packets not to appear in the communication log.
  • SFTP: Added a workaround for servers where SSH _FXP _STAT command doesn't work correctly on directories.
  • SFTP: Fixed a bug in GetFile method that caused it to hang if length was specified.
  • SFTP: Fixed PutFiles method to accept all kinds of root paths (such as "c:", "c:/", or "c: " - previously, only "c: ." worked).
  • SFTP: HierarchyRetrieve events are no longer raised when only a single file is transferred.
  • SFTP: Fixed a bug that made it impossible to call Sftp.GetFiles method on a root directory.

  • MIME: MailMessage.CreateReply now supports and processes the Refereces header according to RFC 2822 and common practices.

  • MIME: Added MailMessage.ToByteArray() and MailMessage.Load(byte[]) methods.
  • MIME: Attachment.ContentDescription property added.
  • MIME: MimeEntity.SetSignedContent and SetEnvelopeContent methods enhanced to disallow creating circular paths.
  • MIME: Added support for TNEF-based HTML bodies.
  • MIME: Fixed a bug in binary MIME parser that caused broken data to be parsed.
  • MIME: MailAddress.ToString and MailAddressCollection.ToString methods now quote display names if needed.
  • MIME: Fixed the MIME parser behavior with Mimeoptions.DoNotParseMimeTree options on non-compliant messages with lines too long.
  • MIME: MIME parser enhanced to handle non-compliant input data with duplicate characters.
  • S/MIME: Added a new overload of MailMessage.Sign method to make it possible to specify signature style.
  • S/MIME: Better handling of application/pkcs7-mime attachments that are not an S/MIME signature.
  • S/MIME: Added MimeOptions.SkipSenderCheck option to make it possible to skip sender check when validating signatures using MailMessage.ValidateSignature method.
  • S/MIME: Support for S/MIME messages encrypted using RC2 with effective key length not equal to key data length.
  • SMTP: Added NTLM and GSSAPI/Kerberos authentication support to .NET Compact Framework version.
  • SMTP/SSL: Added Smtp.DefaultImplicitSslPort and Smtp.AlternativeExplicitSslPort constants
  • POP3: Added NTLM and GSSAPI/Kerberos authentication support to .NET Compact Framework version.
  • POP3/SSL: Added Pop3.DefaultImplicitSslPort constant.
  • IMAP: Two new methods in ImapMessageCollection - ToSequenceNumberMessageSet and ToUniqueIdMessageSet.
  • IMAP: Added NTLM and GSSAPI/Kerberos authentication support to .NET Compact Framework version.
  • IMAP: Added ImapListFields.MessageStructure value, ImapMessageInfo.GetParts method and Imap.GetMessagePart method to make it possible to evaluate and download message views, resources and attachments individually without the need to download the whole message.
  • IMAP: Communication compression support added. Needs to be enabled using Imap.EnabledExtensions.
  • IMAP: Fixed a bug in ImapMessageSet.Add and AddRange method s that made them fail when adding multiple non-range values.
  • IMAP: Envelope parser enhanced to better handle envelopes with bad e-mail addresses.
  • IMAP: Date parser enhanced to handle rare two-digit-year date values properly.
  • IMAP: Added several new search criteria to ImapSearchParameter class: All, Unread (NotSeen), MessageSet, Keyword, NotKeyword and Not.
  • IMAP: Added a workaround for Exchange 2007 server that doesn't properly support searching address headers such as From, To or CC.
  • IMAP: Fixed a bug in GetMessageInfo that made it set the Seen flag when called with ImapListFields.Body even if ImapOption.DoNotPeekMessage was enabled.
  • IMAP/SSL: Added Imap.DefaultImplicitSslPort constant.

  • SSH Shell: Added Terminal.GetSelectedText method to make it possible to retrieve the currently selected text.

  • SSH Shell: Ssh.Login method now accepts empty usernames.
  • SSH Shell: SshTerminalControl.LogWriter property added to make logging easier.

  • Terminal: Added TerminalPalette.Sco palette.

  • Terminal: TerminalOptions.PersistColorsOnSgr added to make it possible to specify whether "CSI 0 m" escape sequence (default rendition) whould reset colors as well.
  • Terminal: TerminalScreen.GetRegion and TerminalScreen.GetRegionText methods added to make it easily possible to retrieve a part of the screen content.
  • Terminal: Block selection mode added (accessible through TerminalControl.SelectionMode property or using the Ctrl key).
  • Terminal: Added TerminalControl.MousePasteEnabled to make it possible to disable automated paste on right mouse button click.
  • Terminal: Terminal emulator now supports CSI 10, CSI 11 and CSI 12 escape sequences.
  • Terminal: Added SendToserver(byte[]) method to TerminalControl and VirtualTerminal classes.
  • Terminal: Added experimental support for Wyse 60 terminals.
  • Terminal: Added support for CFT and CBT escape sequences to terminal emulator.
  • Terminal: New overload of TerminalScreen.Clear method added to make it possible to clear the history buffer as well.
  • Terminal: Redefined background color in custom color scheme mode is now applied to all parts of the terminal screen.
  • Terminal: Instances of Shell class returned from Ssh.StartShell i Prompt mode now refuse to work if the prompt was not set.
  • Terminal: SshShell instances returned by Ssh.StartCommand no longer stop on prompt-like text when ReadAll is called.
  • Terminal: Changed TerminalControl.Save and VirtualTerminal.Save in ANSI mode to not write the final sequence.
  • Terminal: Fixed a bug in "CSI 0 J" escape sequence interpreter that caused the whole line to be cleared (instead of onyl a part of it).
  • Terminal: Fixed a bug that occasionally caused InvalidOperationException to ve thrown on disconnected channels.

  • SSH Core: Added SshFingerprint.Compute and SshFingerprint.FromBase64String methods to make it possible to easily calculate a fingerprint of the supplied public key.

  • SSH Core: ZLIB compression is now switched off by default (caused problems with some servers).
  • SSH Core: Client KEX _INIT packet is sent without waiting for the server side one (this is the only proper behavior).
  • SSH Core: Added SshSession.KeepAlive method to make it possible to periodically "ping" the SSH connection to keep it working and detect failures.

  • Security: Added Certificate.LoadDerWithKey method to make it possible to easily load certificates with private keys in external file (Unix-style).

  • Security: Support for PKCS #7 EnvelopedData encrypted using RC2 with effective key length not equal to key data length.
  • Security: Fixed a bug in EnvelopedData class that cause a NullReferenceException to be raised when unsupported encryption algorithm is encoutered.
  • Security: Internal ModPow method optimized.
  • Security: Key generation support removed from RSAManaged a DSAManaged. No part of any of our components ever used it at it was prohibitively slow anyway.

  • TLS/SSL: TlsSocket.SessionID is deprecated because it's global cache was unsuitable for most applications. TlsSocket.Session (and the associated TlsSession class) should be used instead.

  • ProxySocket: The underscore character is now allowed in hostnames (this is non-standard, but used by Windows).

  • ProxySocket: FileLogWriter is capable of logging into a single file from multiple applications now.
  • ProxySocket: ProxySocket.Send behavior changed to always send all the data or fail.

A beta version of Rebex ZIP will be available next week and a final release will follow in spring. If anyone is interested in trying this out, please let us know!

We also launched a new support forum recently. I'm sure those of you who use stackoverflow.com will find it familiar :-)