diff --git a/smack-core/src/main/java/org/jivesoftware/smack/AbstractXMPPConnection.java b/smack-core/src/main/java/org/jivesoftware/smack/AbstractXMPPConnection.java index e22ecb289..225b8d66f 100644 --- a/smack-core/src/main/java/org/jivesoftware/smack/AbstractXMPPConnection.java +++ b/smack-core/src/main/java/org/jivesoftware/smack/AbstractXMPPConnection.java @@ -235,6 +235,8 @@ public abstract class AbstractXMPPConnection implements XMPPConnection { private XmlEnvironment incomingStreamXmlEnvironment; + protected XmlEnvironment outgoingStreamXmlEnvironment; + final Map nonzaCallbacks = new HashMap<>(); protected final Lock connectionLock = new ReentrantLock(); @@ -2017,7 +2019,13 @@ public abstract class AbstractXMPPConnection implements XMPPConnection { from = XmppStringUtils.completeJidFrom(localpart, to); } String id = getStreamId(); - sendNonza(new StreamOpen(to, from, id, config.getXmlLang(), StreamOpen.StreamContentNamespace.client)); + + StreamOpen streamOpen = new StreamOpen(to, from, id, config.getXmlLang(), StreamOpen.StreamContentNamespace.client); + sendNonza(streamOpen); + + XmlEnvironment.Builder xmlEnvironmentBuilder = XmlEnvironment.builder(); + xmlEnvironmentBuilder.with(streamOpen); + outgoingStreamXmlEnvironment = xmlEnvironmentBuilder.build(); } public static final class SmackTlsContext { diff --git a/smack-core/src/main/java/org/jivesoftware/smack/packet/XmlEnvironment.java b/smack-core/src/main/java/org/jivesoftware/smack/packet/XmlEnvironment.java index 4abc3eb06..810d8f75f 100644 --- a/smack-core/src/main/java/org/jivesoftware/smack/packet/XmlEnvironment.java +++ b/smack-core/src/main/java/org/jivesoftware/smack/packet/XmlEnvironment.java @@ -163,6 +163,12 @@ public class XmlEnvironment { return this; } + public Builder with(StreamOpen streamOpen) { + withNamespace(streamOpen.getNamespace()); + withLanguage(streamOpen.getLanguage()); + return this; + } + public XmlEnvironment build() { return new XmlEnvironment(this); } diff --git a/smack-core/src/main/java/org/jivesoftware/smack/util/XmlStringBuilder.java b/smack-core/src/main/java/org/jivesoftware/smack/util/XmlStringBuilder.java index 427fc2f94..28890b368 100644 --- a/smack-core/src/main/java/org/jivesoftware/smack/util/XmlStringBuilder.java +++ b/smack-core/src/main/java/org/jivesoftware/smack/util/XmlStringBuilder.java @@ -624,14 +624,10 @@ public class XmlStringBuilder implements Appendable, CharSequence, Element { * XmlStringBuilder contents. * * @param writer TODO javadoc me please - * @param enclosingNamespace the enclosing XML namespace. + * @param enclosingXmlEnvironment the enclosing XML environment. * @throws IOException if an I/O error occured. */ - public void write(Writer writer, String enclosingNamespace) throws IOException { - XmlEnvironment enclosingXmlEnvironment = XmlEnvironment.builder() - .withNamespace(enclosingNamespace) - .build(); - appendXmlTo(writer, enclosingXmlEnvironment); + public void write(Writer writer, XmlEnvironment enclosingXmlEnvironment) throws IOException { try { appendXmlTo(csq -> { try { diff --git a/smack-tcp/src/main/java/org/jivesoftware/smack/tcp/XMPPTCPConnection.java b/smack-tcp/src/main/java/org/jivesoftware/smack/tcp/XMPPTCPConnection.java index 9eaa606bd..ed250eb65 100644 --- a/smack-tcp/src/main/java/org/jivesoftware/smack/tcp/XMPPTCPConnection.java +++ b/smack-tcp/src/main/java/org/jivesoftware/smack/tcp/XMPPTCPConnection.java @@ -87,7 +87,6 @@ import org.jivesoftware.smack.packet.Presence; import org.jivesoftware.smack.packet.Stanza; import org.jivesoftware.smack.packet.StartTls; import org.jivesoftware.smack.packet.StreamError; -import org.jivesoftware.smack.packet.StreamOpen; import org.jivesoftware.smack.proxy.ProxyInfo; import org.jivesoftware.smack.sasl.packet.SaslStreamElements; import org.jivesoftware.smack.sasl.packet.SaslStreamElements.Challenge; @@ -1347,9 +1346,9 @@ public class XMPPTCPConnection extends AbstractXMPPConnection { } maybeAddToUnacknowledgedStanzas(packet); - CharSequence elementXml = element.toXML(StreamOpen.CLIENT_NAMESPACE); + CharSequence elementXml = element.toXML(outgoingStreamXmlEnvironment); if (elementXml instanceof XmlStringBuilder) { - ((XmlStringBuilder) elementXml).write(writer, StreamOpen.CLIENT_NAMESPACE); + ((XmlStringBuilder) elementXml).write(writer, outgoingStreamXmlEnvironment); } else { writer.write(elementXml.toString()); diff --git a/smack-tcp/src/main/java/org/jivesoftware/smack/tcp/XmppNioTcpConnection.java b/smack-tcp/src/main/java/org/jivesoftware/smack/tcp/XmppNioTcpConnection.java index ef9a64984..94d4abf49 100644 --- a/smack-tcp/src/main/java/org/jivesoftware/smack/tcp/XmppNioTcpConnection.java +++ b/smack-tcp/src/main/java/org/jivesoftware/smack/tcp/XmppNioTcpConnection.java @@ -82,7 +82,6 @@ import org.jivesoftware.smack.packet.StreamOpen; import org.jivesoftware.smack.packet.TlsFailure; import org.jivesoftware.smack.packet.TlsProceed; import org.jivesoftware.smack.packet.TopLevelStreamElement; -import org.jivesoftware.smack.packet.XmlEnvironment; import org.jivesoftware.smack.sasl.SASLErrorException; import org.jivesoftware.smack.util.ArrayBlockingQueueWithShutdown; import org.jivesoftware.smack.util.Async; @@ -510,7 +509,7 @@ public class XmppNioTcpConnection extends AbstractXmppNioConnection { CharSequence nextCharSequence = currentlyOutgonigTopLevelStreamElement.toXML(StreamOpen.CLIENT_NAMESPACE); if (nextCharSequence instanceof XmlStringBuilder) { XmlStringBuilder xmlStringBuilder = (XmlStringBuilder) nextCharSequence; - outgoingCharSequenceIterator = xmlStringBuilder.toList(XmlEnvironment.EMPTY).iterator(); + outgoingCharSequenceIterator = xmlStringBuilder.toList(outgoingStreamXmlEnvironment).iterator(); } else { outgoingCharSequenceIterator = Collections.singletonList(nextCharSequence).iterator(); }