Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/iNPUTmice/Conversations.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Gultsch <daniel@gultsch.de>2022-08-29 20:30:03 +0300
committerDaniel Gultsch <daniel@gultsch.de>2022-08-29 20:30:03 +0300
commit7ea4f64ce4b157989266840411bf9aa703d57f0e (patch)
tree4e32d24e306286b1693698079924b451e68a9613
parentf6ab3dd068771394a48e11f25a09e30663adcfe3 (diff)
code clean up for resumed processing
-rw-r--r--src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java80
1 files changed, 42 insertions, 38 deletions
diff --git a/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java b/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java
index bddcb197a..37d02884c 100644
--- a/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java
+++ b/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java
@@ -694,52 +694,56 @@ public class XmppConnection implements Runnable {
}
}
- private void processResumed(final Element resumed) {
+ private void processResumed(final Element resumed) throws StateChangingException {
this.inSmacksSession = true;
this.isBound = true;
this.tagWriter.writeStanzaAsync(new RequestPacket(smVersion));
lastPacketReceived = SystemClock.elapsedRealtime();
final String h = resumed.getAttribute("h");
+ if (h == null) {
+ resetStreamId();
+ throw new StateChangingException(Account.State.INCOMPATIBLE_SERVER);
+ }
+ final int serverCount;
try {
- ArrayList<AbstractAcknowledgeableStanza> failedStanzas = new ArrayList<>();
- final boolean acknowledgedMessages;
- synchronized (this.mStanzaQueue) {
- final int serverCount = Integer.parseInt(h);
- if (serverCount < stanzasSent) {
- Log.d(
- Config.LOGTAG,
- account.getJid().asBareJid() + ": session resumed with lost packages");
- stanzasSent = serverCount;
- } else {
- Log.d(Config.LOGTAG, account.getJid().asBareJid() + ": session resumed");
- }
- acknowledgedMessages = acknowledgeStanzaUpTo(serverCount);
- for (int i = 0; i < this.mStanzaQueue.size(); ++i) {
- failedStanzas.add(mStanzaQueue.valueAt(i));
- }
- mStanzaQueue.clear();
+ serverCount = Integer.parseInt(h);
+ } catch (final NumberFormatException e) {
+ resetStreamId();
+ throw new StateChangingException(Account.State.INCOMPATIBLE_SERVER);
+ }
+ final ArrayList<AbstractAcknowledgeableStanza> failedStanzas = new ArrayList<>();
+ final boolean acknowledgedMessages;
+ synchronized (this.mStanzaQueue) {
+ if (serverCount < stanzasSent) {
+ Log.d(
+ Config.LOGTAG,
+ account.getJid().asBareJid() + ": session resumed with lost packages");
+ stanzasSent = serverCount;
+ } else {
+ Log.d(Config.LOGTAG, account.getJid().asBareJid() + ": session resumed");
}
- if (acknowledgedMessages) {
- mXmppConnectionService.updateConversationUi();
+ acknowledgedMessages = acknowledgeStanzaUpTo(serverCount);
+ for (int i = 0; i < this.mStanzaQueue.size(); ++i) {
+ failedStanzas.add(mStanzaQueue.valueAt(i));
}
- Log.d(
- Config.LOGTAG,
- account.getJid().asBareJid()
- + ": resending "
- + failedStanzas.size()
- + " stanzas");
- for (AbstractAcknowledgeableStanza packet : failedStanzas) {
- if (packet instanceof MessagePacket) {
- MessagePacket message = (MessagePacket) packet;
- mXmppConnectionService.markMessage(
- account,
- message.getTo().asBareJid(),
- message.getId(),
- Message.STATUS_UNSEND);
- }
- sendPacket(packet);
+ mStanzaQueue.clear();
+ }
+ if (acknowledgedMessages) {
+ mXmppConnectionService.updateConversationUi();
+ }
+ Log.d(
+ Config.LOGTAG,
+ account.getJid().asBareJid() + ": resending " + failedStanzas.size() + " stanzas");
+ for (final AbstractAcknowledgeableStanza packet : failedStanzas) {
+ if (packet instanceof MessagePacket) {
+ MessagePacket message = (MessagePacket) packet;
+ mXmppConnectionService.markMessage(
+ account,
+ message.getTo().asBareJid(),
+ message.getId(),
+ Message.STATUS_UNSEND);
}
- } catch (final NumberFormatException ignored) {
+ sendPacket(packet);
}
Log.d(
Config.LOGTAG,
@@ -998,7 +1002,7 @@ public class XmppConnection implements Runnable {
Log.d(
Config.LOGTAG,
account.getJid().asBareJid()
- + ": received NOP stream features"
+ + ": received NOP stream features "
+ this.streamFeatures);
}
}