introduce special iq type for internal timeouts. always use != result to check for error in callbacks

Daniel Gultsch created

Change summary

src/main/java/eu/siacs/conversations/parser/IqParser.java                   |  2 
src/main/java/eu/siacs/conversations/services/MessageArchiveService.java    |  2 
src/main/java/eu/siacs/conversations/services/XmppConnectionService.java    | 14 
src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java               |  4 
src/main/java/eu/siacs/conversations/xmpp/jingle/JingleConnection.java      |  9 
src/main/java/eu/siacs/conversations/xmpp/jingle/JingleInbandTransport.java |  2 
src/main/java/eu/siacs/conversations/xmpp/stanzas/IqPacket.java             |  5 
7 files changed, 18 insertions(+), 20 deletions(-)

Detailed changes

src/main/java/eu/siacs/conversations/parser/IqParser.java 🔗

@@ -236,7 +236,7 @@ public class IqParser extends AbstractParser implements OnIqPacketReceived {
 
 	@Override
 	public void onIqPacketReceived(final Account account, final IqPacket packet) {
-		if (packet.getType() == IqPacket.TYPE.ERROR) {
+		if (packet.getType() == IqPacket.TYPE.ERROR || packet.getType() == IqPacket.TYPE.TIMEOUT) {
 			return;
 		} else if (packet.hasChild("query", Xmlns.ROSTER) && packet.fromServer(account)) {
 			final Element query = packet.findChild("query");

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

@@ -111,7 +111,7 @@ public class MessageArchiveService implements OnAdvancedStreamFeaturesLoaded {
 			this.mXmppConnectionService.sendIqPacket(account, packet, new OnIqPacketReceived() {
 				@Override
 				public void onIqPacketReceived(Account account, IqPacket packet) {
-					if (packet.getType() == IqPacket.TYPE.ERROR) {
+					if (packet.getType() != IqPacket.TYPE.RESULT) {
 						Log.d(Config.LOGTAG, account.getJid().toBareJid().toString() + ": error executing mam: " + packet.toString());
 						finalizeQuery(query);
 					}

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

@@ -214,7 +214,7 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa
 	private OnIqPacketReceived mDefaultIqHandler = new OnIqPacketReceived() {
 		@Override
 		public void onIqPacketReceived(Account account, IqPacket packet) {
-			if (packet.getType() == IqPacket.TYPE.ERROR) {
+			if (packet.getType() != IqPacket.TYPE.RESULT) {
 				Element error = packet.findChild("error");
 				String text = error != null ? error.findChildContent("text") : null;
 				if (text != null) {
@@ -1678,7 +1678,7 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa
 		sendIqPacket(conversation.getAccount(), request, new OnIqPacketReceived() {
 			@Override
 			public void onIqPacketReceived(Account account, IqPacket packet) {
-				if (packet.getType() != IqPacket.TYPE.ERROR) {
+				if (packet.getType() == IqPacket.TYPE.RESULT) {
 					ArrayList<String> features = new ArrayList<>();
 					for (Element child : packet.query().getChildren()) {
 						if (child != null && child.getName().equals("feature")) {
@@ -1702,7 +1702,7 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa
 		sendIqPacket(conversation.getAccount(), request, new OnIqPacketReceived() {
 			@Override
 			public void onIqPacketReceived(Account account, IqPacket packet) {
-				if (packet.getType() != IqPacket.TYPE.ERROR) {
+				if (packet.getType() == IqPacket.TYPE.RESULT) {
 					Data data = Data.parse(packet.query().findChild("x", "jabber:x:data"));
 					for (Field field : data.getFields()) {
 						if (options.containsKey(field.getName())) {
@@ -1716,12 +1716,10 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa
 					sendIqPacket(account, set, new OnIqPacketReceived() {
 						@Override
 						public void onIqPacketReceived(Account account, IqPacket packet) {
-							if (packet.getType() == IqPacket.TYPE.RESULT) {
-								if (callback != null) {
+							if (callback != null) {
+								if (packet.getType() == IqPacket.TYPE.RESULT) {
 									callback.onPushSucceeded();
-								}
-							} else {
-								if (callback != null) {
+								} else {
 									callback.onPushFailed();
 								}
 							}

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

@@ -414,7 +414,7 @@ public class XmppConnection implements Runnable {
 		this.sendIqPacket(iq, new OnIqPacketReceived() {
 			@Override
 			public void onIqPacketReceived(final Account account, final IqPacket packet) {
-				if (packet.getType() == IqPacket.TYPE.RESULT) {
+				if (packet.getType() != IqPacket.TYPE.TIMEOUT) {
 					Log.d(Config.LOGTAG, account.getJid().toBareJid() + ": online with resource " + account.getResource());
 					changeStatus(Account.State.ONLINE);
 				} else {
@@ -739,7 +739,7 @@ public class XmppConnection implements Runnable {
 	}
 
 	private void clearIqCallbacks() {
-		final IqPacket failurePacket = new IqPacket(IqPacket.TYPE.ERROR);
+		final IqPacket failurePacket = new IqPacket(IqPacket.TYPE.TIMEOUT);
 		final ArrayList<OnIqPacketReceived> callbacks = new ArrayList<>();
 		synchronized (this.packetCallbacks) {
 			if (this.packetCallbacks.size() == 0) {

src/main/java/eu/siacs/conversations/xmpp/jingle/JingleConnection.java 🔗

@@ -85,7 +85,7 @@ public class JingleConnection implements Transferable {
 
 		@Override
 		public void onIqPacketReceived(Account account, IqPacket packet) {
-			if (packet.getType() == IqPacket.TYPE.ERROR) {
+			if (packet.getType() != IqPacket.TYPE.RESULT) {
 				fail();
 			}
 		}
@@ -449,7 +449,7 @@ public class JingleConnection implements Transferable {
 
 				@Override
 				public void onIqPacketReceived(Account account, IqPacket packet) {
-					if (packet.getType() != IqPacket.TYPE.ERROR) {
+					if (packet.getType() == IqPacket.TYPE.RESULT) {
 						Log.d(Config.LOGTAG,account.getJid().toBareJid()+": other party received offer");
 						mJingleStatus = JINGLE_STATUS_INITIATED;
 						mXmppConnectionService.markMessage(message, Message.STATUS_OFFERED);
@@ -634,12 +634,11 @@ public class JingleConnection implements Transferable {
 								@Override
 								public void onIqPacketReceived(Account account,
 										IqPacket packet) {
-									if (packet.getType() == IqPacket.TYPE.ERROR) {
+									if (packet.getType() != IqPacket.TYPE.RESULT) {
 										onProxyActivated.failed();
 									} else {
 										onProxyActivated.success();
-										sendProxyActivated(connection
-												.getCandidate().getCid());
+										sendProxyActivated(connection.getCandidate().getCid());
 									}
 								}
 							});