SocketTools Release Notes

Version 9.0.9000.1420

  • Support for Windows 10 and Windows Server 2016 platforms and the current version of the TCP/IP stack on those platforms. It is recommended that applications which target these platforms upgrade to the current version.
  • New security options for all networking components that introduces explicit support for TLS 1.2 and provides a mode that is compliant with PCS DSS v3.1 standards. In this mode, a connection will not complete unless both the client and server support strong encryption and the TLS 1.2 protocol.
  • Support for Visual Studio 2015 and .NET Framework 4.6, along with previous versions of Visual Studio including Visual Studio 6.0, and continued support for the .NET 2.0 Framework for legacy applications.
  • SocketTools continues support for Windows XP SP3 and Windows Server 2003, however those platforms have limited feature sets and security options.
  • Updated the SSH and SFTP networking components to be compatible with the OpenSSH 7 library and those services which use it. Improved backwards compatibility with older servers, primarily those on embedded devices, that do not support the typical suite of encryption algorithms.
  • Improved support for Unicode aware servers using UTF-8 as the default character set for file and resource names.
  • Improved support for IPv6 networking on Windows servers that do not have an IPv4 stack enabled or configured.
  • Improved internal support for virtual machines (VMs) running on a host using NAT or bridged network connections.
  • Increased the number of connections that the server components can accept and process, based on the amount of physical and virtual memory available on the system.
  • Improved performance for very large file transfers to some servers, and made internal improvements to the ability to automatically recover a transfer that may have stalled.
  • Corrected a problem with the FTP components that could cause incorrect information to be returned when parsing directory listings from certain types of servers. This could result in invalid file sizes or date values to be returned to the application.
  • Corrected a problem where the FTP and HTTP components may not parse certain types of URLs correctly if they were constructed in a specific way.
  • Adjusted parsing and encoding requirements for certain types of HTTP requests to accommodate servers that would not decode queries correctly. This prevented unnecessary redirections that could cause unrelated errors or delays in loading content.
  • Updated the Library Edition C/C++ header files to improve compatibility with older versions of the Visual C++ compiler and third-party C/C++ compilers.
  • Corrected a problem with the MIME components when parsing messages that contained certain malformed headers in the main header block of the message. This resulted in attachments that could not be accessed by the application.
  • Relaxed certain authentication restrictions internal to the client, depending on the server to indicate whether a specific command is authorized or not instead of depending on the state of specific authentication requests.
  • Corrected a problem that could cause the IMAP and POP3 components to attempt a secure connection using the credentials provided, even if the server was not configured to support them and security options were not enabled.
  • Corrected a problem with the FTP components where transfer restart byte offsets would be ignored even if the FTP server supported the option and the entire file would be transferred.
  • Modified the FTP components to return a more meaningful error code when attempting to append data to a file and specifying a restart byte offset greater than zero; they will now return an error indicating that the operation is not supported.
  • Corrected a problem with the FTP components where the GetFileSize method could return an incorrect error code, indicating that a file does not exist on the server when the cause of the failure was an unrecognized command.
  • Updated the .NET components to be more consistent with how they threw exceptions when property values were being set incorrectly, with error information more consistent with the actual cause of the problem rather than just throwing a general exception.
  • Corrected a problem that could prevent the .NET components from initializing correctly under some circumstances with applications that targeted x64 platforms (64-bit Windows) on Windows 10.
  • Standardized many of the constant values embedded in the DLL type libraries used by some programming languages.
  • Corrected a problem in the server component that could prevent the current thread from obtaining the handle to the socket for the client session.
  • Corrected a problem with HTTP components that could prevent a file date from being adjusted for the local timezone if the server was returning the date and time using the UTC timezone.
  • Corrected a problem with the PostFile method in the HTTP component where the method would fail when a URL was used unless the caller had explicitly established a connection with a previous call to the Connect method.
  • Modified the .NET components to return errorProductNotLicensed rather than the more ambiguous errorNotConnected in certain situations where a connection could not be established because the component has not been initialized with a runtime license key or the evaluation license has expired.
  • Changed all .NET components to throw an exception if an invalid license key is specified using the RuntimeLicense attribute.
  • Corrected a problem with the server components that could cause a client session handle to become orphaned when a remote host closed its connection to the server.
  • Corrected a problem with the SocketWrench component that would cause the Accept and Connect methods to ignore security options when passed as a parameter to the method.
  • Changed the Reset and Dispose methods in all networking components to explicitly release the unmanaged memory allocated for a security context used with secure TLS and SSH sessions.
  • Changed the Secure property to consistently throw an exception across all .NET networking components if the program attempts to change the value after a secure connection has been established.
  • Improved the core SSH code to handle high latency conditions and resolved a problem that could cause a general protection fault if the network connection was lost during the middle of a transfer using SFTP.
  • Corrected a problem that could cause the networking components to always attempt to establish a secure connection if the previous connection was secure.
  • Corrected a problem that could prevent the networking components from re-initializing the appropriate security and proxy-related property values after the Reset method has been called.
  • Corrected a problem with the networking components that could prevent the UserName and Password properties from being updated after the Connect method was called with the user credentials passed as arguments.
  • Modified the FTP components to automatically change the current working directory for the session if a connection URL was specified and it designates a path on the remote host.
  • Corrected a problem with the FTP components that could cause the class to ignore the value of the Account property if a secure connection was established. This only affected those servers which require an account name, preventing the client session from authenticating correctly.
  • Corrected a problem that could cause the FtpChangeDirectory function and ChangeDirectory methods in the FtpClient and FileTransfer classes to fail if the server type could not be determined.
  • The FileTransfer, InternetMail and SocketWrench components have all been merged into their respective SocketTools Editions and are available in each of those products, along with the SocketTools Subscription.
  • Updated the technical reference documentation for the current release.

