Convert hostname to ASCII before applying it (Issue #143)
Don’t demand a full JID for SI file transfer (Issue #142)
Make debugger optional in WebSocketConnection and NettyTcpConnection (Issue #141)
MessageDeliveryReceiptsManager: correctly set from attribute (Issue #139)
Make use of TcpConnectionConfiguration#getKeepAliveInterval in NettyTcpConnection
Version 0.8.0 (2018-07-17)
Works as JPMS modules on Java 9 and as conventional JAR library on Java 8
Make Jid class an interface. Full JIDs and bare JIDs now share the same instance. No new instances need to be created when calling asBareJid(), the interface just returns a different view on the full JID. Reduces GC pressure and increase performance.
Allow Unicode (non-ASCII) domain names in JIDs (Issue #128)
Update Jid implementation to use new PRECIS specification RFC 8264
Add a MalformedJid implementation to allow to use malformed-jid stanza error.
Add Java NIO support
Every connection now has closeAsync() method
Allow to set a custom thread factory for all threads being started
Add a class StreamHeader which represents the stream header and checks for the rules in RFC 6120.
Refactor Text classes from the urn:ietf:params:xml:ns:xmpp-stanzas, urn:ietf:params:xml:ns:xmpp-streams and urn:ietf:params:xml:ns:xmpp-sasl namespaces into one common rocks.xmpp.core.Text class (API change).
Add putExtension() and addExtensions() methods to Stanza.
Move rocks.xmpp.core.stream.StreamErrorException to rocks.xmpp.core.stream.model.StreamErrorException
Check the ‘from’ attribute of IQ responses to prevent spoofing
Ensure that xsi:type values have a known namespace prefix (Issue #137)
EntitityCapabilities payload is not added to outgoing presence when presence have ‘to’ address (Issue #132)
sendAndAwaitMessage not handling concurrent requests/responses correctly (Issue #136)
Version 0.7.5 (2018-01-27)
Add stream ID to ConsoleDebugger output (Issue #105).
Improve CustomIQ example and documentation (Issue #112).
PingManager: Make exception for feature-not-implemented (Issue #113).
Allow configuration of custom name server for DNS SRV resolution.
MUC service discovery should handle items with non-room JIDs (Issue #106).
Connecting to stream hosts should not exceed configured response timeout (Issue #111).
Fixed DataForm.getReportedFields() to work when null.
Fix NullPointerException in RPC Value class (Issue #117).
Fix memory leak on WebSocket connection failure (Issue #122)
Ensure WebSocket session is closed, if server does not respond with <close/> element.
Store avatar image using correct hash code.
Version 0.7.4 (2017-03-14)
Resolve rare deadlock when using Stream Management
Rework how WebSocket connections are closed
Don’t let a stream error close the stream immediately, but instead wait for the closing stream element and then close the connection.
Increase performance of IBB stream
Prevent rare, but possible NullPointerException after sending stanzas.
Fix error when using pages (XEP-0141) within data forms (XEP-0004)
Reset nick to null, if entering a chat room fails
Version 0.7.3 (2017-02-09)
Use single equals sign (“=”) for zero-length data in SASL, as per RFC 6120 § 6.4.2
Allow configuring a custom stream host and skip proxy discovery then for SI file transfer.
Implement WebSocket pings/pongs.
Fix WebSocket’s proxy URI construction.
Use connect timeout for WebSocket connections.
XEP-0198: Send an ack right before gracefully closing the stream (i.e. update to version 1.5.2).
MUC Room “enter” events should fire for oneself entering the room as well.
Use java.text.Collator for String-based default comparison.
XEP-0066: Use URI instead of URL.
Fix XMPP Ping in External Components, which broke the connection.
Jid.asBareJid returns this if it is already bare, reducing GC pressure.
connect() method should not throw CancellationException
Check if the connection has been secured (if configured) before starting to authenticate.
Version 0.7.2 (2016-09-08)
Fix reconnection issue, when using multiple connection methods per session.
Improve and fix stanza acknowledging and Stream Management
Add Delayed Delivery (XEP-0203) extension to stanzas, which are resent automatically later (when reconnected again)
Always resent all unacknowledged stanzas after login, not only after stream resumption.
Highlight StreamManagement’s request / answer pairs in VisualDebugger.
Update XEP-0198 Stream Management to version 1.5 (respect the ‘h’ attribute in the failed element)
Wait for the roster response before sending initial presence during login, to prevent receiving presence information from yet unknown contacts.
Make sure asynchronous method calls do not block (affected only few methods for avatars and entity capabilities)
Use the hostname instead of the domain for SASL clients (i.e. use the Sasl.createSaslClient API correctly as per the documentation, may affect DIGEST-MD5 authentication).
Call SaslClient.dispose() when SASL authentication has completed.
Include the requesting IQ in NoResponseException, when doing IQ queries.
XEP-0184: Add the sender of a receipt to the MessageDeliveryEvent.
Allow event consumption for outbound stanzas, which prevents the stanza to be sent.
Make stream feature negotiation more stable.
Minor graphical fixes in VisualDebugger.
Add API to include the hash and mime type in File Transfer offers.
Add API to create a chat session with a thread id.
Immediately complete (IQ-)queries if sending failed and don’t wait on the timeout.
Version 0.7.1 (2016-08-09)
Discovering services should not fail immediately if one sub-query fails.
Make sure abnormal WebSocket disconnections trigger the reconnection.
Make sure RECONNECTION_SUCCEEDED event is triggered for external components.
Add listeners to listen for successful or failed send operations.
Add public constructor for the SASL challenge class.
Add public constructors to SASL Failure class.
Make sure to not write XMLConstants.XML_NS_URI to XML elements (FasterXML Aalto’s XMLStreamWriter implementation writes it)
Add DataForm.Field#getValue() and implement toString() method.
Add convenient API to compare two MUC affiliations and roles (i.e. Affiliation.OWNER.isHigherThan(Affiliation.ADMIN))
Compare presences of MUC occupants in the Occupant’s Comparable implementation.
Minor performance improvement by using a ListIterator in collection based result sets.
Discover PubSub services by identity, not by feature name (it’s more reliable)
Add nextPage() and previousPage() method and refine the naming of other methods in result set management (e.g. having forCount() and forItemCount() was confusing)
Add shortcuts to retrieve the error condition from StanzaException and StreamErrorException.
Validate MUC room JID, when creating a chat room.
Add API to retrieve owners, admins and outcasts in a chat room.
Fix bug when declining a MUC invitation.
Minor bug fixes in VisualDebugger.
Add factory method to create XEP-131 headers from a Map.
Improve BoshConnection class by queuing up stanzas and send multiple stanzas in the same request.
Add API to better listen for disconnects and reconnects.
Process inbound IQs on another thread as messages and presences. This allows to query IQs from within a Message listener without using extra threads/executors, which seems to be a common use case.
All event listeners have been replaced by java.util.function.Consumer<T extends EventObject> (if you used lambda expressions, nothing has changed for you)
Rework the way inbound/outbound stanzas are handled: Instead of add[Message|Presence|IQ]Listener you now have to use addInbound[Message|Presence|IQ]Listener. (API change!)
Add IQHandler interface which allows to easily respond to IQ request.
RosterManager now supports (nested) contact groups
Improve Jid class (nodeprep, resourceprep, better escaping logic, caching for better performance, Comparable interface implemented)
Add JID Escaping feature (jid\\escaping) to feature list for Service Discovery.
Restructure the project: It’s now separated into modules:
xmpp-core, which contains XML schema implementations and core classes. It could theoretically be useful for a server implementation, too.
xmpp-client, which contains business logic, used by XMPP clients (e.g. connection logic, roster management, …)
The base Connection class is now called XmppSession, which can have multiple connection methods. Each connection method is tried while connecting. That way a XMPP session can have a normal TcpConnection and an alternative BoshConnection, which is tried as fallback.
Move Message, Presence and IQ classes from org.xmpp.stanza to `org.xmpp.stanza.client package (API change).
The ‘from’ attribute of roster/privacy lists/blocking command pushes are now checked to prevent IQ spoofing.