aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoriNPUTmice <daniel@gultsch.de>2014-08-27 14:51:00 +0200
committeriNPUTmice <daniel@gultsch.de>2014-08-30 09:22:16 +0200
commit9075d3854dc8fd02a35bf628807b3982815ef7ad (patch)
tree7f080a446e4db8cf33aa0d8b92739dca5fb92ad3
parent4a6a6c84031585ec7985fa16cbc86988d58e8b43 (diff)
properly set stanza count on session resume
-rw-r--r--src/eu/siacs/conversations/xmpp/XmppConnection.java24
1 files changed, 21 insertions, 3 deletions
diff --git a/src/eu/siacs/conversations/xmpp/XmppConnection.java b/src/eu/siacs/conversations/xmpp/XmppConnection.java
index 378e7d62a..bc1cd7088 100644
--- a/src/eu/siacs/conversations/xmpp/XmppConnection.java
+++ b/src/eu/siacs/conversations/xmpp/XmppConnection.java
@@ -266,9 +266,27 @@ public class XmppConnection implements Runnable {
tagWriter.writeStanzaAsync(r);
} else if (nextTag.isStart("resumed")) {
lastPaketReceived = SystemClock.elapsedRealtime();
- Log.d(LOGTAG, account.getJid() + ": session resumed");
- tagReader.readElement(nextTag);
- sendPing();
+ Element resumed = tagReader.readElement(nextTag);
+ String h = resumed.getAttribute("h");
+ try {
+ int serverCount = Integer.parseInt(h);
+ if (serverCount!=stanzasSent) {
+ Log.d(LOGTAG,account.getJid() + ": session resumed with lost packages");
+ stanzasSent = serverCount;
+ } else {
+ Log.d(LOGTAG, account.getJid() + ": session resumed");
+ }
+ if (acknowledgedListener!=null) {
+ for(int i = 0; i < messageReceipts.size(); ++i) {
+ if (serverCount>=messageReceipts.keyAt(i)) {
+ acknowledgedListener.onMessageAcknowledged(account, messageReceipts.valueAt(i));
+ }
+ }
+ }
+ messageReceipts.clear();
+ } catch (NumberFormatException e) {
+
+ }
changeStatus(Account.STATUS_ONLINE);
} else if (nextTag.isStart("r")) {
tagReader.readElement(nextTag);