Version 8.0.8050.2538

  • Corrected an issue that could prevent secure SSH and FTP client file transfers from completing successfully when the application is running inside a virtual machine using a NAT network configuration.
  • Corrected an issue with the FTP server component where custom commands issued by a client may not trigger the appropriate event handler. This would prevent the application from being able to process those commands correctly.
  • Corrected an issue with the FTP server not processing the output from external commands correctly under some circumstances, returning no data to the client after the process has terminated successfully with an exit status code of zero.
  • Corrected an issue with the HTTP server component that would result in certain malformed virtual paths resolving to invalid local paths instead of returning an error to t he application.
  • Corrected an issue with the HTTP server component that would cause certain command verbs (other than HEAD, GET and POST) to be rejected under certain circumstances because it did not think the client had the appropriate permissions to issue those commands.
  • Corrected an uncommon issue with the HTTP server not correctly calculating the expiration date and time value used with cached resources. This would typically only occur if the server was active for an extended period of time.
  • Corrected a problem with the IMAP client component that could prevent multiple searches from returning valid results if they were issued without any intervening commands being sent to the server.
  • Corrected a problem with the IMAP client component that could result in a mailbox not being closed after messages were deleted and the caller has explicitly requested that the messages be expunged.
  • Corrected an uncommon problem with the SMTP client that could result in the client session being flagged internally as authenticated when the server has actually rejected the authentication attempt. This would result in subsequent commands failing with unusual error codes being returned to the application.
  • All digitally signed components are now signed with a code signing certificate that uses SHA-256.
  • Minor updates and corrections to the documentation and examples.

