added special error state for dns timeout

Daniel Gultsch created

Change summary

src/main/java/eu/siacs/conversations/entities/Account.java               | 5 
src/main/java/eu/siacs/conversations/services/XmppConnectionService.java | 3 
src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java            | 8 
src/main/res/values/strings.xml                                          | 1 
4 files changed, 13 insertions(+), 4 deletions(-)

Detailed changes

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

@@ -62,7 +62,8 @@ public class Account extends AbstractEntity {
 		REGISTRATION_SUCCESSFUL,
 		REGISTRATION_NOT_SUPPORTED(true),
 		SECURITY_ERROR(true),
-		INCOMPATIBLE_SERVER(true);
+		INCOMPATIBLE_SERVER(true),
+		DNS_TIMEOUT(true);
 
 		private final boolean isError;
 
@@ -106,6 +107,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;
 				default:
 					return R.string.account_status_unknown;
 			}

src/main/java/eu/siacs/conversations/services/XmppConnectionService.java 🔗

@@ -1881,8 +1881,7 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa
 			MessagePacket packet = new MessagePacket();
 			packet.setType(MessagePacket.TYPE_CHAT);
 			packet.setFrom(account.getJid());
-			packet.addChild("private", "urn:xmpp:carbons:2");
-			packet.addChild("no-copy", "urn:xmpp:hints");
+			MessageGenerator.addMessageHints(packet);
 			packet.setAttribute("to", otrSession.getSessionID().getAccountID() + "/"
 					+ otrSession.getSessionID().getUserID());
 			try {

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

@@ -165,7 +165,7 @@ public class XmppConnection implements Runnable {
 				}
 				final ArrayList<Parcelable> values = result.getParcelableArrayList("values");
 				if ("timeout".equals(result.getString("error"))) {
-					throw new IOException("timeout in dns");
+					throw new DnsTimeoutException();
 				} else if (values != null) {
 					int i = 0;
 					boolean socketError = true;
@@ -234,6 +234,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 IOException | XmlPullParserException | NoSuchAlgorithmException e) {
 			Log.d(Config.LOGTAG, account.getJid().toBareJid().toString() + ": " + e.getMessage());
 			this.changeStatus(Account.State.OFFLINE);
@@ -1163,6 +1165,10 @@ public class XmppConnection implements Runnable {
 
 	}
 
+	private class DnsTimeoutException extends IOException {
+
+	}
+
 	public class Features {
 		XmppConnection connection;
 		private boolean carbonsEnabled = false;

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

@@ -512,4 +512,5 @@
 	<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>
 </resources>