diff --git a/SignalMessaging/profiles/ProfileFetcherJob.swift b/SignalMessaging/profiles/ProfileFetcherJob.swift index cfd2da60d..7d4830e1a 100644 --- a/SignalMessaging/profiles/ProfileFetcherJob.swift +++ b/SignalMessaging/profiles/ProfileFetcherJob.swift @@ -162,12 +162,19 @@ public class ProfileFetcherJob: NSObject { } private func updateUnidentifiedAccess(recipientId: String, verifier: Data?, hasUnrestrictedAccess: Bool) { + guard let verifier = verifier else { + // If there is no verifier, at least one of this user's devices + // do not support UD. + udManager.setUnidentifiedAccessMode(.disabled, recipientId: recipientId) + return + } + if hasUnrestrictedAccess { udManager.setUnidentifiedAccessMode(.unrestricted, recipientId: recipientId) return } - guard let verifier = verifier, let udAccessKey = udManager.rawUDAccessKeyForRecipient(recipientId) else { + guard let udAccessKey = udManager.rawUDAccessKeyForRecipient(recipientId) else { udManager.setUnidentifiedAccessMode(.disabled, recipientId: recipientId) return } diff --git a/SignalServiceKit/src/Messages/OWSMessageSender.m b/SignalServiceKit/src/Messages/OWSMessageSender.m index 5c5e7d999..efceb602e 100644 --- a/SignalServiceKit/src/Messages/OWSMessageSender.m +++ b/SignalServiceKit/src/Messages/OWSMessageSender.m @@ -1036,6 +1036,8 @@ NSString *const OWSMessageSenderRateLimitedException = @"RateLimitedException"; OWSLogWarn(@"Sending a message with no device messages."); } + OWSLogVerbose(@"Sending message; ud? %d %d.", messageSend.isUDSend, messageSend.unidentifiedAccess != nil); + // NOTE: canFailoverUDAuth is NO because UD-auth and Non-UD-auth requests // use different device lists. OWSRequestMaker *requestMaker = [[OWSRequestMaker alloc] @@ -1359,13 +1361,17 @@ NSString *const OWSMessageSenderRateLimitedException = @"RateLimitedException"; OWSLogDebug( @"built message: %@ plainTextData.length: %lu", [messageSend.message class], (unsigned long)plainText.length); - OWSLogDebug(@"recipient.devices: %@", recipient.devices); - [DDLog flushLog]; + OWSLogVerbose(@"building device messages for: %@ %@ (isLocalNumber: %d, isUDSend: %d)", + recipient.recipientId, + recipient.devices, + messageSend.isLocalNumber, + messageSend.isUDSend); NSMutableArray *deviceIds = [recipient.devices mutableCopy]; OWSAssertDebug(deviceIds); if (messageSend.isUDSend && messageSend.isLocalNumber) { + OWSLogVerbose(@"Adding device message for UD send to local device."); OWSAssertDebug(![deviceIds containsObject:@(OWSDevicePrimaryDeviceId)]); [deviceIds addObject:@(OWSDevicePrimaryDeviceId)]; diff --git a/SignalServiceKit/src/Messages/UD/OWSUDManager.swift b/SignalServiceKit/src/Messages/UD/OWSUDManager.swift index 9f6678ea5..8718a14e5 100644 --- a/SignalServiceKit/src/Messages/UD/OWSUDManager.swift +++ b/SignalServiceKit/src/Messages/UD/OWSUDManager.swift @@ -172,6 +172,12 @@ public class OWSUDManagerImpl: NSObject, OWSUDManager { @objc public func setUnidentifiedAccessMode(_ mode: UnidentifiedAccessMode, recipientId: String) { + if let localNumber = tsAccountManager.localNumber() { + if recipientId == localNumber { + Logger.info("Setting local UD access mode: \(mode.rawValue)") + } + } + dbConnection.setObject(mode.rawValue as Int, forKey: recipientId, inCollection: kUnidentifiedAccessCollection) }