diff options
author | Daniel Gultsch <daniel@gultsch.de> | 2016-07-14 17:05:43 +0200 |
---|---|---|
committer | Daniel Gultsch <daniel@gultsch.de> | 2016-07-14 17:05:43 +0200 |
commit | 1db85e582e1a4205138f77a82d85f0508f45a35b (patch) | |
tree | 41f0006247f98d8eea64129872b702dc872e9183 /src/main/java/eu/siacs/conversations/xmpp | |
parent | 2803d342e1f008217aa6f003d917423b6e6e106b (diff) |
add more error states for stream errors
Diffstat (limited to 'src/main/java/eu/siacs/conversations/xmpp')
-rw-r--r-- | src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java | 28 |
1 files changed, 25 insertions, 3 deletions
diff --git a/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java b/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java index a256e019..ba1482fe 100644 --- a/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java +++ b/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java @@ -361,6 +361,12 @@ public class XmppConnection implements Runnable { this.changeStatus(Account.State.SERVER_NOT_FOUND); } catch (final SocksSocketFactory.SocksProxyNotFoundException e) { this.changeStatus(Account.State.TOR_NOT_AVAILABLE); + } catch(final StreamErrorHostUnknown e) { + this.changeStatus(Account.State.HOST_UNKNOWN); + } catch(final StreamErrorPolicyViolation e) { + this.changeStatus(Account.State.POLICY_VIOLATION); + } catch(final StreamError e) { + this.changeStatus(Account.State.STREAM_ERROR); } catch (final IOException | XmlPullParserException | NoSuchAlgorithmException e) { Log.d(Config.LOGTAG, account.getJid().toBareJid().toString() + ": " + e.getMessage()); this.changeStatus(Account.State.OFFLINE); @@ -1176,17 +1182,21 @@ public class XmppConnection implements Runnable { if (streamError == null) { return; } - Log.d(Config.LOGTAG,account.getJid().toBareJid()+": stream error "+streamError.toString()); if (streamError.hasChild("conflict")) { final String resource = account.getResource().split("\\.")[0]; account.setResource(resource + "." + nextRandomId()); Log.d(Config.LOGTAG, account.getJid().toBareJid() + ": switching resource due to conflict (" + account.getResource() + ")"); + throw new IOException(); } else if (streamError.hasChild("host-unknown")) { - changeStatus(Account.State.HOST_UNKNOWN); + throw new StreamErrorHostUnknown(); + } else if (streamError.hasChild("policy-violation")) { + throw new StreamErrorPolicyViolation(); + } else { + Log.d(Config.LOGTAG,account.getJid().toBareJid()+": stream error "+streamError.toString()); + throw new StreamError(); } - forceCloseSocket(); } private void sendStartStream() throws IOException { @@ -1485,6 +1495,18 @@ public class XmppConnection implements Runnable { } + private class StreamErrorHostUnknown extends StreamError { + + } + + private class StreamErrorPolicyViolation extends StreamError { + + } + + private class StreamError extends IOException { + + } + public enum Identity { FACEBOOK, SLACK, |