aboutsummaryrefslogtreecommitdiffstats
path: root/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java')
-rw-r--r--src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java17
1 files changed, 16 insertions, 1 deletions
diff --git a/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java b/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java
index 89ffa05d..6e36a546 100644
--- a/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java
+++ b/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java
@@ -384,6 +384,8 @@ public class XmppConnection implements Runnable {
this.changeStatus(Account.State.SECURITY_ERROR);
} catch (final UnauthorizedException e) {
this.changeStatus(Account.State.UNAUTHORIZED);
+ } catch (final PaymentRequiredException e) {
+ this.changeStatus(Account.State.PAYMENT_REQUIRED);
} catch (final UnknownHostException | ConnectException e) {
this.changeStatus(Account.State.SERVER_NOT_FOUND);
} catch (final SocksSocketFactory.SocksProxyNotFoundException e) {
@@ -505,7 +507,16 @@ public class XmppConnection implements Runnable {
}
break;
} else if (nextTag.isStart("failure")) {
- throw new UnauthorizedException();
+ final Element failure = tagReader.readElement(nextTag);
+ final String accountDisabled = failure.findChildContent("account-disabled");
+ if (accountDisabled != null
+ && accountDisabled.contains("renew")
+ && Config.MAGIC_CREATE_DOMAIN != null
+ && accountDisabled.contains(Config.MAGIC_CREATE_DOMAIN)) {
+ throw new PaymentRequiredException();
+ } else {
+ throw new UnauthorizedException();
+ }
} else if (nextTag.isStart("challenge")) {
final String challenge = tagReader.readElement(nextTag).getContent();
final Element response = new Element("response");
@@ -1535,6 +1546,10 @@ public class XmppConnection implements Runnable {
}
+ private class PaymentRequiredException extends IOException {
+
+ }
+
public enum Identity {
FACEBOOK,
SLACK,