SocketTools Release Notes

  • Added support for TLS session reuse for secure FTP connections. This option should only be used with servers that explicitly require it and is only supported on Windows 8.1 and Windows 2012 R2 and later platforms. Note this option will not work with servers compiled using OpenSSL 1.0.2 or earlier because they don’t support EMS (extended master secret) which is required by Schannel.
  • Expanded support for additional character sets in the MIME API and SocketTools.MailMessage components. This update improves support for 8-bit character sets for languages which do not primarily use Latin characters, such as Japanese, Korean, Chinese, Arabic, Hebrew and Russian. The documentation has been expanded to provide additional information on all supported character sets.
  • Added a property named CodePage to several .NET classes and ActiveX controls to improve support for how 8-bit ANSI characters are converted to Unicode when sending and receiving text data using native String types. By default, text will be converted to Unicode using the active code page for the current locale, but this can be changed to specify UTF-8 or any other valid Windows code page as needed.
  • The WebLocation API and components have been changed to prefer using IPv6 addresses when detecting the current location because they tend to provide more accurate information than IPv4 addresses. If the local system does not have IPv6 configured, the API will revert back to using the system’s IPv4 address to determine the location.
  • Updated the .NET Framework 5.0 assemblies to use Preview 6. Using these assemblies requires you to install the .NET 5.0 preview and the latest preview release of Visual Studio 2019. Refer to the SocketTools .NET 5.0 Preview technical article for more information.
  • Corrected an issue with the C++ MailMessage class where new messages would be created using UTF-8 encoding, but would export the message as though it was using ASCII text.
  • Corrected an issue where the Windows-1252 character set was not distinguished from the ISO-8859-1 character set. Although these character sets are similar, there are subtle differences that can affect how message contents are parsed.
  • Expanded support for certain character sets identified as Windows code pages, such as windows-1250. They will now be properly converted to Unicode using their specific code page, rather than attempting to process the text as using an ISO character set.
  • Corrected an issue with the SocketTools.MailMessage .NET class which would cause properties such as From, To and Subject to return incorrect values when certain character encodings were used.
  • Corrected an issue which would prevent the MIME parser from correctly processing message headers which used multiple encoding methods or different character sets within the same header value.
  • The default encoding for all character sets is now Base64 for UTF-8 and most other character sets. Quoted-printable encoding is only used by default for messages which do not use Unicode or extended ANSI characters.
  • Corrected an issue that could cause an internal buffer overrun when decoding UTF-8 encoded text which used certain Unicode characters.
  • Exported the MimeLocalizeText helper function from the MIME API. This function is used internally to assist with localizing UTF-8 text, and has been made available to developers using the Library Edition for projects using a multi-byte character set instead of Unicode.
  • Added the MimeDecodeTextEx and MimeEncodeTextEx functions to the Library Edition which enables the caller to specify the character set that was used to originally encode the text. The DecodeText and EncodeText methods were added to the MailMessage .NET class and ActiveX control.
  • Added the options FTP_OPTION_HIRES_TIMER and HTTP_OPTION_HIRES_TIMER to return transfer times in milliseconds rather than seconds. This can be useful when calculating transfer speeds of relatively small amounts of data over fast networks.
  • When checking if a data is available to read, the amount of time spent waiting for network activity using the default timeout period has been reduced from 250ms to 15ms.
  • The options to select IPv6 connections have been renamed to reflect what the option actually does. For the Library Edition, these options were named OPTION_IPV6ONLY and have been renamed to OPTION_PREFER_IPV6. Similar options exist for the .NET classes and ActiveX controls. When these options are used, the library or component will prioritize establishing a connection using IPv6, but will fall back to using IPv4 if no IPv6 address is available or IPv6 is not enabled on the local system.
  • Corrected an documentation issue where the MimeDecodeText and MimeEncodeText functions in the library were exported and prototyped, but not included in the technical reference.
  • Expanded support for two additional key exchange algorithms used with secure TLS connections. The components will now support the Diffie-Hellman store and forward and ephemeral elliptic curve key exchange algorithms.
  • Corrected an issue where some component libraries and ActiveX controls had incorrect version resource information.
  • Updated the technical reference documentation to include the HttpPatchData function in the Library Edition and the PatchData method in the .NET Edition.
  • Added the .NET Core and .NET 5.0 Preview 6 assemblies to the package for the stand-alone SocketWrench installer.
  • Corrected an issue which could prevent certain valid e-mail addresses from being used when installing SocketTools.
  • Minor corrections and updates to the technical reference documentation.
  • The SocketTools .NET Edition now includes assemblies which target .NET Core 2.1 LTS and .NET Core 3.1 for the Windows desktop and server platforms in addition to the complete .NET Framework.
  • Assemblies which target the .NET Framework 5.0 preview release from Microsoft have been included with this release. Using these assemblies requires you to install the .NET 5.0 preview and the latest preview release of Visual Studio 2019.
  • All HTTP and HTTPS client connections will default to using HTTP 1.1, including connections through proxy servers. This addresses an issue where some servers would reject connections from clients attempting to use HTTP 1.0 through a proxy server. It is still possible for clients to explicitly specify using HTTP 1.0 if needed with a legacy server.
  • Corrected an issue with the FtpGetMultipleFiles function and GetMultipleFiles methods which could cause internal heap corruption when called repeatedly.
  • Corrected an issue where memory usage reported by the FTP and HTTP server components could be incorrect immediately after multiple clients have disconnected from the server. This functionality was introduced in the previous update.
  • Corrected a rare condition in the MIME component which could result in an internal buffer overflow with specially crafted UTF-8 encoded strings in message headers.
  • The IP location client service should provide more accurate network information for some localities outside of North America and western Europe.
  • Improved the method used to map regional mobile service providers to the gateways that are used with the SMS components to send text messages.
  • Implements a new heap management system for the FTP and HTTP server components which reduces the overall memory utilization and addresses a memory leak that could occur with a large number of client sessions.
  • The FtpGetServerMemoryUsage and HttpGetServerMemoryUsage functions were added to the API, and the FtpServer and HttpServer .NET classes and ActiveX controls have a new MemoryUsage property which returns the amount of memory allocated by the server for the current client connections. Refer to the technical reference documentation for more information.
  • Corrected an issue which could prevent a secure HTTP session from being established with a server that used TLS 1.0 and required a client certificate. Note that TLS 1.0 is considered a deprecated version of the protocol, and by default SocketTools will TLS 1.2.
  • Corrected an issue that could cause DNS queries for multiple MX records to fail and the last error code for the current thread would not be updated, causing confusion as to the actual cause of the failure.
  • Corrected an issue with the MIME components and library where they would default to incorrect 7-bit encoding when creating new messages under certain circumstances. All new messages are created using UTF-8 encoding by default.
  • Corrected an issue with the HTTP client components and library which could result in incomplete data being returned with an HTTP 1.1 connection using chunked data. This was an edge case that arose from the new internal buffering implemented in version 10 and only occurred under specific conditions with large payloads.
  • Corrected an issue with the geo IP location components and API which could prevent location data for certain valid IPv6 addresses from being returned.
  • Corrected an issue with the internal caching mechanism for the geo IP location components and API that would cause stale location data to be returned for a local system where the IP address has changed.
  • Corrected an issue with the POP3 and IMAP4 components and libraries where the last error code for the current thread would not be updated correctly under certain conditions when a secure connection could not be established with the server.
  • Corrected an issue with the SMTP and Text Messaging libraries and components which resulted in additional memory being unnecessarily allocated for each client session. This memory would not be released until the library or component was uninitialized or the class instance disposed.
  • Corrected an issue with the NNTP library and .NET class that could prevent an article from being retrieved from the server when using a 64-bit article ID value.
  • Corrected a potential internal buffer overrun when encrypting and decrypting string data using the AesEncryptString and AesDecryptString functions. Additional checks are performed to ensure that the output buffer provided by the caller is large enough to store the entire encrypted or decrypted string, including the terminating null character.
  • Corrected an issue where some 64-bit integer values, handles and memory addresses would be reported in logfiles as truncated 32-bit values when targeting a 64-bit Windows platform.
  • Corrected an issue in the Library Edition documentation where some APIs could reference the incorrect header file and/or import library for individual functions.
  • Changed the functionality of unregistering a web services application ID so that it no longer revokes the internal API key associated with it. This allows the ID assigned by the developer to be reused at a later time. Although the AppID can be reused, the key that is associated with that ID will change, and all objects previously created using that ID will be orphaned and expunged from storage.
  • Corrected a problem that could prevent the SocketTools .NET 2.0 and 3.5 assemblies from loading on the 64-bit Windows XP platform.
  • Relaxed MIME address validation to accept email addresses that included whitespace between angle-brackets within an address string. These addresses can be parsed as long as the remaining components of the address are valid.
  • Added functions to the Library Edition that enable an application to enumerate the application IDs that have been allocated for the account. See the WebGetFirstApplication and WebGetNextApplication functions.
  • Updated the function declarations for C# and Visual Basic .NET to use the Unicode versions of functions, and corrected structure members to use UnmanagedType.LPTStr instead of UnmanagedType.LPWStr, which should only be used with COM interfaces.
  • Updated the function declarations for PowerBASIC to correct several cases where parameters were incorrectly declared as BYVAL instead of BYREF. Padding for certain structure members was added to address specific alignment issues.
  • Corrected an issue where some web services functions that should return a Boolean result would return a value of -1 if an error occurred. This would result in an operation appearing to succeed when it actually failed.
  • Relaxed installation requirements to allow for valid email addresses that would otherwise be rejected. It is still required for developers to register their SocketTools license using an individual email address, and not a generic corporate-wide email address.
  • Minor improvements and updates to the documentation.
  • A new private cloud storage component which enables applications to store and manage data remotely, without having to use public third-party providers or subscribe to another service. You can store configuration files or other data to the SocketTools storage service and then access that from within your application from any location. The data is stored securely, and all connections to the server use TLS 1.2 and AES 256-bit encryption. Because there are no public endpoints to the data that you store, it’s not possible for another application to access your data using external links. The data you store is associated with your development license and can only be accessed by your software.
    [.NET Edition] [ActiveX Edition] [Library Edition]
  • A new geographical IP location component which enables your application to obtain specific information about the physical location of the computer system your software is running on. This component uses the external IP address of the local computer to determine its location and will return general information such as the country, city name and what service provider they are using. It can also return more specific location information such as longitude, latitude and GPS coordinates.
    [.NET Edition] [ActiveX Edition] [Library Edition]
  • New general-purpose encryption functionality that enables you to encrypt and decrypt data files or blocks of memory using AES 256-bit encryption and a SHA-256 hashed password to generate the encryption and decryption key. This can be combined with the storage service to encrypt the data that your application stores. There is also the ability to generate encrypted strings which are base64 encoded and safe to store as text.
    [.NET Edition] [ActiveX Edition] [Library Edition]
  • Added support for TLS 1.3. When Microsoft makes it generally available for Windows 10 and Windows Server 2019, SocketTools will support the latest version of TLS. Because SocketTools uses Microsoft’s CryptoAPI and Schannel provider, TLS 1.3 support will only work on those versions of Windows which are updated to use this version of the protocol. Currently, TLS 1.2 remains the default version used to establish secure connections. Earlier versions of TLS have been deprecated, but your applications can still use them if you need to connect to legacy servers which have not been updated.
  • Updated for the latest changes in Windows 10 Build 1903 and Windows Server 2019. Examples have been included for the current release of Visual Studio 2019 and the .NET Framework 4.8. SocketTools 10 continues to provide backwards compatibility for Windows XP SP3 and Windows Server 2003, however certain functionality has been deprecated, particularly in terms of secure connections. Those legacy platforms only support TLS 1.0 and applications running on them will be unable to establish secure connections to most modern services. Secure connections using TLS 1.2 require Windows 7 SP1 or Windows Server 2008 R2 or later.
  • Improved support for the use of TLS client certificates in combination with TLS 1.2 session renegotiation. Client certificates are typically used to authenticate the session, and this change supports servers which periodically attempt to renegotiate the cryptographic parameters throughout the client session.
  • Improved internal performance for HTTP and HTTPS connections, particularly when the client is making many repeated requests for relatively small amounts of data.
  • Added options to make it easier to handle error responses when requesting a resource or submitting data to a web server. When submitting XML or JSON formatted requests, you can request that any error messages be returned to your application on an individual basis, rather than the function or method always returning an error.
  • Improved general support for Unicode and the use of internationalized domain names. SocketTools will automatically convert domain names which contain Unicode characters to Punycode encoding. Several helper functions were added to the API to assist with conversion to UTF-8 encoding.
  • Improved support for the NNTP protocol to allow for article IDs that exceed the maximum value of a signed 32-bit integer. Extended functions allow for the use of unsigned 64-bit integers as article numbers.
  • Added support for generating base64 encoded HMAC message digests using SHA-256, SHA-384 and SHA-512. This can be useful for services which require the use of these digests.
  • Improved performance for the FTP and HTTP server components working over local intranets using shared folders that are not mapped to drives on the host system.
  • Numerous updates and corrections to issues reported with SocketTools 9 have been included with SocketTools 10, providing a cumulative update to those issues reported with the previous version.