From 301519a2640627648941a30e8ee10a23209c4d97 Mon Sep 17 00:00:00 2001 From: Florian Schmaus Date: Wed, 12 Nov 2014 17:36:25 +0100 Subject: [PATCH] Fix END_DOCUMENT handling in XMPPTCPConnection The 'break' statement in the END_DOCUMENT case should break the parsing loop and not the switch/case within. Therefore we need to add a loop label on break on that label. --- .../org/jivesoftware/smack/tcp/XMPPTCPConnection.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) 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 0bf850f34..49a5cfc30 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 @@ -971,7 +971,7 @@ public class XMPPTCPConnection extends AbstractXMPPConnection { try { initalOpenStreamSend.checkIfSuccessOrWait(); int eventType = parser.getEventType(); - while (!done) { + outerloop: while (!done) { switch (eventType) { case XmlPullParser.START_TAG: final String name = parser.getName(); @@ -1162,10 +1162,10 @@ public class XMPPTCPConnection extends AbstractXMPPConnection { } break; case XmlPullParser.END_DOCUMENT: - // This should not happen, log a warning and disconnect() - LOGGER.warning("Got END_DOCUMENT, aborting parsing"); - disconnect(); - break; + LOGGER.warning("Got END_DOCUMENT, aborting parsing and calling instantShutdown"); + // Use instantShutdown() because we want to keep the stream state if possible + instantShutdown(); + break outerloop; } eventType = parser.next(); }