From 6e4b85a6b7e6cd9500825af098874188f703fa17 Mon Sep 17 00:00:00 2001 From: Florian Schmaus Date: Thu, 2 Aug 2018 16:11:25 +0200 Subject: [PATCH 01/11] Smack 4.3.1-SNAPSHOT --- version.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/version.gradle b/version.gradle index 1cca66abe..683627553 100644 --- a/version.gradle +++ b/version.gradle @@ -1,7 +1,7 @@ allprojects { ext { - shortVersion = '4.3.0' - isSnapshot = false + shortVersion = '4.3.1' + isSnapshot = true jxmppVersion = '0.6.3' miniDnsVersion = '0.3.2' smackMinAndroidSdk = 9 From a4f1039a06af7eda4a134cf6d81de174f1edfe3b Mon Sep 17 00:00:00 2001 From: Florian Schmaus Date: Thu, 16 Aug 2018 15:35:38 +0200 Subject: [PATCH 02/11] Fix example in MamManager's javadoc: s/queryRecentPage/queryLastPage/ --- .../src/main/java/org/jivesoftware/smackx/mam/MamManager.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/smack-experimental/src/main/java/org/jivesoftware/smackx/mam/MamManager.java b/smack-experimental/src/main/java/org/jivesoftware/smackx/mam/MamManager.java index 45496060d..bd8707f8d 100644 --- a/smack-experimental/src/main/java/org/jivesoftware/smackx/mam/MamManager.java +++ b/smack-experimental/src/main/java/org/jivesoftware/smackx/mam/MamManager.java @@ -116,7 +116,7 @@ import org.jxmpp.jid.Jid; * MamQueryArgs mamQueryArgs = MamQueryArgs.builder() * .withJid(jid) * .setResultPageSize(10) - * .queryRecentPage() + * .queryLastPage() * .build(); * MamQuery mamQuery = mamManager.queryArchive(mamQueryArgs); * } From 158103c918ea0650896b20316386cae78f924b4f Mon Sep 17 00:00:00 2001 From: Florian Schmaus Date: Thu, 16 Aug 2018 15:35:59 +0200 Subject: [PATCH 03/11] Add javadoc for MamQueryArgs.Builder.queryLastPage() --- .../main/java/org/jivesoftware/smackx/mam/MamManager.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/smack-experimental/src/main/java/org/jivesoftware/smackx/mam/MamManager.java b/smack-experimental/src/main/java/org/jivesoftware/smackx/mam/MamManager.java index bd8707f8d..3b90d1cb5 100644 --- a/smack-experimental/src/main/java/org/jivesoftware/smackx/mam/MamManager.java +++ b/smack-experimental/src/main/java/org/jivesoftware/smackx/mam/MamManager.java @@ -435,6 +435,14 @@ public final class MamManager extends Manager { return this; } + /** + * Query from the last, i.e. most recent, page of the archive. This will return the very last page of the + * archive holding the most recent matching messages. You usually would page backwards from there on. + * + * @return a reference to this builder. + * @see XEP-0059 ยง 2.5. Requesting the Last Page in + * a Result Set + */ public Builder queryLastPage() { return beforeUid(""); } From 3ffdb9befd59cabee51b94a11312034685447671 Mon Sep 17 00:00:00 2001 From: damencho Date: Thu, 23 Aug 2018 16:22:25 -0500 Subject: [PATCH 04/11] Clears bosh client instance on shutdown. Fixes SMACK-829. --- .../jivesoftware/smack/bosh/XMPPBOSHConnection.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/smack-bosh/src/main/java/org/jivesoftware/smack/bosh/XMPPBOSHConnection.java b/smack-bosh/src/main/java/org/jivesoftware/smack/bosh/XMPPBOSHConnection.java index 756c2d885..8fba8051a 100644 --- a/smack-bosh/src/main/java/org/jivesoftware/smack/bosh/XMPPBOSHConnection.java +++ b/smack-bosh/src/main/java/org/jivesoftware/smack/bosh/XMPPBOSHConnection.java @@ -253,6 +253,16 @@ public class XMPPBOSHConnection extends AbstractXMPPConnection { */ @Override protected void shutdown() { + + if (client != null) { + try { + client.disconnect(); + } catch (Exception e) { + LOGGER.log(Level.WARNING, "shutdown", e); + } + client = null; + } + setWasAuthenticated(); sessionID = null; done = true; From 77baaa99bc6ad7eaca65268ef3d31b57e3731168 Mon Sep 17 00:00:00 2001 From: Florian Schmaus Date: Mon, 10 Sep 2018 21:00:49 +0200 Subject: [PATCH 05/11] Do not warn on presence from bare MUC JID in MultiUserChat as such presence messages became a thing in XMPP (e.g. for XEP-0153 avatars for MUC). --- .../src/main/java/org/jivesoftware/smackx/muc/MultiUserChat.java | 1 - 1 file changed, 1 deletion(-) diff --git a/smack-extensions/src/main/java/org/jivesoftware/smackx/muc/MultiUserChat.java b/smack-extensions/src/main/java/org/jivesoftware/smackx/muc/MultiUserChat.java index 598fe68e4..3b2bcbc86 100644 --- a/smack-extensions/src/main/java/org/jivesoftware/smackx/muc/MultiUserChat.java +++ b/smack-extensions/src/main/java/org/jivesoftware/smackx/muc/MultiUserChat.java @@ -205,7 +205,6 @@ public class MultiUserChat { final Presence presence = (Presence) packet; final EntityFullJid from = presence.getFrom().asEntityFullJidIfPossible(); if (from == null) { - LOGGER.warning("Presence not from a full JID: " + presence.getFrom()); return; } final EntityFullJid myRoomJID = myRoomJid; From 87fac888c62de55a458eaf20f40dfe321dd5ee3a Mon Sep 17 00:00:00 2001 From: Florian Schmaus Date: Wed, 12 Sep 2018 19:56:46 +0200 Subject: [PATCH 06/11] Improve MultiUserChat's API to query hosted rooms Return a Map instead of a List. This makes it possible to check for the existence of MUC by looking up the MUC's address in the Map's key set. --- .../smackx/muc/MultiUserChatManager.java | 32 +++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/smack-extensions/src/main/java/org/jivesoftware/smackx/muc/MultiUserChatManager.java b/smack-extensions/src/main/java/org/jivesoftware/smackx/muc/MultiUserChatManager.java index 8c5a98ccd..33e36e76b 100644 --- a/smack-extensions/src/main/java/org/jivesoftware/smackx/muc/MultiUserChatManager.java +++ b/smack-extensions/src/main/java/org/jivesoftware/smackx/muc/MultiUserChatManager.java @@ -19,6 +19,7 @@ package org.jivesoftware.smackx.muc; import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.Collections; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; @@ -392,19 +393,46 @@ public final class MultiUserChatManager extends Manager { * @throws NotConnectedException * @throws InterruptedException * @throws NotAMucServiceException + * @deprecated use {@link #getRoomsHostedBy(DomainBareJid)} instead. */ + @Deprecated + // TODO: Remove in Smack 4.4. public List getHostedRooms(DomainBareJid serviceName) throws NoResponseException, XMPPErrorException, NotConnectedException, InterruptedException, NotAMucServiceException { + Map hostedRooms = getRoomsHostedBy(serviceName); + return new ArrayList<>(hostedRooms.values()); + } + + /** + * Returns a Map of HostedRooms where each HostedRoom has the XMPP address of the room and the room's name. + * Once discovered the rooms hosted by a chat service it is possible to discover more detailed room information or + * join the room. + * + * @param serviceName the service that is hosting the rooms to discover. + * @return a map from the room's address to its HostedRoom information. + * @throws XMPPErrorException + * @throws NoResponseException + * @throws NotConnectedException + * @throws InterruptedException + * @throws NotAMucServiceException + * @since 4.3.1 + */ + public Map getRoomsHostedBy(DomainBareJid serviceName) throws NoResponseException, XMPPErrorException, + NotConnectedException, InterruptedException, NotAMucServiceException { if (!providesMucService(serviceName)) { throw new NotAMucServiceException(serviceName); } ServiceDiscoveryManager discoManager = ServiceDiscoveryManager.getInstanceFor(connection()); DiscoverItems discoverItems = discoManager.discoverItems(serviceName); List items = discoverItems.getItems(); - List answer = new ArrayList(items.size()); + + Map answer = new HashMap<>(items.size()); for (DiscoverItems.Item item : items) { - answer.add(new HostedRoom(item)); + HostedRoom hostedRoom = new HostedRoom(item); + HostedRoom previousRoom = answer.put(hostedRoom.getJid(), hostedRoom); + assert previousRoom == null; } + return answer; } From 1e21ab763cfbfdb1925408fd4b9112a65ff6ded7 Mon Sep 17 00:00:00 2001 From: spslinger <3893604+spslinger@users.noreply.github.com> Date: Thu, 11 Oct 2018 12:29:32 +0200 Subject: [PATCH 07/11] Fix getPresence ConcurrentModificationException Fix for SMACK-841 Since Smack 4.2.4, the getPresencesInternal method in the Roster class can return a LruCache object, which is a LinkedHashMap with access order. This means that any access using get or getOrDefault will be a modification of the Map. If you loop over the keySet of the Map and there are more than one, the second call to get will throw a ConcurrentModificationException! Since the keys are only used here to obtain the corresponding values, the simplest solution is to just loop over the values instead. --- .../src/main/java/org/jivesoftware/smack/roster/Roster.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/smack-im/src/main/java/org/jivesoftware/smack/roster/Roster.java b/smack-im/src/main/java/org/jivesoftware/smack/roster/Roster.java index c4e7a0cf2..8e241151d 100644 --- a/smack-im/src/main/java/org/jivesoftware/smack/roster/Roster.java +++ b/smack-im/src/main/java/org/jivesoftware/smack/roster/Roster.java @@ -951,8 +951,7 @@ public final class Roster extends Manager { // This is used in case no available presence is found Presence unavailable = null; - for (Resourcepart resource : userPresences.keySet()) { - Presence p = userPresences.get(resource); + for (Presence p : userPresences.values()) { if (!p.isAvailable()) { unavailable = p; continue; From 89c9a418634dc0c9911b0645615c78f1a32ac793 Mon Sep 17 00:00:00 2001 From: Florian Schmaus Date: Sun, 14 Oct 2018 11:57:50 +0200 Subject: [PATCH 08/11] Bump MiniDNS to 0.3.3 --- version.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.gradle b/version.gradle index 683627553..846567106 100644 --- a/version.gradle +++ b/version.gradle @@ -3,7 +3,7 @@ allprojects { shortVersion = '4.3.1' isSnapshot = true jxmppVersion = '0.6.3' - miniDnsVersion = '0.3.2' + miniDnsVersion = '0.3.3' smackMinAndroidSdk = 9 } } From ec982f65e23fcfd0d0b61d2909128ba1c2c792f5 Mon Sep 17 00:00:00 2001 From: Florian Schmaus Date: Sun, 14 Oct 2018 12:07:51 +0200 Subject: [PATCH 09/11] Fix IndexOutOfBoundsException in FormField.getFirstValue() Fixes SMACK-838. --- .../java/org/jivesoftware/smackx/xdata/FormField.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/smack-extensions/src/main/java/org/jivesoftware/smackx/xdata/FormField.java b/smack-extensions/src/main/java/org/jivesoftware/smackx/xdata/FormField.java index b45c139bc..5ecf7ab59 100644 --- a/smack-extensions/src/main/java/org/jivesoftware/smackx/xdata/FormField.java +++ b/smack-extensions/src/main/java/org/jivesoftware/smackx/xdata/FormField.java @@ -261,12 +261,14 @@ public class FormField implements NamedElement { */ public String getFirstValue() { CharSequence firstValue; + synchronized (values) { + if (values.isEmpty()) { + return null; + } firstValue = values.get(0); } - if (firstValue == null) { - return null; - } + return firstValue.toString(); } From cf22371d3e3cb36d84e03a09396df9e1c9c10c1a Mon Sep 17 00:00:00 2001 From: Florian Schmaus Date: Sun, 14 Oct 2018 12:10:50 +0200 Subject: [PATCH 10/11] Catch IllegalArgumentException in XmlUtil clinit Fixes SMACK-833. --- .../src/main/java/org/jivesoftware/smack/util/XmlUtil.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/smack-core/src/main/java/org/jivesoftware/smack/util/XmlUtil.java b/smack-core/src/main/java/org/jivesoftware/smack/util/XmlUtil.java index 7fc081b43..b55297d6e 100644 --- a/smack-core/src/main/java/org/jivesoftware/smack/util/XmlUtil.java +++ b/smack-core/src/main/java/org/jivesoftware/smack/util/XmlUtil.java @@ -35,7 +35,11 @@ public class XmlUtil { private static final TransformerFactory transformerFactory = TransformerFactory.newInstance(); static { - transformerFactory.setAttribute("indent-number", 2); + try { + transformerFactory.setAttribute("indent-number", 2); + } catch (IllegalArgumentException e) { + LOGGER.log(Level.INFO, "XML TransformerFactory does not support indent-number attribute", e); + } } public static String prettyFormatXml(CharSequence xml) { From 6a43481320fb34caeac023cbfe59a63ba0128cd7 Mon Sep 17 00:00:00 2001 From: Florian Schmaus Date: Sun, 14 Oct 2018 12:53:11 +0200 Subject: [PATCH 11/11] Smack 4.3.1 --- resources/releasedocs/changelog.html | 18 ++++++++++++++++++ version.gradle | 2 +- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/resources/releasedocs/changelog.html b/resources/releasedocs/changelog.html index 4d51e4594..77450e326 100644 --- a/resources/releasedocs/changelog.html +++ b/resources/releasedocs/changelog.html @@ -141,6 +141,24 @@ hr {
+

4.3.1 -- 2018-10-14

+ +

Bug +

+
    +
  • [SMACK-833] - XMLUtil.prettyFormatXml() throws on some Android devices +
  • +
+ +

Improvement +

+
    +
  • [SMACK-829] - Disconnect BOSH client on shutdown +
  • +
  • [SMACK-838] - FormField.getFirstValue() throws IndexOutOfBoundsException if there are no values +
  • +
+

4.3.0 -- 2018-08-02

Bug diff --git a/version.gradle b/version.gradle index 846567106..62b47a3c8 100644 --- a/version.gradle +++ b/version.gradle @@ -1,7 +1,7 @@ allprojects { ext { shortVersion = '4.3.1' - isSnapshot = true + isSnapshot = false jxmppVersion = '0.6.3' miniDnsVersion = '0.3.3' smackMinAndroidSdk = 9