diff options
author | 2018-08-05 22:00:31 +0300 | |
---|---|---|
committer | 2018-08-05 22:00:31 +0300 | |
commit | 830daff160930fa185d5b8ffdc64516d1ef03218 (patch) | |
tree | f7c2ae2d98f34d33b4aa37301d3fdbaf05a21f04 /juick-server/src/main/java/com/juick/server/xmpp/router/StreamError.java | |
parent | ff58300004b2dfa283650bda33b29f11e2821173 (diff) |
XMPP: fix stream:error parser
Diffstat (limited to 'juick-server/src/main/java/com/juick/server/xmpp/router/StreamError.java')
-rw-r--r-- | juick-server/src/main/java/com/juick/server/xmpp/router/StreamError.java | 27 |
1 files changed, 20 insertions, 7 deletions
diff --git a/juick-server/src/main/java/com/juick/server/xmpp/router/StreamError.java b/juick-server/src/main/java/com/juick/server/xmpp/router/StreamError.java index 7eacfc94..f731f039 100644 --- a/juick-server/src/main/java/com/juick/server/xmpp/router/StreamError.java +++ b/juick-server/src/main/java/com/juick/server/xmpp/router/StreamError.java @@ -12,6 +12,7 @@ import java.io.IOException; public class StreamError { private String condition; + private String text; public StreamError() {} @@ -21,13 +22,21 @@ public class StreamError { public static StreamError parse(XmlPullParser parser) throws IOException, XmlPullParserException { StreamError streamError = new StreamError(); - while (parser.next() == XmlPullParser.START_TAG) { - final String tag = parser.getName(); - final String xmlns = parser.getNamespace(); - if (xmlns.equals(StreamNamespaces.NS_XMPP_STREAMS)) { - streamError.condition = tag; - } else { - XmlUtils.skip(parser); + final int initial = parser.getDepth(); + while (true) { + int eventType = parser.next(); + if (eventType == XmlPullParser.START_TAG && parser.getDepth() == initial + 1) { + final String tag = parser.getName(); + final String xmlns = parser.getNamespace(); + if (tag.equals("text") && xmlns.equals(StreamNamespaces.NS_XMPP_STREAMS)) { + streamError.text = XmlUtils.getTagText(parser); + } else if (xmlns.equals(StreamNamespaces.NS_XMPP_STREAMS)) { + streamError.condition = tag; + } else { + XmlUtils.skip(parser); + } + } else if (eventType == XmlPullParser.END_TAG && parser.getDepth() == initial) { + break; } } return streamError; @@ -41,4 +50,8 @@ public class StreamError { public String toString() { return String.format("<stream:error><%s xmlns='%s'/></stream:error>", condition, StreamNamespaces.NS_XMPP_STREAMS); } + + public String getText() { + return text; + } } |