From 3b355356283442974bdb5597549f5a0323675b0c Mon Sep 17 00:00:00 2001 From: nielsandriesse Date: Tue, 5 May 2020 16:49:48 +1000 Subject: [PATCH] Don't send AFRs to self --- .../Loki/Protocol/Friend Requests/FriendRequestProtocol.swift | 2 +- .../src/Loki/Protocol/Multi Device/MultiDeviceProtocol.swift | 2 +- .../src/Loki/Protocol/Sync Messages/SyncMessagesProtocol.swift | 2 ++ 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/SignalServiceKit/src/Loki/Protocol/Friend Requests/FriendRequestProtocol.swift b/SignalServiceKit/src/Loki/Protocol/Friend Requests/FriendRequestProtocol.swift index b31609720..923711449 100644 --- a/SignalServiceKit/src/Loki/Protocol/Friend Requests/FriendRequestProtocol.swift +++ b/SignalServiceKit/src/Loki/Protocol/Friend Requests/FriendRequestProtocol.swift @@ -125,7 +125,7 @@ public final class FriendRequestProtocol : NSObject { syncManager.syncContact(masterHexEncodedPublicKey, transaction: transaction) } else if friendRequestStatus == .requestSent { // We sent a friend request to this device before, how can we be sure that it hasn't expired? - } else if friendRequestStatus == .none || friendRequestStatus == .requestExpired { + } else if !userLinkedDevices.contains(device) && (friendRequestStatus == .none || friendRequestStatus == .requestExpired) { // TODO: We should track these so that we can expire them and resend if needed MultiDeviceProtocol.getAutoGeneratedMultiDeviceFRMessageSend(for: device, in: transaction) .done(on: OWSDispatch.sendingQueue()) { autoGeneratedFRMessageSend in diff --git a/SignalServiceKit/src/Loki/Protocol/Multi Device/MultiDeviceProtocol.swift b/SignalServiceKit/src/Loki/Protocol/Multi Device/MultiDeviceProtocol.swift index ce8f31eec..16d629705 100644 --- a/SignalServiceKit/src/Loki/Protocol/Multi Device/MultiDeviceProtocol.swift +++ b/SignalServiceKit/src/Loki/Protocol/Multi Device/MultiDeviceProtocol.swift @@ -73,7 +73,7 @@ public final class MultiDeviceProtocol : NSObject { let messageSender = SSKEnvironment.shared.messageSender let (promise, seal) = Promise.pending() let shouldSendAutoGeneratedFR = !thread.isContactFriend && !(message is FriendRequestMessage) - && message.shouldBeSaved() // shouldBeSaved indicates it isn't a transient message + && !SessionMetaProtocol.isThreadNoteToSelf(thread) && message.shouldBeSaved() // shouldBeSaved indicates it isn't a transient message if !shouldSendAutoGeneratedFR { let messageSendCopy = copy(messageSend, for: destination, with: seal) messageSender.sendMessage(messageSendCopy) diff --git a/SignalServiceKit/src/Loki/Protocol/Sync Messages/SyncMessagesProtocol.swift b/SignalServiceKit/src/Loki/Protocol/Sync Messages/SyncMessagesProtocol.swift index 15a404543..38547a26e 100644 --- a/SignalServiceKit/src/Loki/Protocol/Sync Messages/SyncMessagesProtocol.swift +++ b/SignalServiceKit/src/Loki/Protocol/Sync Messages/SyncMessagesProtocol.swift @@ -165,8 +165,10 @@ public final class SyncMessagesProtocol : NSObject { public static func handleContactSyncMessageData(_ data: Data, using transaction: YapDatabaseReadWriteTransaction) { let parser = ContactParser(data: data) let hexEncodedPublicKeys = parser.parseHexEncodedPublicKeys() + let linkedDevices = LokiDatabaseUtilities.getLinkedDeviceHexEncodedPublicKeys(for: getUserHexEncodedPublicKey(), in: transaction) // Try to establish sessions for hexEncodedPublicKey in hexEncodedPublicKeys { + guard !linkedDevices.contains(hexEncodedPublicKey) else { continue } // Skip self // We don't update the friend request status; that's done in OWSMessageSender.sendMessage(_:) let friendRequestStatus = storage.getFriendRequestStatus(for: hexEncodedPublicKey, transaction: transaction) switch friendRequestStatus {