From d742d0aeaaf9dbe27c8a8184bdd76e471c3ff480 Mon Sep 17 00:00:00 2001 From: nielsandriesse Date: Fri, 1 May 2020 10:00:10 +1000 Subject: [PATCH] Take into account multi device when counting duplicates --- .../src/Messages/OWSMessageManager.m | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/SignalServiceKit/src/Messages/OWSMessageManager.m b/SignalServiceKit/src/Messages/OWSMessageManager.m index 41aca5b63..33469a9bf 100644 --- a/SignalServiceKit/src/Messages/OWSMessageManager.m +++ b/SignalServiceKit/src/Messages/OWSMessageManager.m @@ -404,10 +404,21 @@ NS_ASSUME_NONNULL_BEGIN return; } - BOOL duplicateEnvelope = [self.incomingMessageFinder existsMessageWithTimestamp:envelope.timestamp - sourceId:envelope.source - sourceDeviceId:envelope.sourceDevice - transaction:transaction]; + OWSPrimaryStorage *storage = OWSPrimaryStorage.sharedManager; + __block NSSet *linkedDeviceHexEncodedPublicKeys; + [storage.dbReadConnection readWithBlock:^(YapDatabaseReadTransaction *transaction) { + linkedDeviceHexEncodedPublicKeys = [LKDatabaseUtilities getLinkedDeviceHexEncodedPublicKeysFor:envelope.source in:transaction]; + }]; + + BOOL duplicateEnvelope = NO; + for (NSString *hexEncodedPublicKey in linkedDeviceHexEncodedPublicKeys) { + duplicateEnvelope = duplicateEnvelope + || [self.incomingMessageFinder existsMessageWithTimestamp:envelope.timestamp + sourceId:hexEncodedPublicKey + sourceDeviceId:envelope.sourceDevice + transaction:transaction]; + } + if (duplicateEnvelope) { OWSLogInfo(@"Ignoring previously received envelope from: %@ with timestamp: %llu.", envelopeAddress(envelope),