From 6244a213c811115f3036ad44d9a14b74e43ace21 Mon Sep 17 00:00:00 2001 From: Guus der Kinderen Date: Fri, 27 Oct 2023 13:27:29 +0200 Subject: [PATCH] [websocket] Improve handling of expanded 'open' element Prior to this fix, Smack requires the 'open' element send on a websocket connection to be collapsed. With the change in this commit, an expanded (eg: ``) element can also be used. fixes SMACK-935 --- .../smack/websocket/impl/AbstractWebSocket.java | 4 +++- .../smack/websocket/impl/AbstractWebSocketTest.java | 6 ++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/smack-websocket/src/main/java/org/jivesoftware/smack/websocket/impl/AbstractWebSocket.java b/smack-websocket/src/main/java/org/jivesoftware/smack/websocket/impl/AbstractWebSocket.java index bbe4ac749..05cc7ac4b 100644 --- a/smack-websocket/src/main/java/org/jivesoftware/smack/websocket/impl/AbstractWebSocket.java +++ b/smack-websocket/src/main/java/org/jivesoftware/smack/websocket/impl/AbstractWebSocket.java @@ -95,7 +95,9 @@ public abstract class AbstractWebSocket { static String getStreamFromOpenElement(String openElement) { String streamElement = openElement.replaceFirst("\\A\\s*\\z", " xmlns:stream='http://etherx.jabber.org/streams'>"); + .replaceFirst("/>\\s*\\z", " xmlns:stream='http://etherx.jabber.org/streams'>") + .replaceFirst(">\\s*\\z", " xmlns:stream='http://etherx.jabber.org/streams'>"); + return streamElement; } diff --git a/smack-websocket/src/test/java/org/jivesoftware/smack/websocket/impl/AbstractWebSocketTest.java b/smack-websocket/src/test/java/org/jivesoftware/smack/websocket/impl/AbstractWebSocketTest.java index 23f274616..5280efe7b 100644 --- a/smack-websocket/src/test/java/org/jivesoftware/smack/websocket/impl/AbstractWebSocketTest.java +++ b/smack-websocket/src/test/java/org/jivesoftware/smack/websocket/impl/AbstractWebSocketTest.java @@ -24,18 +24,20 @@ import org.junit.jupiter.api.Test; public final class AbstractWebSocketTest { private static final String OPEN_ELEMENT = ""; + private static final String OPEN_ELEMENT_EXPANDED = ""; private static final String OPEN_STREAM = ""; private static final String CLOSE_ELEMENT = ""; @Test public void getStreamFromOpenElementTest() { - String generatedOpenStream = AbstractWebSocket.getStreamFromOpenElement(OPEN_ELEMENT); - assertEquals(generatedOpenStream, OPEN_STREAM); + assertEquals(OPEN_STREAM, AbstractWebSocket.getStreamFromOpenElement(OPEN_ELEMENT)); + assertEquals(OPEN_STREAM, AbstractWebSocket.getStreamFromOpenElement(OPEN_ELEMENT_EXPANDED)); } @Test public void isOpenElementTest() { assertTrue(AbstractWebSocket.isOpenElement(OPEN_ELEMENT)); + assertTrue(AbstractWebSocket.isOpenElement(OPEN_ELEMENT_EXPANDED)); assertFalse(AbstractWebSocket.isOpenElement(OPEN_STREAM)); }