From e9b47d416438c0d0a5c9572db09d6be2a54969db Mon Sep 17 00:00:00 2001 From: Florian Schmaus Date: Thu, 29 May 2014 17:49:43 +0200 Subject: [PATCH 1/7] Smack 4.0.0-rc3-SNAPSHOT --- build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index d5d72acb5..8aa8e45a6 100644 --- a/build.gradle +++ b/build.gradle @@ -5,8 +5,8 @@ allprojects { apply plugin: 'eclipse' ext { - shortVersion = '4.0.0-rc2' - isSnapshot = false + shortVersion = '4.0.0-rc3' + isSnapshot = true gitCommit = getGitCommit() javadocAllDir = new File(buildDir, 'javadoc') documentationDir = new File(projectDir, 'documentation') From c3ae73472e5564886183c0008eb7214086fc31e2 Mon Sep 17 00:00:00 2001 From: Florian Schmaus Date: Thu, 29 May 2014 17:47:30 +0200 Subject: [PATCH 2/7] Do not filter groupchat messages without body for MessageListeners in MultiUserChat SMACK-568 --- .../java/org/jivesoftware/smackx/muc/MultiUserChat.java | 6 ------ 1 file changed, 6 deletions(-) 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 00143c3bc..37338c2e8 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 @@ -1950,12 +1950,6 @@ public class MultiUserChat { new AndFilter( FromMatchesFilter.create(room), new MessageTypeFilter(Message.Type.groupchat)); - messageFilter = new AndFilter(messageFilter, new PacketFilter() { - public boolean accept(Packet packet) { - Message msg = (Message) packet; - return msg.getBody() != null; - } - }); presenceFilter = new AndFilter(FromMatchesFilter.create(room), new PacketTypeFilter(Presence.class)); From f05f6bf901322b7a6f127ad2abf7dd44eb5bae72 Mon Sep 17 00:00:00 2001 From: Florian Schmaus Date: Fri, 30 May 2014 22:35:18 +0200 Subject: [PATCH 3/7] Fix lost sharedManfiest configuration in build.xml The configuration of ext.sharedManifest was no longer included (since 39c837190df002fad90be61f22c7ecadc072e263). --- build.gradle | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/build.gradle b/build.gradle index 8aa8e45a6..705fca58a 100644 --- a/build.gradle +++ b/build.gradle @@ -207,6 +207,12 @@ subprojects { } } +subprojects*.jar { + manifest { + from sharedManifest + } +} + def getGitCommit() { def dotGit = new File("$projectDir/.git") if (!dotGit.isDirectory()) return 'non-git build' From 0680553ef77a3cc53ff62a531a1897d085b08bc7 Mon Sep 17 00:00:00 2001 From: Florian Schmaus Date: Thu, 5 Jun 2014 14:49:56 +0200 Subject: [PATCH 4/7] Make getMulitipleRecipientServiceAddress() more robust the method should not throw if one of server's items fail to query. --- .../smackx/address/MultipleRecipientManager.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/smack-extensions/src/main/java/org/jivesoftware/smackx/address/MultipleRecipientManager.java b/smack-extensions/src/main/java/org/jivesoftware/smackx/address/MultipleRecipientManager.java index 7597f0493..c16fd9a56 100644 --- a/smack-extensions/src/main/java/org/jivesoftware/smackx/address/MultipleRecipientManager.java +++ b/smack-extensions/src/main/java/org/jivesoftware/smackx/address/MultipleRecipientManager.java @@ -22,6 +22,7 @@ import org.jivesoftware.smack.SmackException.NoResponseException; import org.jivesoftware.smack.SmackException.FeatureNotSupportedException; import org.jivesoftware.smack.SmackException.NotConnectedException; import org.jivesoftware.smack.XMPPConnection; +import org.jivesoftware.smack.XMPPException; import org.jivesoftware.smack.XMPPException.XMPPErrorException; import org.jivesoftware.smack.packet.Message; import org.jivesoftware.smack.packet.Packet; @@ -310,8 +311,14 @@ public class MultipleRecipientManager { DiscoverItems items = ServiceDiscoveryManager.getInstanceFor(connection).discoverItems( serviceName); for (DiscoverItems.Item item : items.getItems()) { - info = ServiceDiscoveryManager.getInstanceFor(connection).discoverInfo( - item.getEntityID(), item.getNode()); + try { + info = ServiceDiscoveryManager.getInstanceFor(connection).discoverInfo( + item.getEntityID(), item.getNode()); + } + catch (XMPPErrorException|NoResponseException e) { + // Don't throw this exceptions if one of the server's items fail + continue; + } if (info.containsFeature("http://jabber.org/protocol/address")) { serviceAddress = serviceName; break; From 36a86f2dfc2d360e4a6870b792106a2e3bd0470e Mon Sep 17 00:00:00 2001 From: Florian Schmaus Date: Thu, 5 Jun 2014 15:05:11 +0200 Subject: [PATCH 5/7] Improve getMultipleRecipientServiceAddress and MultipleRecipient (XEP-33) related code in general (e.g. use constants where possible). For getMultipleRecipientServiceAddress() this means that - the "synchronized (services)" block is removed - ServiceDiscoveryManager is only retrieved once --- .../address/MultipleRecipientManager.java | 66 +++++++++---------- .../address/packet/MultipleAddresses.java | 9 ++- 2 files changed, 39 insertions(+), 36 deletions(-) diff --git a/smack-extensions/src/main/java/org/jivesoftware/smackx/address/MultipleRecipientManager.java b/smack-extensions/src/main/java/org/jivesoftware/smackx/address/MultipleRecipientManager.java index c16fd9a56..d7819927f 100644 --- a/smack-extensions/src/main/java/org/jivesoftware/smackx/address/MultipleRecipientManager.java +++ b/smack-extensions/src/main/java/org/jivesoftware/smackx/address/MultipleRecipientManager.java @@ -22,7 +22,6 @@ import org.jivesoftware.smack.SmackException.NoResponseException; import org.jivesoftware.smack.SmackException.FeatureNotSupportedException; import org.jivesoftware.smack.SmackException.NotConnectedException; import org.jivesoftware.smack.XMPPConnection; -import org.jivesoftware.smack.XMPPException; import org.jivesoftware.smack.XMPPException.XMPPErrorException; import org.jivesoftware.smack.packet.Message; import org.jivesoftware.smack.packet.Packet; @@ -36,6 +35,8 @@ import org.jivesoftware.smackx.disco.packet.DiscoverItems; import java.util.ArrayList; import java.util.Iterator; import java.util.List; +import java.util.logging.Level; +import java.util.logging.Logger; /** * A MultipleRecipientManager allows to send packets to multiple recipients by making use of @@ -45,7 +46,9 @@ import java.util.List; * @author Gaston Dombiak */ public class MultipleRecipientManager { - + + private static final Logger LOGGER = Logger.getLogger(MultipleRecipientManager.class.getName()); + /** * Create a cache to hold the 100 most recently accessed elements for a period of * 24 hours. @@ -205,7 +208,7 @@ public class MultipleRecipientManager { */ public static MultipleRecipientInfo getMultipleRecipientInfo(Packet packet) { MultipleAddresses extension = (MultipleAddresses) packet - .getExtension("addresses", "http://jabber.org/protocol/address"); + .getExtension(MultipleAddresses.ELEMENT, MultipleAddresses.NAMESPACE); return extension == null ? null : new MultipleRecipientInfo(extension); } @@ -295,40 +298,37 @@ public class MultipleRecipientManager { String serviceName = connection.getServiceName(); String serviceAddress = (String) services.get(serviceName); if (serviceAddress == null) { - synchronized (services) { - serviceAddress = (String) services.get(serviceName); - if (serviceAddress == null) { - - // Send the disco packet to the server itself - DiscoverInfo info = ServiceDiscoveryManager.getInstanceFor(connection).discoverInfo( - serviceName); - // Check if the server supports JEP-33 - if (info.containsFeature("http://jabber.org/protocol/address")) { + ServiceDiscoveryManager sdm = ServiceDiscoveryManager.getInstanceFor(connection); + // Send the disco packet to the server itself + DiscoverInfo info = sdm.discoverInfo(serviceName); + // Check if the server supports XEP-33 + if (info.containsFeature(MultipleAddresses.NAMESPACE)) { + serviceAddress = serviceName; + } + else { + // Get the disco items and send the disco packet to each server item + DiscoverItems items = sdm.discoverItems(serviceName); + for (DiscoverItems.Item item : items.getItems()) { + try { + info = sdm.discoverInfo(item.getEntityID(), item.getNode()); + } + catch (XMPPErrorException|NoResponseException e) { + // Don't throw this exceptions if one of the server's items fail + LOGGER.log(Level.WARNING, + "Exception while discovering info of " + item.getEntityID() + + " node: " + item.getNode(), e); + continue; + } + if (info.containsFeature(MultipleAddresses.NAMESPACE)) { serviceAddress = serviceName; + break; } - else { - // Get the disco items and send the disco packet to each server item - DiscoverItems items = ServiceDiscoveryManager.getInstanceFor(connection).discoverItems( - serviceName); - for (DiscoverItems.Item item : items.getItems()) { - try { - info = ServiceDiscoveryManager.getInstanceFor(connection).discoverInfo( - item.getEntityID(), item.getNode()); - } - catch (XMPPErrorException|NoResponseException e) { - // Don't throw this exceptions if one of the server's items fail - continue; - } - if (info.containsFeature("http://jabber.org/protocol/address")) { - serviceAddress = serviceName; - break; - } - } - } - // Cache the discovered information - services.put(serviceName, serviceAddress == null ? "" : serviceAddress); } } + // Use the empty string to indicate that no service is known for this connection + serviceAddress = serviceAddress == null ? "" : serviceAddress; + // Cache the discovered information + services.put(serviceName, serviceAddress); } return "".equals(serviceAddress) ? null : serviceAddress; diff --git a/smack-extensions/src/main/java/org/jivesoftware/smackx/address/packet/MultipleAddresses.java b/smack-extensions/src/main/java/org/jivesoftware/smackx/address/packet/MultipleAddresses.java index ea265985f..04362d024 100644 --- a/smack-extensions/src/main/java/org/jivesoftware/smackx/address/packet/MultipleAddresses.java +++ b/smack-extensions/src/main/java/org/jivesoftware/smackx/address/packet/MultipleAddresses.java @@ -30,6 +30,9 @@ import java.util.List; */ public class MultipleAddresses implements PacketExtension { + public static final String NAMESPACE = "http://jabber.org/protocol/address"; + public static final String ELEMENT = "addresses"; + public static final String BCC = "bcc"; public static final String CC = "cc"; public static final String NO_REPLY = "noreply"; @@ -94,17 +97,17 @@ public class MultipleAddresses implements PacketExtension { } public String getElementName() { - return "addresses"; + return ELEMENT; } public String getNamespace() { - return "http://jabber.org/protocol/address"; + return NAMESPACE; } public String toXML() { StringBuilder buf = new StringBuilder(); buf.append("<").append(getElementName()); - buf.append(" xmlns=\"").append(getNamespace()).append("\">"); + buf.append(" xmlns=\"").append(NAMESPACE).append("\">"); // Loop through all the addresses and append them to the string buffer for (Iterator
i = addresses.iterator(); i.hasNext();) { Address address = (Address) i.next(); From 91fa7a8219027ebc5d94009e3ea9c6548337a713 Mon Sep 17 00:00:00 2001 From: Florian Schmaus Date: Thu, 5 Jun 2014 20:52:10 +0200 Subject: [PATCH 6/7] Add missing mechanism-too-weak SASL Error --- .../src/main/java/org/jivesoftware/smack/sasl/SASLError.java | 1 + 1 file changed, 1 insertion(+) diff --git a/smack-core/src/main/java/org/jivesoftware/smack/sasl/SASLError.java b/smack-core/src/main/java/org/jivesoftware/smack/sasl/SASLError.java index b066ec541..ef8b72e16 100644 --- a/smack-core/src/main/java/org/jivesoftware/smack/sasl/SASLError.java +++ b/smack-core/src/main/java/org/jivesoftware/smack/sasl/SASLError.java @@ -29,6 +29,7 @@ public enum SASLError { invalid_authzid, invalid_mechanism, malformed_request, + mechanism_too_weak, not_authorized, temporary_auth_failure; From 120be69a30785407ee446f0529af2ae34c0d0cb0 Mon Sep 17 00:00:00 2001 From: Florian Schmaus Date: Sat, 7 Jun 2014 12:18:59 +0200 Subject: [PATCH 7/7] Smack 4.0.0 --- build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index 705fca58a..8e86ec30d 100644 --- a/build.gradle +++ b/build.gradle @@ -5,8 +5,8 @@ allprojects { apply plugin: 'eclipse' ext { - shortVersion = '4.0.0-rc3' - isSnapshot = true + shortVersion = '4.0.0' + isSnapshot = false gitCommit = getGitCommit() javadocAllDir = new File(buildDir, 'javadoc') documentationDir = new File(projectDir, 'documentation')