Version 8.0.8040.2496

  • Corrected a problem that could prevent the SSH and FTP client components from establishing a connection to an SSH server built using OpenSSH 6.9 or a later version of the library.
  • Updated the SSH and FTP client components to selectively use the deprecated Diffie-Hellman group exchange message only when connected to servers that are known to not fully support the RFC 4419 standard.
  • Corrected a problem where the IMAP client component would not return the correct delimiter for mailbox paths if the server used something other than the forward slash character.
  • Corrected a problem where IMAP client authentication would fail if the password or username contained quotes or certain other non-alphanumeric characters.
  • Corrected a problem with SFTP (SSH) file transfers where an append operation could either fail unexpectedly, or in some cases would overwrite the file rather than appending the data.
  • Changed the append operation to no longer return an error if the file on an SFTP server does not exist. It will now automatically create the file and upload the data. This makes append operations consistent between FTP, FTPS and SFTP connections.
  • Changed the PutFile and GetFile operations for all file transfers to return an error if a non-zero byte offset is specified with an append operation. Previously, specifying a byte offset would either be ignored, or in some cases could cause the file to be corrupted.
  • Corrected a problem with the SFTP client that could cause the application to fail with a memory access exception if the user account on the server was disabled or set to use a non-standard shell.
  • Corrected a problem where the SFTP client would not return an error if the server unexpectedly closed the connection without providing a reason. This typically indicates a problem with the server configuration, and the client will now return an appropriate error code.
  • Added missing file enumeration constants in the typelib information for the FTP library.
  • Corrected a problem where large files (greater than 4GB in size) could fail file verification, even though the file transfer was successful. This could cause applications to repeatedly attempt to transfer the file if they used the verification options.
  • File verification will default to using file size only for large files. This will reduce the amount of time required to verify the transfer and reduce processor load. Applications may still choose to use more computationally expensive verification methods if they wish.
  • Corrected a problem with the MimeExportMessageEx function where it would return an error if the buffer provided is not large enough to contain the entire message. It will now truncate the message instead. This will allow an application to explicitly export only a portion of the message that contains the main header block and initial portions of the message data.
  • Corrected a date localization issue that affected internal date parsing with all SocketTools components. The problems typically manifested as incorrect date and time values being returned in certain European time zones.
  • Corrected a problem with the HTTP server component where virtual folders could not be mapped to directories at the root of a physical drive. This was the result of a restrictive check to prevent potential security issues. Attempts to map the root of a drive to a virtual folder will continue to result in an error.
  • Corrected a problem with the HTTP server component that allowed virtual folders to be mapped to directories that do not exist. This would result in unexpected access denied errors when a client attempted to access the folder.
  • Minor updates and corrections to the documentation and examples.

