aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndreas Straub <andy@strb.org>2015-07-05 22:54:28 +0200
committerAndreas Straub <andy@strb.org>2015-07-05 22:54:28 +0200
commit3b8dfafecded2a6f16c87ff9b7ff5cf3e1d5d6a1 (patch)
tree1e964449ca62e1d0191a4b3b108b7936f3978e46
parent835584ae3b58fbeab07516e2ce609efe9ad8bec8 (diff)
Only cache session if successfully established
When receiving a message, only remember the XmppAxolotlSession wrapper if the prospective session was actually established. This prevents us from erroneously adding empty sessions that are never established using received PreKeyWhisperMessages, which would lead to errors if we try to use them for sending.
-rw-r--r--src/main/java/eu/siacs/conversations/crypto/axolotl/AxolotlService.java7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/main/java/eu/siacs/conversations/crypto/axolotl/AxolotlService.java b/src/main/java/eu/siacs/conversations/crypto/axolotl/AxolotlService.java
index d37879c3..faa0e5ad 100644
--- a/src/main/java/eu/siacs/conversations/crypto/axolotl/AxolotlService.java
+++ b/src/main/java/eu/siacs/conversations/crypto/axolotl/AxolotlService.java
@@ -944,12 +944,13 @@ public class AxolotlService {
AxolotlAddress senderAddress = new AxolotlAddress(message.getFrom().toString(),
message.getSenderDeviceId());
+ boolean newSession = false;
XmppAxolotlSession session = sessions.get(senderAddress);
if (session == null) {
Log.d(Config.LOGTAG, "Account: "+account.getJid()+" No axolotl session found while parsing received message " + message);
// TODO: handle this properly
session = new XmppAxolotlSession(axolotlStore, senderAddress);
- sessions.put(senderAddress,session);
+ newSession = true;
}
for (XmppAxolotlMessage.XmppAxolotlMessageHeader header : message.getHeaders()) {
@@ -969,6 +970,10 @@ public class AxolotlService {
}
}
+ if (newSession && plaintextMessage != null) {
+ sessions.put(senderAddress,session);
+ }
+
return plaintextMessage;
}
}