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..ded42c327 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
@@ -16,6 +16,7 @@
*/
package org.jivesoftware.smack.websocket.impl;
+import java.io.IOException;
import java.util.logging.Logger;
import javax.net.ssl.SSLSession;
@@ -25,8 +26,11 @@ import org.jivesoftware.smack.c2s.internal.ModularXmppClientToServerConnectionIn
import org.jivesoftware.smack.debugger.SmackDebugger;
import org.jivesoftware.smack.packet.TopLevelStreamElement;
import org.jivesoftware.smack.packet.XmlEnvironment;
+import org.jivesoftware.smack.util.PacketParserUtils;
import org.jivesoftware.smack.websocket.WebSocketException;
import org.jivesoftware.smack.websocket.rce.WebSocketRemoteConnectionEndpoint;
+import org.jivesoftware.smack.xml.XmlPullParser;
+import org.jivesoftware.smack.xml.XmlPullParserException;
public abstract class AbstractWebSocket {
@@ -99,24 +103,26 @@ public abstract class AbstractWebSocket {
return streamElement;
}
- // TODO: Make this method less fragile, e.g. by parsing a little bit into the element to ensure that this is an
- // element qualified by the correct namespace.
static boolean isOpenElement(String text) {
- if (text.startsWith(" element qualified by the correct namespace. The fragility comes due the fact that the element could,
- // inter alia, be specified as
- //
static boolean isCloseElement(String text) {
- if (text.startsWith("")) {
- return true;
+ XmlPullParser parser;
+ try {
+ parser = PacketParserUtils.getParserFor(text);
+ parser.nextTag();
+ return "close".equals(parser.getName()) && "urn:ietf:params:xml:ns:xmpp-framing".equals(parser.getNamespace());
+ } catch (XmlPullParserException | IOException e) {
+ return false;
}
- return false;
}
protected void onWebSocketFailure(Throwable throwable) {