Version 8.0.8030.2386

  • SocketTools has changed the default protocol and cipher suite prioritization for all secure connections to prefer stronger encryption options. On Windows 7 and Windows Server 2008 R2 and later versions of Windows, secure connections will use TLS 1.2. Earlier versions of Windows will use TLS 1.0. By default, SocketTools will no longer request or accept connections using SSL 3.0. Although it is not recommended, an application may explicitly request that SSL 3.0 be used.
  • Corrected an issue that could cause the HTTP redirection to fail with an incorrect error code if the location of the redirected resource does not exist or the hostname could not be resolved.
  • Improved the internal handling of MIME multipart messages that contained a combination of both inline images and file attachments. This change also corrected a rare issue that could cause an exported message to show inline images as attachments in Outlook and other mail clients.
  • Corrected an issue that could prevent the FTP and HTTP server components from detecting that a client had aborted its connection, causing the server to retain connection information for that inactive session.
  • Improved the handling of connections to SSH servers that do not support AES encryption. This change was primarily made for compatibility with older hardware devices that cannot be easily updated. This change also affects connections established by the FTP component for SFTP file transfers.
  • Corrected a problem that could prevent the DNS resolution of a hostname if that hostname only had an IPv6 record and no IPv4 address. Under some circumstances, it would result in a connection failing with an error indicating that the IP address was invalid. This change also eliminates an ambiguous error condition that would indicate the hostname was invalid when there was a valid record for that host.
  • Corrected a problem that could abort secure connections from a Windows XP or Windows Server 2003 system if the client requested TLS 1.0 or SSL 3.0 and the server only supported SSL 3.0. Note that with this update, the client must now explicitly request SSL 3.0 or connections to older servers that do not support TLS will return an error.
  • Corrected a rare problem where the memory allocated for MIME multipart alternative content, such as text and HTML versions of a message, would not be released when the message was destroyed.
  • Corrected a problem where an unauthenticated SMTP session may not be established if the server domain had an invalid MX record, such as a hostname that could not be resolved.
  • Corrected a problem where the IMAP component could not correctly identify all of the features supported by the server when the connection is established. In some cases this could cause the component to not use certain features that were actually available to the client.
  • Corrected a problem with the TCP server component that could prevent a client socket from being closed gracefully when the session was signaled to terminate. This would result in the remote host as seeing the connection being closed with a hard abort, which may cause unpredictable behavior by the client application if it was not designed to handle aborted connections.
  • Corrected a problem with the ICMP component where setting the time-to-live (TTL) value higher than the previous value for that session would be ignored under certain conditions. This could cause unexpected results after using the component to perform a traceroute or similar functionality.
  • Corrected a problem where a base64 encoded MIME multipart header value in an attachment or alternative message content would not be properly re-encoded after the message was modified and exported.
  • Corrected an issue with the IMAP component where all messages that are flagged for deletion would not be expunged under some circumstances. This would have the effect of deleted messages reappearing in the mailbox and did not affect the standard INBOX mailbox.
  • Corrected a problem in the HTTP component that would prevent it from establishing a secure connection using a non-standard port number if automatic proxy detection was enabled.
  • Corrected a problem that could prevent secure SSL/TLS connections from being established if the application was running on the Windows Vista 64-bit desktop platform. Under some circumstances it could also cause the client application to become non-responsive and have excessive CPU utilization until the process was terminated.
  • Minor updates and corrections to the documentation and examples.

Version 8.0.8020.2165

  • A minor update to internal functions to use services on the sockettools.com domain, along with modifications to the included examples, documentation and installer.
  • Corrected a problem with the HttpServer LogFormat property in the .NET class and ActiveX control which would throw an exception when specifying the combined logging format.
  • Corrected a problem with the terminal emulation ActiveX control that could prevent it from displaying correctly in a VBA application.

Version 8.0.8020.2136

  • Corrected a problem with the HTTP library and components where a request or response header value is defined as an empty string, or a string that consisted only of whitespace, could be considered a defined value.
  • Corrected a problem with the HTTP client library and .NET class where multiple threads attempting to update the request headers could corrupt the request header block submitted to the server.
  • Updated the HttpPostXml function and PostXml method to only specify a content type if one has not already been defined.
  • Updated structure definitions in the FTP and HTTP server DLL type libraries that addresses a problem when using them in Visual Basic 6. It is not recommended that these libraries be used with programming languages that don’t provide full support for threading.
  • Corrected a problem where the FTP server type may not be detected correctly if the server does not allow use of the SYST command prior to authentication.
  • Corrected a problem where a directory listing would not be parsed correctly if the server used the MS-DOS directory format but did not identify itself as an IIS FTP server.
  • Corrected a problem that could prevent the correct format for the directory listing from an IBM Sterling commerce FTP server from being automatically detected.
  • Defined the server type constant FTP_SERVER_OTHER in addition to FTP_SERVER_UNKNOWN to distinguish between FTP servers that cannot be identified and those that are not recognized by the FTP client library.
  • Updated the FTP and HTTP APIs so that large file sizes are normalized when the size is returned in a 32-bit integer so that size and progress information can be displayed more consistently. This will prevent incorrect file sizes from being reported when displayed to the end-user. It does not affect the actual transfer of the file.
  • Updated the FTP and HTTP libraries and components to address a potential compatibility issue with applications or other third-party components that used Win32 structured exception handling.
  • Corrected a problem with the libraries and components that could prevent a host with a valid IPv6 address from being resolved on Windows XP and Windows Server 2003 systems that have the IPv6 stack installed, allowing only IPv4 connections to be established.
  • Corrected a problem where IMAP and POP3 connections using explicit TLS could potentially fail with an error indicating an invalid security context, even though the handshake actually was successful. This problem typically only occurred under very high latency conditions.
  • Corrected a problem where MIME formatted email messages that contained headers that used base64 encoded values could corrupt the internal structure of the message when parsing and decoding the header values. This would typically manifest itself as messages that would have a file attachment or inline image combined with the message text.
  • Corrected a problem where the SocketTools.InternetDialer class would not load an existing connectoid if a project was compiled to target the x64 platform.
  • Corrected a problem where using the RAS Dialer ActiveX control or SocketTools.InternetDialer class to disconnect an active VPN connection could cause the application to stop responding or throw an exception.
  • Updated the examples and technical reference documentation.

