add error state for unavailable tor network

Daniel Gultsch created

Change summary

src/main/java/eu/siacs/conversations/entities/Account.java         |  6 
src/main/java/eu/siacs/conversations/utils/SocksSocketFactory.java | 13 
src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java      |  8 
src/main/res/values/strings.xml                                    |  2 
4 files changed, 15 insertions(+), 14 deletions(-)

Detailed changes

src/main/java/eu/siacs/conversations/entities/Account.java 🔗

@@ -83,7 +83,7 @@ public class Account extends AbstractEntity {
 		REGISTRATION_NOT_SUPPORTED(true),
 		SECURITY_ERROR(true),
 		INCOMPATIBLE_SERVER(true),
-		DNS_TIMEOUT(true);
+		TOR_NOT_AVAILABLE(true);
 
 		private final boolean isError;
 
@@ -127,8 +127,8 @@ public class Account extends AbstractEntity {
 					return R.string.account_status_security_error;
 				case INCOMPATIBLE_SERVER:
 					return R.string.account_status_incompatible_server;
-				case DNS_TIMEOUT:
-					return R.string.account_status_dns_timeout;
+				case TOR_NOT_AVAILABLE:
+					return R.string.account_status_tor_unavailable;
 				default:
 					return R.string.account_status_unknown;
 			}

src/main/java/eu/siacs/conversations/utils/SocksSocketFactory.java 🔗

@@ -1,14 +1,11 @@
 package eu.siacs.conversations.utils;
 
-import android.util.Log;
-
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.net.InetAddress;
 import java.net.InetSocketAddress;
 import java.net.Socket;
-import java.net.UnknownHostException;
 import java.nio.ByteBuffer;
 
 import eu.siacs.conversations.Config;
@@ -37,7 +34,11 @@ public class SocksSocketFactory {
 
 	public static Socket createSocket(InetSocketAddress address, String destination, int port) throws IOException {
 		Socket socket = new Socket();
-		socket.connect(address, Config.CONNECT_TIMEOUT * 1000);
+		try {
+			socket.connect(address, Config.CONNECT_TIMEOUT * 1000);
+		} catch (IOException e) {
+			throw new SocksProxyNotFoundException();
+		}
 		createSocksConnection(socket, destination, port);
 		return socket;
 	}
@@ -49,4 +50,8 @@ public class SocksSocketFactory {
 	static class SocksConnectionException extends IOException {
 
 	}
+
+	public static class SocksProxyNotFoundException extends IOException {
+
+	}
 }

src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java 🔗

@@ -29,7 +29,6 @@ import java.net.InetSocketAddress;
 import java.net.Socket;
 import java.net.UnknownHostException;
 import java.net.URL;
-import java.nio.ByteBuffer;
 import java.security.KeyManagementException;
 import java.security.NoSuchAlgorithmException;
 import java.security.Principal;
@@ -318,8 +317,8 @@ public class XmppConnection implements Runnable {
 			this.changeStatus(Account.State.UNAUTHORIZED);
 		} catch (final UnknownHostException | ConnectException e) {
 			this.changeStatus(Account.State.SERVER_NOT_FOUND);
-		} catch (final DnsTimeoutException e) {
-			this.changeStatus(Account.State.DNS_TIMEOUT);
+		} catch (final SocksSocketFactory.SocksProxyNotFoundException e) {
+			this.changeStatus(Account.State.TOR_NOT_AVAILABLE);
 		} catch (final IOException | XmlPullParserException | NoSuchAlgorithmException e) {
 			Log.d(Config.LOGTAG, account.getJid().toBareJid().toString() + ": " + e.getMessage());
 			this.changeStatus(Account.State.OFFLINE);
@@ -1327,9 +1326,6 @@ public class XmppConnection implements Runnable {
 
 	}
 
-	private class DnsTimeoutException extends IOException {
-
-	}
 	public enum Identity {
 		FACEBOOK,
 		SLACK,

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

@@ -521,7 +521,7 @@
 	<string name="download_failed_could_not_connect">Download failed: Could not connect to host</string>
 	<string name="pref_use_white_background">Use white background</string>
 	<string name="pref_use_white_background_summary">Show received messages as black text on a white background</string>
-	<string name="account_status_dns_timeout">Timeout in DNS</string>
+	<string name="account_status_tor_unavailable">TOR network unavailable</string>
 	<string name="server_info_broken">Broken</string>
 	<string name="pref_presence_settings">Presence settings</string>
 	<string name="pref_away_when_screen_off">Away when screen is off</string>