|
40 | 40 | import org.thoughtcrime.securesms.sms.IncomingEndSessionMessage;
|
41 | 41 | import org.thoughtcrime.securesms.sms.IncomingPreKeyBundleMessage;
|
42 | 42 | import org.thoughtcrime.securesms.sms.IncomingTextMessage;
|
| 43 | +import org.thoughtcrime.securesms.sms.OutgoingEndSessionMessage; |
43 | 44 | import org.thoughtcrime.securesms.sms.OutgoingTextMessage;
|
44 | 45 | import org.thoughtcrime.securesms.util.Base64;
|
45 | 46 | import org.thoughtcrime.securesms.util.GroupUtil;
|
@@ -300,6 +301,38 @@ private void handleEndSessionMessage(@NonNull MasterSecretUnion masterSec
|
300 | 301 | }
|
301 | 302 | }
|
302 | 303 |
|
| 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 | + |
303 | 336 | private void handleGroupMessage(@NonNull MasterSecretUnion masterSecret,
|
304 | 337 | @NonNull SignalServiceEnvelope envelope,
|
305 | 338 | @NonNull SignalServiceDataMessage message,
|
@@ -357,7 +390,9 @@ private void handleSynchronizeSentMessage(@NonNull MasterSecretUnion masterSecre
|
357 | 390 |
|
358 | 391 | Long threadId;
|
359 | 392 |
|
360 |
| - if (message.getMessage().isGroupUpdate()) { |
| 393 | + if (message.getMessage().isEndSession()) { |
| 394 | + threadId = handleSynchronizeSentEndSessionMessage(masterSecret, message, smsMessageId); |
| 395 | + } else if (message.getMessage().isGroupUpdate()) { |
361 | 396 | threadId = GroupMessageProcessor.process(context, masterSecret, envelope, message.getMessage(), true);
|
362 | 397 | } else if (message.getMessage().isExpirationUpdate()) {
|
363 | 398 | threadId = handleSynchronizeSentExpirationUpdate(masterSecret, message, smsMessageId);
|
|
0 commit comments