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