When TIdNotify.Notify() is invoked by code in the main UI thread, it now respects the TIdNotify.MainThreadUsesNotify property again. Many years ago (prior to mid-2010), whenever TIdNotify.Notify() was invoked by code in the main UI thread, if the TIdNotify.MainThreadUsesNotify property was True then Notify() would use an internal worker thread to queue the notification for delayed […]
TIdURI.PathEncode() and TIdURI.ParamsEncode() no longer encode ‘%HH’ hex sequences as ‘%25HH’. The motivation for this is if you have content that is already percent-encoded with ‘%HH’ sequences in it, like “application/x-www-form-urlencoded” data, then it should be left alone and not double-encoded.
A user recently encountered a problem where requesting TXT records for ‘ups.com’ on multiple DNS servers results in DNS responses that exceed DNS’s default 512-byte max UDP message size, thus truncating to 512 bytes and setting the TC (truncation) bit in the response header. A logic hole in TTextRecord.Parse() was causing TIdDNSResolver to get stuck […]
The IdFIPS unit declares function pointers that allow Indy to interface with external hashing libraries, such as OpenSSL. The TIdHashSHA1 class uses an external library if the appropriate SHA-1 function pointers have been assigned. Otherwise, it uses its own native implementation. However, the TIdHMACSHA1 class was ignoring that feature, relying solely on an external SHA-1 […]
A user recently needed to query a DNS server for DNAME records, but found that TIdDNSResolver did not parse DNAME answers at all. The QueryResult collection would hold generic TResultRecord objects that did not have their RecType property assigned properly, so it would default to 0, which just happens to be qtA. So, a new […]
For a long time, TIdMessage would generate a “Message-ID” header if its MsgId property was not blank, but only when saving an email to a file, not when streamed or transmitted. Otherwise the MsgId was ignored and “Message-ID” was omitted. However, many modern email servers will reject an outgoing email as spam if it does […]
When TIdHTTP is using BASIC authentication with an HTTP server or HTTP proxy, it now supports the “charset” attribute defined in RFC 7617 for the “WWW-Authenticate” and “Proxy-Authenticate” challenge headers. If the server requests a “charset”, TIdBasicAuthentication will now use that charset when encoding its username/password values.
The TIdIOHandler.ReadStream() method now allows its AStream parameter to be set to nil. When nil, any received data that would have been written to the stream will be discarded instead.
Client-side support for the TLS SNI extension has been added to TIdSSLIOHandlerSocketOpenSSL. When TIdSSLIOHandlerSocketOpenSSL is making an outbound TLS connection, it now calls SSL_set_tlsext_host_name() to enable SNI. This extension is used on servers that host multiple hostnames on the same IP address. Use of this extension allows the server to know which hostname a client […]
Some additional support for Gmail IMAP extensions has been added to TIdIMAP4. Previously, the TIdIMAP4FetchDataItem enum was updated in preparation for allowing Gmail’s X-GM-MSGID, X-GM-THRID, and X-GM-LABELS values to be retreived from emails using FETCH commands, however no methods of TIdIMAP4 had been implemented yet to support those extended commands. The TIdIMAP4.ParseLastCmdResult() method has now […]