more details connection error messages

Daniel Gultsch created

Change summary

src/eu/siacs/conversations/entities/Account.java               |  4 
src/eu/siacs/conversations/services/XmppConnectionService.java |  6 
src/eu/siacs/conversations/ui/ManageAccountActivity.java       |  4 
src/eu/siacs/conversations/xmpp/XmppConnection.java            | 56 ++-
4 files changed, 42 insertions(+), 28 deletions(-)

Detailed changes

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

@@ -13,8 +13,6 @@ import eu.siacs.conversations.xmpp.XmppConnection;
 import android.content.ContentValues;
 import android.content.Context;
 import android.database.Cursor;
-import android.util.JsonReader;
-import android.util.Log;
 
 public class Account  extends AbstractEntity{
 
@@ -40,6 +38,8 @@ public class Account  extends AbstractEntity{
 	public static final int STATUS_NO_INTERNET = 3;
 	public static final int STATUS_TLS_ERROR = 4;
 	public static final int STATUS_SERVER_NOT_FOUND = 5;
+
+	public static final int STATUS_SERVER_REQUIRES_TLS = 6;
 	
 	protected String username;
 	protected String server;

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

@@ -819,7 +819,11 @@ public class XmppConnectionService extends Service {
 			disconnect(account);
 		}
 		if (!account.isOptionSet(Account.OPTION_DISABLED)) {
-			account.setXmppConnection(this.createConnection(account));
+			if (account.getXmppConnection()==null) {
+				account.setXmppConnection(this.createConnection(account));
+			}
+			Thread thread = new Thread(account.getXmppConnection());
+			thread.start();
 		}
 		if (accountChangedListener != null)
 			accountChangedListener.onAccountListChangedListener();

src/eu/siacs/conversations/ui/ManageAccountActivity.java 🔗

@@ -110,6 +110,10 @@ public class ManageAccountActivity extends XmppActivity {
 					statusView.setText("no internet");
 					statusView.setTextColor(0xFFe92727);
 					break;
+				case Account.STATUS_SERVER_REQUIRES_TLS:
+					statusView.setText("server requires TLS");
+					statusView.setTextColor(0xFFe92727);
+					break;
 				default:
 					break;
 				}

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

@@ -7,6 +7,7 @@ import java.math.BigInteger;
 import java.net.Socket;
 import java.net.UnknownHostException;
 import java.security.SecureRandom;
+import java.security.cert.CertPathValidatorException;
 import java.util.HashSet;
 import java.util.Hashtable;
 import java.util.List;
@@ -66,7 +67,7 @@ public class XmppConnection implements Runnable {
 		tagReader = new XmlReader(wakeLock);
 		tagWriter = new TagWriter();
 	}
-	
+
 	protected void changeStatus(int nextStatus) {
 		account.setStatus(nextStatus);
 		if (statusListener != null) {
@@ -75,6 +76,7 @@ public class XmppConnection implements Runnable {
 	}
 
 	protected void connect() {
+		Log.d(LOGTAG, "connecting");
 		try {
 			this.changeStatus(Account.STATUS_CONNECTING);
 			Bundle namePort = DNSHelper.getSRVRecord(account.getServer());
@@ -143,6 +145,11 @@ public class XmppConnection implements Runnable {
 				processStreamError(nextTag);
 			} else if (nextTag.isStart("features")) {
 				processStreamFeatures(nextTag);
+				if ((streamFeatures.getChildren().size() == 1)
+						&& (streamFeatures.hasChild("starttls"))
+						&& (!account.isOptionSet(Account.OPTION_USETLS))) {
+					changeStatus(Account.STATUS_SERVER_REQUIRES_TLS);
+				}
 			} else if (nextTag.isStart("proceed")) {
 				switchOverToTls(nextTag);
 			} else if (nextTag.isStart("success")) {
@@ -156,12 +163,7 @@ public class XmppConnection implements Runnable {
 				break;
 			} else if (nextTag.isStart("failure")) {
 				Element failure = tagReader.readElement(nextTag);
-				Log.d(LOGTAG, "read failure element" + failure.toString());
-				account.setStatus(Account.STATUS_UNAUTHORIZED);
-				if (statusListener != null) {
-					statusListener.onStatusChanged(account);
-				}
-				tagWriter.writeTag(Tag.end("stream"));
+				changeStatus(Account.STATUS_UNAUTHORIZED);
 			} else if (nextTag.isStart("iq")) {
 				processIq(nextTag);
 			} else if (nextTag.isStart("message")) {
@@ -215,10 +217,10 @@ public class XmppConnection implements Runnable {
 		IqPacket packet = (IqPacket) processPacket(currentTag, PACKET_IQ);
 		if (packetCallbacks.containsKey(packet.getId())) {
 			if (packetCallbacks.get(packet.getId()) instanceof OnIqPacketReceived) {
-				((OnIqPacketReceived) packetCallbacks.get(packet.getId())).onIqPacketReceived(account,
-						packet);
+				((OnIqPacketReceived) packetCallbacks.get(packet.getId()))
+						.onIqPacketReceived(account, packet);
 			}
-			
+
 			packetCallbacks.remove(packet.getId());
 		} else if (this.unregisteredIqListener != null) {
 			this.unregisteredIqListener.onIqPacketReceived(account, packet);
@@ -230,10 +232,10 @@ public class XmppConnection implements Runnable {
 		MessagePacket packet = (MessagePacket) processPacket(currentTag,
 				PACKET_MESSAGE);
 		String id = packet.getAttribute("id");
-		if ((id!=null)&&(packetCallbacks.containsKey(id))) {
+		if ((id != null) && (packetCallbacks.containsKey(id))) {
 			if (packetCallbacks.get(id) instanceof OnMessagePacketReceived) {
-				((OnMessagePacketReceived) packetCallbacks.get(id)).onMessagePacketReceived(account,
-						packet);
+				((OnMessagePacketReceived) packetCallbacks.get(id))
+						.onMessagePacketReceived(account, packet);
 			}
 			packetCallbacks.remove(id);
 		} else if (this.messageListener != null) {
@@ -246,10 +248,10 @@ public class XmppConnection implements Runnable {
 		PresencePacket packet = (PresencePacket) processPacket(currentTag,
 				PACKET_PRESENCE);
 		String id = packet.getAttribute("id");
-		if ((id!=null)&&(packetCallbacks.containsKey(id))) {
+		if ((id != null) && (packetCallbacks.containsKey(id))) {
 			if (packetCallbacks.get(id) instanceof OnPresencePacketReceived) {
-				((OnPresencePacketReceived) packetCallbacks.get(id)).onPresencePacketReceived(account,
-						packet);
+				((OnPresencePacketReceived) packetCallbacks.get(id))
+						.onPresencePacketReceived(account, packet);
 			}
 			packetCallbacks.remove(id);
 		} else if (this.presenceListener != null) {
@@ -375,21 +377,23 @@ public class XmppConnection implements Runnable {
 			}
 		});
 	}
-	
+
 	private void sendEnableCarbons() {
-		Log.d(LOGTAG,account.getJid()+": enable carbons");
+		Log.d(LOGTAG, account.getJid() + ": enable carbons");
 		IqPacket iq = new IqPacket(IqPacket.TYPE_SET);
 		Element enable = new Element("enable");
 		enable.setAttribute("xmlns", "urn:xmpp:carbons:2");
 		iq.addChild(enable);
 		this.sendIqPacket(iq, new OnIqPacketReceived() {
-			
+
 			@Override
 			public void onIqPacketReceived(Account account, IqPacket packet) {
 				if (!packet.hasChild("error")) {
-					Log.d(LOGTAG,account.getJid()+": successfully enabled carbons");
+					Log.d(LOGTAG, account.getJid()
+							+ ": successfully enabled carbons");
 				} else {
-					Log.d(LOGTAG,account.getJid()+": error enableing carbons "+packet.toString());
+					Log.d(LOGTAG, account.getJid()
+							+ ": error enableing carbons " + packet.toString());
 				}
 			}
 		});
@@ -426,8 +430,9 @@ public class XmppConnection implements Runnable {
 	public void sendMessagePacket(MessagePacket packet) {
 		this.sendMessagePacket(packet, null);
 	}
-	
-	public void sendMessagePacket(MessagePacket packet, OnMessagePacketReceived callback) {
+
+	public void sendMessagePacket(MessagePacket packet,
+			OnMessagePacketReceived callback) {
 		String id = nextRandomId();
 		packet.setAttribute("id", id);
 		tagWriter.writeElement(packet);
@@ -439,8 +444,9 @@ public class XmppConnection implements Runnable {
 	public void sendPresencePacket(PresencePacket packet) {
 		this.sendPresencePacket(packet, null);
 	}
-	
-	public PresencePacket sendPresencePacket(PresencePacket packet, OnPresencePacketReceived callback) {
+
+	public PresencePacket sendPresencePacket(PresencePacket packet,
+			OnPresencePacketReceived callback) {
 		String id = nextRandomId();
 		packet.setAttribute("id", id);
 		tagWriter.writeElement(packet);