From 69f387b3441e77e1170910e4a4564ce04f5dfc69 Mon Sep 17 00:00:00 2001 From: Florian Schmaus Date: Mon, 10 Nov 2014 12:07:32 +0100 Subject: [PATCH] Don't use extending stanza addressing if not strictly necessary --- .../smackx/address/MultipleRecipientManager.java | 10 ++++++++++ 1 file changed, 10 insertions(+) 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 a5d1bebf0..e73920e63 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 @@ -25,6 +25,7 @@ import org.jivesoftware.smack.XMPPConnection; import org.jivesoftware.smack.XMPPException.XMPPErrorException; import org.jivesoftware.smack.packet.Message; import org.jivesoftware.smack.packet.Packet; +import org.jivesoftware.smack.util.StringUtils; import org.jivesoftware.smackx.address.packet.MultipleAddresses; import org.jivesoftware.smackx.disco.ServiceDiscoveryManager; import org.jxmpp.util.XmppStringUtils; @@ -95,6 +96,15 @@ public class MultipleRecipientManager { */ public static void send(XMPPConnection connection, Packet packet, Collection to, Collection cc, Collection bcc, String replyTo, String replyRoom, boolean noReply) throws NoResponseException, XMPPErrorException, FeatureNotSupportedException, NotConnectedException { + // Check if *only* 'to' is set and contains just *one* entry, in this case extended stanzas addressing is not + // required at all and we can send it just as normal stanza without needing to add the extension element + if (to != null && to.size() == 1 && (cc == null || cc.isEmpty()) && (bcc == null || bcc.isEmpty()) && !noReply + && StringUtils.isNullOrEmpty(replyTo) && StringUtils.isNullOrEmpty(replyRoom)) { + String toJid = to.iterator().next(); + packet.setTo(toJid); + connection.sendPacket(packet); + return; + } String serviceAddress = getMultipleRecipienServiceAddress(connection); if (serviceAddress != null) { // Send packet to target users using multiple recipient service provided by the server