diff --git a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java index 41f7d18ec23f73305ab5a9fd144eae7662fa6c30..33701215f1d9b42fe34691ec8a13c19d189941b3 100644 --- a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java +++ b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java @@ -421,7 +421,8 @@ public class XmppConnectionService extends Service { for (Conversation conversation : pendingJoins) { joinMuc(conversation); } - scheduleWakeUpCall(Config.PING_MAX_INTERVAL, account.getUuid().hashCode()); + scheduleWakeUpCall( + Config.PING_MAX_INTERVAL * 1000L, account.getUuid().hashCode()); } else if (account.getStatus() == Account.State.OFFLINE || account.getStatus() == Account.State.DISABLED || account.getStatus() == Account.State.LOGGED_OUT) { @@ -1752,10 +1753,10 @@ public class XmppConnectionService extends Service { } public void scheduleWakeUpCall(final int seconds, final int requestCode) { - scheduleWakeUpCall((long) (seconds < 0 ? 1 : seconds + 1), requestCode); + scheduleWakeUpCall((seconds < 0 ? 1 : seconds + 1) * 1000L, requestCode); } - private void scheduleWakeUpCall(final long milliSeconds, final int requestCode) { + public void scheduleWakeUpCall(final long milliSeconds, final int requestCode) { final var timeToWake = SystemClock.elapsedRealtime() + milliSeconds; final var alarmManager = getSystemService(AlarmManager.class); final Intent intent = new Intent(this, SystemEventReceiver.class); diff --git a/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java b/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java index 9845f4149bf384a45772d053a4034f21ad53890a..eee793b3fe72718511ae0ed6c426b3f19dd90ea8 100644 --- a/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java +++ b/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java @@ -446,12 +446,10 @@ public class XmppConnection implements Runnable { localSocket = new Socket(); localSocket.connect(addr, Config.SOCKET_TIMEOUT * 1000); - + localSocket.setSoTimeout(Config.SOCKET_TIMEOUT * 1000); if (features.encryptionEnabled) { localSocket = upgradeSocketToTls(localSocket); } - - localSocket.setSoTimeout(Config.SOCKET_TIMEOUT * 1000); if (startXmpp(localSocket)) { // reset to 0; once the connection is established we don't want this localSocket.setSoTimeout(0); @@ -2125,7 +2123,7 @@ public class XmppConnection implements Runnable { mWaitForDisco.set(waitForDisco); this.lastDiscoStarted = SystemClock.elapsedRealtime(); mXmppConnectionService.scheduleWakeUpCall( - Config.CONNECT_DISCO_TIMEOUT, account.getUuid().hashCode()); + Config.CONNECT_DISCO_TIMEOUT * 1000L, account.getUuid().hashCode()); final Element caps = streamFeatures.findChild("c"); final String hash = caps == null ? null : caps.getAttribute("hash"); final String ver = caps == null ? null : caps.getAttribute("ver"); @@ -2824,9 +2822,15 @@ public class XmppConnection implements Runnable { Log.d( Config.LOGTAG, account.getJid().asBareJid() + ": connection timeout after " + duration + "ms"); - this.changeStatus(Account.State.CONNECTION_TIMEOUT); + + // last connection time gets reset so time to next attempt is calculated correctly + this.lastConnectionStarted = SystemClock.elapsedRealtime(); + + // interrupt needs to be called before status change; otherwise we interrupt the newly + // created thread this.interrupt(); this.forceCloseSocket(); + this.changeStatus(Account.State.CONNECTION_TIMEOUT); } private class MyKeyManager implements X509KeyManager { diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index 1045f797f0eb0a3714f1738dea97892798b2f072..6454bb9ed928a0fbcdc7fc23f985695f80b346d7 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -470,7 +470,7 @@ Download failed: Invalid file Tor network unavailable Bind failure - The server is not responsible for this domain + Not responsible for domain Broken Availability Away when device is locked