no automatic reconnect on registration failures

This commit is contained in:
Daniel Gultsch 2017-08-12 22:17:04 +02:00
parent d6193aa586
commit 097fe3e1b6
2 changed files with 38 additions and 28 deletions

View file

@ -109,45 +109,55 @@ public class Account extends AbstractEntity {
} }
public enum State { public enum State {
DISABLED, DISABLED(false,false),
OFFLINE, OFFLINE(false),
CONNECTING, CONNECTING(false),
ONLINE, ONLINE(false),
NO_INTERNET, NO_INTERNET(false),
UNAUTHORIZED(true), UNAUTHORIZED,
SERVER_NOT_FOUND(true), SERVER_NOT_FOUND,
REGISTRATION_FAILED(true), REGISTRATION_SUCCESSFUL(false),
REGISTRATION_WEB(true), REGISTRATION_FAILED(true,false),
REGISTRATION_CONFLICT(true), REGISTRATION_WEB(true,false),
REGISTRATION_SUCCESSFUL, REGISTRATION_CONFLICT(true,false),
REGISTRATION_NOT_SUPPORTED(true), REGISTRATION_NOT_SUPPORTED(true,false),
TLS_ERROR(true), REGISTRATION_PLEASE_WAIT(true,false),
INCOMPATIBLE_SERVER(true), REGISTRATION_PASSWORD_TOO_WEAK(true,false),
TOR_NOT_AVAILABLE(true), TLS_ERROR,
DOWNGRADE_ATTACK(true), INCOMPATIBLE_SERVER,
SESSION_FAILURE(true), TOR_NOT_AVAILABLE,
BIND_FAILURE(true), DOWNGRADE_ATTACK,
HOST_UNKNOWN(true), SESSION_FAILURE,
REGISTRATION_PLEASE_WAIT(true), BIND_FAILURE,
STREAM_ERROR(true), HOST_UNKNOWN,
POLICY_VIOLATION(true), STREAM_ERROR,
REGISTRATION_PASSWORD_TOO_WEAK(true), POLICY_VIOLATION,
PAYMENT_REQUIRED(true), PAYMENT_REQUIRED,
MISSING_INTERNET_PERMISSION(true), MISSING_INTERNET_PERMISSION(false),
NETWORK_IS_UNREACHABLE(false); NETWORK_IS_UNREACHABLE(false);
private final boolean isError; private final boolean isError;
private final boolean attemptReconnect;
public boolean isError() { public boolean isError() {
return this.isError; return this.isError;
} }
public boolean isAttemptReconnect() {
return this.attemptReconnect;
}
State(final boolean isError) { State(final boolean isError) {
this(isError,true);
}
State(final boolean isError, final boolean reconnect) {
this.isError = isError; this.isError = isError;
this.attemptReconnect = reconnect;
} }
State() { State() {
this(false); this(true,true);
} }
public int getReadableId() { public int getReadableId() {

View file

@ -375,7 +375,7 @@ public class XmppConnectionService extends Service {
reconnectAccount(account, true, false); reconnectAccount(account, true, false);
} else if (account.getStatus() != Account.State.CONNECTING && account.getStatus() != Account.State.NO_INTERNET) { } else if (account.getStatus() != Account.State.CONNECTING && account.getStatus() != Account.State.NO_INTERNET) {
resetSendingToWaiting(account); resetSendingToWaiting(account);
if (connection != null) { if (connection != null && account.getStatus().isAttemptReconnect()) {
final int next = connection.getTimeToNextAttempt(); final int next = connection.getTimeToNextAttempt();
final boolean lowPingTimeoutMode = isInLowPingTimeoutMode(account); final boolean lowPingTimeoutMode = isInLowPingTimeoutMode(account);
if (next <= 0) { if (next <= 0) {
@ -749,7 +749,7 @@ public class XmppConnectionService extends Service {
private boolean processAccountState(Account account, boolean interactive, boolean isUiAction, boolean isAccountPushed, HashSet<Account> pingCandidates) { private boolean processAccountState(Account account, boolean interactive, boolean isUiAction, boolean isAccountPushed, HashSet<Account> pingCandidates) {
boolean pingNow = false; boolean pingNow = false;
if (!account.isOptionSet(Account.OPTION_DISABLED)) { if (account.getStatus().isAttemptReconnect()) {
if (!hasInternetConnection()) { if (!hasInternetConnection()) {
account.setStatus(Account.State.NO_INTERNET); account.setStatus(Account.State.NO_INTERNET);
if (statusListener != null) { if (statusListener != null) {