From 38eba12ddc215cb30c83f613f1d5543b61f36f74 Mon Sep 17 00:00:00 2001 From: Christian Schneppe Date: Sat, 10 Feb 2018 17:31:55 +0100 Subject: SM saftey checks --- src/main/java/de/pixart/messenger/xmpp/XmppConnection.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/main/java/de/pixart/messenger/xmpp/XmppConnection.java b/src/main/java/de/pixart/messenger/xmpp/XmppConnection.java index c6b913677..f7c80d841 100644 --- a/src/main/java/de/pixart/messenger/xmpp/XmppConnection.java +++ b/src/main/java/de/pixart/messenger/xmpp/XmppConnection.java @@ -639,7 +639,7 @@ public class XmppConnection implements Runnable { ArrayList failedStanzas = new ArrayList<>(); synchronized (this.mStanzaQueue) { final int serverCount = Integer.parseInt(h); - if (serverCount != stanzasSent) { + if (serverCount < stanzasSent) { Log.d(Config.LOGTAG, account.getJid().toBareJid().toString() + ": session resumed with lost packages"); stanzasSent = serverCount; @@ -727,6 +727,9 @@ public class XmppConnection implements Runnable { } private void acknowledgeStanzaUpTo(int serverCount) { + if (serverCount > stanzasSent) { + Log.e(Config.LOGTAG, "server acknowledged more stanzas than we sent. serverCount=" + serverCount + ", ourCount=" + stanzasSent); + } for (int i = 0; i < mStanzaQueue.size(); ++i) { if (serverCount >= mStanzaQueue.keyAt(i)) { if (Config.EXTENDED_SM_LOGGING) { @@ -1079,6 +1082,7 @@ public class XmppConnection implements Runnable { resetAttemptCount(true); resetStreamId(); clearIqCallbacks(); + this.stanzasSent = 0; mStanzaQueue.clear(); this.redirectionUrl = null; synchronized (this.disco) { @@ -1431,6 +1435,12 @@ public class XmppConnection implements Runnable { tagWriter.writeStanzaAsync(packet); if (packet instanceof AbstractAcknowledgeableStanza) { AbstractAcknowledgeableStanza stanza = (AbstractAcknowledgeableStanza) packet; + if (this.mStanzaQueue.size() != 0) { + int currentHighestKey = this.mStanzaQueue.keyAt(this.mStanzaQueue.size() - 1); + if (currentHighestKey != stanzasSent) { + throw new AssertionError("Stanza count messed up"); + } + } ++stanzasSent; this.mStanzaQueue.append(stanzasSent, stanza); if (stanza instanceof MessagePacket && stanza.getId() != null && getFeatures().sm()) { -- cgit v1.2.3