diff --git a/src/main/java/eu/siacs/conversations/entities/Account.java b/src/main/java/eu/siacs/conversations/entities/Account.java index 1a7798b2d829a288db4b75885f48de00e2f1de02..c6b655d0aa307bb4b0b3bf7f33afb27c70c75901 100644 --- a/src/main/java/eu/siacs/conversations/entities/Account.java +++ b/src/main/java/eu/siacs/conversations/entities/Account.java @@ -94,7 +94,8 @@ public class Account extends AbstractEntity { SECURITY_ERROR(true), INCOMPATIBLE_SERVER(true), TOR_NOT_AVAILABLE(true), - BIND_FAILURE(true); + BIND_FAILURE(true), + HOST_UNKNOWN(true); private final boolean isError; @@ -142,6 +143,8 @@ public class Account extends AbstractEntity { return R.string.account_status_tor_unavailable; case BIND_FAILURE: return R.string.account_status_bind_failure; + case HOST_UNKNOWN: + return R.string.account_status_host_unknown; default: return R.string.account_status_unknown; } diff --git a/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java b/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java index 772bfd3dae9014791e744e1aa3b605abf1b4b6a7..57dc4ebf32aa3343e903d5b057062b068cbd3a2d 100644 --- a/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java +++ b/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java @@ -880,6 +880,7 @@ public class XmppConnection implements Runnable { } public void resetEverything() { + resetAttemptCount(); resetStreamId(); clearIqCallbacks(); mStanzaQueue.clear(); @@ -1173,15 +1174,20 @@ public class XmppConnection implements Runnable { private void processStreamError(final Tag currentTag) throws XmlPullParserException, IOException { final Element streamError = tagReader.readElement(currentTag); - if (streamError != null && streamError.hasChild("conflict")) { + 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() + ")"); - } else if (streamError != null) { - Log.d(Config.LOGTAG,account.getJid().toBareJid()+": stream error "+streamError.toString()); + } else if (streamError.hasChild("host-unknown")) { + changeStatus(Account.State.HOST_UNKNOWN); } + forceCloseSocket(); } private void sendStartStream() throws IOException { diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index d11e897c88430df4be2aad224203ea7b7d4cfdbd..a5e37e9bf9ed27b30d6175bf2cbee5f5506395f6 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -542,6 +542,7 @@ Show received messages as black text on a white background Tor network unavailable Bind failure + Domain not recognized Broken Presence Away when screen is off