XmppConnection: do not count stanzas before smacks session has started

Daniel Gultsch created

Change summary

src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java | 10 ++++
1 file changed, 9 insertions(+), 1 deletion(-)

Detailed changes

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

@@ -108,6 +108,7 @@ public class XmppConnection implements Runnable {
 	private final Features features = new Features(this);
 	private boolean needsBinding = true;
 	private boolean shouldAuthenticate = true;
+	private boolean inSmacksSession = false;
 	private Element streamFeatures;
 	private final HashMap<Jid, ServiceDiscoveryResult> disco = new HashMap<>();
 
@@ -271,6 +272,7 @@ public class XmppConnection implements Runnable {
 		}
 		Log.d(Config.LOGTAG, account.getJid().toBareJid().toString() + ": connecting");
 		features.encryptionEnabled = false;
+		inSmacksSession = false;
 		this.attempt++;
 		this.verifiedHostname = null; //will be set if user entered hostname is being used or hostname was verified with dnssec
 		try {
@@ -578,9 +580,11 @@ public class XmppConnection implements Runnable {
 							+ ": stream management(" + smVersion + ") enabled");
 				}
 				this.stanzasReceived = 0;
+				this.inSmacksSession = true;
 				final RequestPacket r = new RequestPacket(smVersion);
 				tagWriter.writeStanzaAsync(r);
 			} else if (nextTag.isStart("resumed")) {
+				this.inSmacksSession = true;
 				this.tagWriter.writeStanzaAsync(new RequestPacket(smVersion));
 				lastPacketReceived = SystemClock.elapsedRealtime();
 				final Element resumed = tagReader.readElement(nextTag);
@@ -733,7 +737,11 @@ public class XmppConnection implements Runnable {
 			resetStreamId();
 			throw new IOException("time to restart the session. cant handle >2 billion pcks");
 		}
-		++stanzasReceived;
+		if (inSmacksSession) {
+			++stanzasReceived;
+		} else if (features.sm()) {
+			Log.d(Config.LOGTAG,account.getJid().toBareJid()+": not counting stanza("+element.getClass().getSimpleName()+"). Not in smacks session.");
+		}
 		lastPacketReceived = SystemClock.elapsedRealtime();
 		if (Config.BACKGROUND_STANZA_LOGGING && mXmppConnectionService.checkListeners()) {
 			Log.d(Config.LOGTAG, "[background stanza] " + element);