Version 8.0.8010.1872

  • Corrected a problem that would cause the FtpServer and HttpServer .NET classes to return an error that the server was already active when attempting to send custom responses to a command.
  • Corrected a problem that would cause the HttpServer .NET class to ignore custom response header fields set using the SetHeader method.
  • Corrected a problem would cause the FTP ActiveX control to return an invalid error code when setting the port range for active FTP data connections.
  • Corrected several issues with the Library Edition DLLs where where the type library contained function declarations that were missing or had incorrect parameters. This primarily affected Visual Basic developers with projects that referenced the DLLs.
  • Corrected an issue in several .NET classes that could cause string objects that were passed by reference to be returned with extraneous characters at the end of the string if it was not explicitly initialized by the caller.
  • Modified the Library Edition C++ header files to eliminate warnings about unreferenced parameters in class event handlers. This typically impacted Visual C++ projects that used warning level 4 when building projects.
  • Updated several Visual Basic 6.0 examples that referenced incorrect type library IDs that would result in error messages when loading the project.
  • Updated the installation package to include ELF-64 import libraries for use with 64-bit versions of C++Builder, and type libraries (.TLB) for both x86 and x64 projects that use the standard DLLs.
  • Updated the examples and technical reference documentation.

Version 8.0.8000.1536

  • Updated for compatibility with the Windows 8 desktop and Windows Server 2012 server platforms. Includes support for Visual Studio 2012 and the .NET 4.5 Framework.
  • Includes a new File Transfer Server component that provides a complete server implementation of the File Transfer Protocol (FTP) and most standard extensions. Provides support for standard and secure connections using both implicit and explicit SSL/TLS.
  • Includes a new Hypertext Transfer Server component that provides a complete server implementation of the Hypertext Transfer Protocol (HTTP). Provides support for standard and secure connections using SSL/TLS.
  • Added support for asynchronous file transfers using background worker threads with the FTP and HTTP client components. For more information, refer to the FtpAsyncGetFile, FtpAsyncPutFile, HttpAsyncGetFile and HttpAsyncPutFile functions in the library documentation and the AsyncGetFile and AsyncPutFile methods in the .NET and ActiveX control documentation.
  • The OnStart, OnIdle and OnStop events have been added to the Internet Server component. These events notify the application when the server has begun listening for client connections, when there are no active client connections, and when the server has stopped.
  • Added the CertificateUser and CertificatePassword properties to all components that support secure connections. These can be used to provide user and password credentials for client and server certificates that require them.
  • Added the UnreadMessages property to the IMAP component to return the number of unread messages in the currently selected mailbox.
  • Added the InetServerAsyncNotify function to send asynchronous windows messages to a GUI application when the server status changes. This addition to the SocketWrench server API makes it easier to notify the application of state changes through the message queue without having to marshal notifications to the main UI thread so that it can update the user interface.
  • Added the InetGetClientServerById function to the SocketWrench server API to obtain a server handle using the unique client session identifier.
  • Added The InetGetAdapterAddress function to return the IP or MAC address for a specific network adapter. This function effectively replaces the InetGetPhysicalAddress function and provides more information to the caller. It is recommended that new applications use this function to obtain the MAC address for the network interfaces installed on the local system.
  • The Connected and Listening properties in the ActiveX controls are now IsConnected and IsListening to make them consistent with the .NET classes. The deprecated properties are retained in the interface as hidden properties for backwards compatibility with existing code. It is recommended that you update your code to use the new property names.
  • Changed the DNS component to no longer throw an exception when attempting to resolve a hostname that has a mail exchange (MX) record, but does not have a corresponding IP address (A) record. This eliminates some unnecessary coding that was required in previous versions.
  • Corrected a problem with the .NET HttpClient class that could potentially prevent it from establishing a connection through an authenticating proxy server, depending on the server configuration.
  • Changed the FtpPutData function to support the creation of a zero length file on the server by specifying a NULL buffer and zero as the data length. Previous versions of the function would require that the application upload at least one byte of data.
  • Changed the .NET classes and ActiveX controls so that it is no longer required for each instance of the control to call the Initialize method. Only one instance of the component needs to be explicitly initialized with the runtime license key and all additional instances will inherit its licensed state. This eliminates a lot of redundant code that was previously required when multiple instances of one or more SocketTools controls were referenced in a single project.
  • The WinsockVendor and WinsockVersion properties have been removed from the components. These properties returned the name of the and version of the Windows Sockets API that has been installed on the system. This was included in early versions of SocketTools when alternate TCP/IP stacks were generally available, however the Microsoft stack has been the de facto standard on Windows for over ten years and the information returned by these properties is effectively static and no longer useful. All current versions of Windows use the Microsoft TCP/IP stack and SocketTools uses version 2.2 of the Windows Sockets API.
  • The LocalAddress, LocalName and LocalPort properties have been deprecated in the client components where this information was not particularly useful. This change was made as part of a review to streamline the component interfaces. These properties have been retained as hidden properties for backwards compatibility with existing code, however they may not be included in future releases of the components.
  • The State property has been deprecated, however it has been retained in the interface as a hidden property for backwards compatibility. It is recommended that you use properties such as IsConnected, IsReadable and IsWritable to determine state. This has the benefit of making your easier to read, and it will ensure compatibility with future releases of the components.
  • The RemoteService property has been deprecated because it effectively duplicated the functionality of the RemotePort property. Applications should use the RemotePort property to specify a remote port number, or simply provide the required port number as an argument to the Connect method.
  • The Option property has been deprecated in most components. This property has been retained for backwards compatibility with existing code, but its use is not recommended for use in new applications. Although setting the Option property allows you to set multiple options in a single line of code by assigning one or more bitflag values, for code readability and future compatibility it is recommended that you set the individual properties that enable the options that you want to use.
  • The SyncLock method has been deprecated in the Internet Server ActiveX control, and all internal synchronization is now handled automatically. It is recommended that you remove calls to this method from applications that reference the control.
  • The generic queue related methods in the Internet Server control have been deprecated; they are still available, but it is recommended that applications should use other classes/objects to manage any FIFO queues required by the application.
  • The DefaultHandle property in the Internet Server. NET class has been deprecated and applications should explicitly specify the client handle if needed. The use of this property created some confusion because of how the handle value was returned based on the context of the thread that it was called in, and improper use of the property could cause problems in the application that were difficult to debug.
  • All error codes in the ActiveX controls have been standardized on the common SocketTools constants (that begin with “stError”) rather than the individualized constant names that were unique to some implementations. These common error constants have existed since version 5.0, but the older constants that were included for backwards compatibility are now considered deprecated and should no longer be used.
  • Corrections and updates to various examples and the technical reference documentation.