Skip to content

Commit 66c9fd4

Browse files
haffenlohermoxie0
authored andcommitted
Honor synced end session messages
Fixes signalapp#5174 Closes signalapp#5178
1 parent 944f5aa commit 66c9fd4

File tree

1 file changed

+36
-1
lines changed

1 file changed

+36
-1
lines changed

src/org/thoughtcrime/securesms/jobs/PushDecryptJob.java

+36-1
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
import org.thoughtcrime.securesms.sms.IncomingEndSessionMessage;
4141
import org.thoughtcrime.securesms.sms.IncomingPreKeyBundleMessage;
4242
import org.thoughtcrime.securesms.sms.IncomingTextMessage;
43+
import org.thoughtcrime.securesms.sms.OutgoingEndSessionMessage;
4344
import org.thoughtcrime.securesms.sms.OutgoingTextMessage;
4445
import org.thoughtcrime.securesms.util.Base64;
4546
import org.thoughtcrime.securesms.util.GroupUtil;
@@ -300,6 +301,38 @@ private void handleEndSessionMessage(@NonNull MasterSecretUnion masterSec
300301
}
301302
}
302303

304+
private long handleSynchronizeSentEndSessionMessage(@NonNull MasterSecretUnion masterSecret,
305+
@NonNull SentTranscriptMessage message,
306+
@NonNull Optional<Long> smsMessageId)
307+
{
308+
EncryptingSmsDatabase database = DatabaseFactory.getEncryptingSmsDatabase(context);
309+
Recipients recipients = getSyncMessageDestination(message);
310+
String body = message.getMessage().getBody().or("");
311+
OutgoingTextMessage outgoingTextMessage = new OutgoingTextMessage(recipients, body);
312+
OutgoingEndSessionMessage outgoingEndSessionMessage = new OutgoingEndSessionMessage(outgoingTextMessage);
313+
314+
long threadId = DatabaseFactory.getThreadDatabase(context).getThreadIdFor(recipients);
315+
316+
if (recipients.isSingleRecipient() && !recipients.isGroupRecipient()) {
317+
SessionStore sessionStore = new TextSecureSessionStore(context);
318+
sessionStore.deleteAllSessions(recipients.getPrimaryRecipient().getNumber());
319+
320+
SecurityEvent.broadcastSecurityUpdateEvent(context);
321+
322+
long messageId = database.insertMessageOutbox(masterSecret, threadId, outgoingEndSessionMessage,
323+
false, message.getTimestamp());
324+
database.markAsSent(messageId);
325+
database.markAsPush(messageId);
326+
database.markAsSecure(messageId);
327+
}
328+
329+
if (smsMessageId.isPresent()) {
330+
database.deleteMessage(smsMessageId.get());
331+
}
332+
333+
return threadId;
334+
}
335+
303336
private void handleGroupMessage(@NonNull MasterSecretUnion masterSecret,
304337
@NonNull SignalServiceEnvelope envelope,
305338
@NonNull SignalServiceDataMessage message,
@@ -357,7 +390,9 @@ private void handleSynchronizeSentMessage(@NonNull MasterSecretUnion masterSecre
357390

358391
Long threadId;
359392

360-
if (message.getMessage().isGroupUpdate()) {
393+
if (message.getMessage().isEndSession()) {
394+
threadId = handleSynchronizeSentEndSessionMessage(masterSecret, message, smsMessageId);
395+
} else if (message.getMessage().isGroupUpdate()) {
361396
threadId = GroupMessageProcessor.process(context, masterSecret, envelope, message.getMessage(), true);
362397
} else if (message.getMessage().isExpirationUpdate()) {
363398
threadId = handleSynchronizeSentExpirationUpdate(masterSecret, message, smsMessageId);

0 commit comments

Comments
 (0)