From 580c000bda5ea6666fdef0814c427d66739af516 Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Wed, 14 Jul 2021 11:06:54 -0400 Subject: [PATCH] Move distribution message processing into the decryption phase. --- .../securesms/jobs/PushDecryptMessageJob.java | 14 ++++++++++++++ .../messages/MessageContentProcessor.java | 10 ---------- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushDecryptMessageJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushDecryptMessageJob.java index babfd0a56a..788c22819d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushDecryptMessageJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushDecryptMessageJob.java @@ -21,7 +21,11 @@ import org.thoughtcrime.securesms.notifications.NotificationChannels; import org.thoughtcrime.securesms.notifications.NotificationIds; import org.thoughtcrime.securesms.transport.RetryLaterException; import org.thoughtcrime.securesms.util.TextSecurePreferences; +import org.whispersystems.libsignal.SignalProtocolAddress; +import org.whispersystems.libsignal.protocol.SenderKeyDistributionMessage; +import org.whispersystems.signalservice.api.SignalServiceMessageSender; import org.whispersystems.signalservice.api.messages.SignalServiceEnvelope; +import org.whispersystems.signalservice.api.push.SignalServiceAddress; import java.util.LinkedList; import java.util.List; @@ -93,6 +97,10 @@ public final class PushDecryptMessageJob extends BaseJob { DecryptionResult result = MessageDecryptionUtil.decrypt(context, envelope); if (result.getContent() != null) { + if (result.getContent().getSenderKeyDistributionMessage().isPresent()) { + handleSenderKeyDistributionMessage(result.getContent().getSender(), result.getContent().getSenderDevice(), result.getContent().getSenderKeyDistributionMessage().get()); + } + jobs.add(new PushProcessMessageJob(result.getContent(), smsMessageId, envelope.getTimestamp())); } else if (result.getException() != null && result.getState() != MessageState.NOOP) { jobs.add(new PushProcessMessageJob(result.getState(), result.getException(), smsMessageId, envelope.getTimestamp())); @@ -114,6 +122,12 @@ public final class PushDecryptMessageJob extends BaseJob { public void onFailure() { } + private void handleSenderKeyDistributionMessage(@NonNull SignalServiceAddress address, int deviceId, @NonNull SenderKeyDistributionMessage message) { + Log.i(TAG, "Processing SenderKeyDistributionMessage."); + SignalServiceMessageSender sender = ApplicationDependencies.getSignalServiceMessageSender(); + sender.processSenderKeyDistributionMessage(new SignalProtocolAddress(address.getIdentifier(), deviceId), message); + } + private boolean needsMigration() { return !IdentityKeyUtil.hasIdentityKey(context) || TextSecurePreferences.getNeedsSqlCipherMigration(context); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/messages/MessageContentProcessor.java b/app/src/main/java/org/thoughtcrime/securesms/messages/MessageContentProcessor.java index c8613dc411..7bcfacb607 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messages/MessageContentProcessor.java +++ b/app/src/main/java/org/thoughtcrime/securesms/messages/MessageContentProcessor.java @@ -240,10 +240,6 @@ public final class MessageContentProcessor { log(String.valueOf(content.getTimestamp()), "Beginning message processing."); - if (content.getSenderKeyDistributionMessage().isPresent()) { - handleSenderKeyDistributionMessage(content.getSender(), content.getSenderDevice(), content.getSenderKeyDistributionMessage().get()); - } - if (content.getDataMessage().isPresent()) { GroupDatabase groupDatabase = DatabaseFactory.getGroupDatabase(context); SignalServiceDataMessage message = content.getDataMessage().get(); @@ -1660,12 +1656,6 @@ public final class MessageContentProcessor { } } - private void handleSenderKeyDistributionMessage(@NonNull SignalServiceAddress address, int deviceId, @NonNull SenderKeyDistributionMessage message) { - log("Processing SenderKeyDistributionMessage."); - SignalServiceMessageSender sender = ApplicationDependencies.getSignalServiceMessageSender(); - sender.processSenderKeyDistributionMessage(new SignalProtocolAddress(address.getIdentifier(), deviceId), message); - } - private void handleNeedsDeliveryReceipt(@NonNull SignalServiceContent content, @NonNull SignalServiceDataMessage message, @NonNull MessageId messageId)