diff --git a/src/main/java/eu/siacs/conversations/xml/Namespace.java b/src/main/java/eu/siacs/conversations/xml/Namespace.java index def58c4d7..0bcd9d6e0 100644 --- a/src/main/java/eu/siacs/conversations/xml/Namespace.java +++ b/src/main/java/eu/siacs/conversations/xml/Namespace.java @@ -11,4 +11,6 @@ public final class Namespace { public static final String MAM_LEGACY = "urn:xmpp:mam:0"; public static final String IDLE = "urn:xmpp:idle:1"; public static final String OOB = "jabber:x:oob"; + public static final String SASL = "urn:ietf:params:xml:ns:xmpp-sasl"; + public static final String TLS = "urn:ietf:params:xml:ns:xmpp-tls"; } diff --git a/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java b/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java index 671ebf10e..c7953f54e 100644 --- a/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java +++ b/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java @@ -531,21 +531,25 @@ public class XmppConnection implements Runnable { break; } else if (nextTag.isStart("failure")) { final Element failure = tagReader.readElement(nextTag); - final String text = failure.findChildContent("text"); - if (failure.hasChild("account-disabled") - && text != null - && text.contains("renew") - && Config.MAGIC_CREATE_DOMAIN != null - && text.contains(Config.MAGIC_CREATE_DOMAIN)) { - throw new StateChangingException(Account.State.PAYMENT_REQUIRED); + if (Namespace.SASL.equals(failure.getNamespace())) { + final String text = failure.findChildContent("text"); + if (failure.hasChild("account-disabled") + && text != null + && text.contains("renew") + && Config.MAGIC_CREATE_DOMAIN != null + && text.contains(Config.MAGIC_CREATE_DOMAIN)) { + throw new StateChangingException(Account.State.PAYMENT_REQUIRED); + } else { + throw new StateChangingException(Account.State.UNAUTHORIZED); + } + } else if (Namespace.TLS.equals(failure.getNamespace())) { + throw new StateChangingException(Account.State.TLS_ERROR); } else { - throw new StateChangingException(Account.State.UNAUTHORIZED); + throw new StateChangingException(Account.State.INCOMPATIBLE_SERVER); } } else if (nextTag.isStart("challenge")) { final String challenge = tagReader.readElement(nextTag).getContent(); - final Element response = new Element("response"); - response.setAttribute("xmlns", - "urn:ietf:params:xml:ns:xmpp-sasl"); + final Element response = new Element("response",Namespace.SASL); try { response.setContent(saslMechanism.getResponse(challenge)); } catch (final SaslMechanism.AuthenticationException e) { @@ -781,7 +785,7 @@ public class XmppConnection implements Runnable { private void sendStartTLS() throws IOException { final Tag startTLS = Tag.empty("starttls"); - startTLS.setAttribute("xmlns", "urn:ietf:params:xml:ns:xmpp-tls"); + startTLS.setAttribute("xmlns", Namespace.TLS); tagWriter.writeTag(startTLS); } @@ -864,8 +868,7 @@ public class XmppConnection implements Runnable { private void authenticate() throws IOException { final List mechanisms = extractMechanisms(streamFeatures .findChild("mechanisms")); - final Element auth = new Element("auth"); - auth.setAttribute("xmlns", "urn:ietf:params:xml:ns:xmpp-sasl"); + final Element auth = new Element("auth",Namespace.SASL); if (mechanisms.contains("EXTERNAL") && account.getPrivateKeyAlias() != null) { saslMechanism = new External(tagWriter, account, mXmppConnectionService.getRNG()); } else if (mechanisms.contains("SCRAM-SHA-256")) {