fixups for connection timeout

Daniel Gultsch created

Change summary

src/main/java/eu/siacs/conversations/services/XmppConnectionService.java |  7 
src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java            | 14 
src/main/res/values/strings.xml                                          |  2 
3 files changed, 14 insertions(+), 9 deletions(-)

Detailed changes

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);

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 {

src/main/res/values/strings.xml 🔗

@@ -470,7 +470,7 @@
     <string name="download_failed_invalid_file">Download failed: Invalid file</string>
     <string name="account_status_tor_unavailable">Tor network unavailable</string>
     <string name="account_status_bind_failure">Bind failure</string>
-    <string name="account_status_host_unknown">The server is not responsible for this domain</string>
+    <string name="account_status_host_unknown">Not responsible for domain</string>
     <string name="server_info_broken">Broken</string>
     <string name="pref_presence_settings">Availability</string>
     <string name="pref_away_when_screen_off">Away when device is locked</string>