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.
This commit is contained in:
Andreas Straub 2015-07-05 22:54:28 +02:00
parent 835584ae3b
commit 3b8dfafecd
1 changed files with 6 additions and 1 deletions

View File

@ -944,12 +944,13 @@ public class AxolotlService {
AxolotlAddress senderAddress = new AxolotlAddress(message.getFrom().toString(), AxolotlAddress senderAddress = new AxolotlAddress(message.getFrom().toString(),
message.getSenderDeviceId()); message.getSenderDeviceId());
boolean newSession = false;
XmppAxolotlSession session = sessions.get(senderAddress); XmppAxolotlSession session = sessions.get(senderAddress);
if (session == null) { if (session == null) {
Log.d(Config.LOGTAG, "Account: "+account.getJid()+" No axolotl session found while parsing received message " + message); Log.d(Config.LOGTAG, "Account: "+account.getJid()+" No axolotl session found while parsing received message " + message);
// TODO: handle this properly // TODO: handle this properly
session = new XmppAxolotlSession(axolotlStore, senderAddress); session = new XmppAxolotlSession(axolotlStore, senderAddress);
sessions.put(senderAddress,session); newSession = true;
} }
for (XmppAxolotlMessage.XmppAxolotlMessageHeader header : message.getHeaders()) { for (XmppAxolotlMessage.XmppAxolotlMessageHeader header : message.getHeaders()) {
@ -969,6 +970,10 @@ public class AxolotlService {
} }
} }
if (newSession && plaintextMessage != null) {
sessions.put(senderAddress,session);
}
return plaintextMessage; return plaintextMessage;
} }
} }