diff --git a/Signal/src/AppDelegate.m b/Signal/src/AppDelegate.m index 101206a17..799874948 100644 --- a/Signal/src/AppDelegate.m +++ b/Signal/src/AppDelegate.m @@ -1394,12 +1394,15 @@ static NSTimeInterval launchStartedAt; NSString *userHexEncodedPublicKey = OWSIdentityManager.sharedManager.identityKeyPair.hexEncodedPublicKey; if (userHexEncodedPublicKey == nil) { return; } self.lokiPoller = [[LKPoller alloc] initOnMessagesReceived:^(NSArray *messages) { + if (messages.count != 0) { + [LKLogger print:@"[Loki] Received new messages."]; + } for (SSKProtoEnvelope *message in messages) { NSData *data = [message serializedDataAndReturnError:nil]; if (data != nil) { [SSKEnvironment.shared.messageReceiver handleReceivedEnvelopeData:data]; } else { - NSLog(@"[Loki] Failed to deserialize envelope."); + [LKLogger print:@"[Loki] Failed to deserialize envelope."]; } } }]; diff --git a/SignalServiceKit/src/Loki/Protocol/Friend Requests/LKFriendRequestMessage.m b/SignalServiceKit/src/Loki/Protocol/Friend Requests/LKFriendRequestMessage.m index 408d467e9..cca33718c 100644 --- a/SignalServiceKit/src/Loki/Protocol/Friend Requests/LKFriendRequestMessage.m +++ b/SignalServiceKit/src/Loki/Protocol/Friend Requests/LKFriendRequestMessage.m @@ -17,7 +17,7 @@ #pragma mark Building - (SSKProtoContentBuilder *)prepareCustomContentBuilder:(SignalRecipient *)recipient { - SSKProtoContentBuilder *contentBuilder = SSKProtoContent.builder; + SSKProtoContentBuilder *contentBuilder = [super prepareCustomContentBuilder:recipient]; // Attach the pre key bundle for the contact in question PreKeyBundle *preKeyBundle = [OWSPrimaryStorage.sharedManager generatePreKeyBundleForContact:recipient.recipientId]; SSKProtoPrekeyBundleMessageBuilder *preKeyBundleMessageBuilder = [SSKProtoPrekeyBundleMessage builderFromPreKeyBundle:preKeyBundle]; diff --git a/SignalServiceKit/src/Loki/Protocol/Meta/LKAddressMessage.m b/SignalServiceKit/src/Loki/Protocol/Meta/LKAddressMessage.m index bcfc005dc..cdfdb4516 100644 --- a/SignalServiceKit/src/Loki/Protocol/Meta/LKAddressMessage.m +++ b/SignalServiceKit/src/Loki/Protocol/Meta/LKAddressMessage.m @@ -27,7 +27,7 @@ #pragma mark Building - (SSKProtoContentBuilder *)prepareCustomContentBuilder:(SignalRecipient *)recipient { - SSKProtoContentBuilder *contentBuilder = SSKProtoContent.builder; + SSKProtoContentBuilder *contentBuilder = [super prepareCustomContentBuilder:recipient]; SSKProtoLokiAddressMessageBuilder *addressMessageBuilder = SSKProtoLokiAddressMessage.builder; [addressMessageBuilder setPtpAddress:self.address]; uint32_t portAsUInt32 = self.port; diff --git a/SignalServiceKit/src/Loki/Protocol/Multi Device/LKDeviceLinkMessage.m b/SignalServiceKit/src/Loki/Protocol/Multi Device/LKDeviceLinkMessage.m index 42949195d..ed2b6b180 100644 --- a/SignalServiceKit/src/Loki/Protocol/Multi Device/LKDeviceLinkMessage.m +++ b/SignalServiceKit/src/Loki/Protocol/Multi Device/LKDeviceLinkMessage.m @@ -35,7 +35,7 @@ #pragma mark Building - (SSKProtoContentBuilder *)prepareCustomContentBuilder:(SignalRecipient *)recipient { - SSKProtoContentBuilder *contentBuilder = SSKProtoContent.builder; + SSKProtoContentBuilder *contentBuilder = [super prepareCustomContentBuilder:recipient]; NSError *error; if (self.kind == LKDeviceLinkMessageKindRequest) { // The slave device attaches a pre key bundle with the request it sends, so that a diff --git a/SignalServiceKit/src/Loki/Protocol/Multi Device/MultiDeviceProtocol.swift b/SignalServiceKit/src/Loki/Protocol/Multi Device/MultiDeviceProtocol.swift index d6399222f..210fe4543 100644 --- a/SignalServiceKit/src/Loki/Protocol/Multi Device/MultiDeviceProtocol.swift +++ b/SignalServiceKit/src/Loki/Protocol/Multi Device/MultiDeviceProtocol.swift @@ -9,9 +9,6 @@ import PromiseKit // • Document the expected cases for everything. // • Express those cases in tests. -// FIXME: We're manually attaching the sender certificate and UD recipient access to message sends in a lot of places. It'd be great -// to clean this up and just do it in one spot. - @objc(LKMultiDeviceProtocol) public final class MultiDeviceProtocol : NSObject { @@ -49,15 +46,9 @@ public final class MultiDeviceProtocol : NSObject { storage.dbReadConnection.read { transaction in recipient = SignalRecipient.getOrBuildUnsavedRecipient(forRecipientId: destination.hexEncodedPublicKey, transaction: transaction) } - let udManager = SSKEnvironment.shared.udManager - let senderCertificate = udManager.getSenderCertificate() - var recipientUDAccess: OWSUDAccess? - if let senderCertificate = senderCertificate { - recipientUDAccess = udManager.udAccess(forRecipientId: destination.hexEncodedPublicKey, requireSyncAccess: true) // Starts a new write transaction internally - } - // TODO: Why is it okay that the thread doesn't get changed? + // TODO: Why is it okay that the thread, sender certificate, etc. don't get changed? return OWSMessageSend(message: messageSend.message, thread: messageSend.thread, recipient: recipient, - senderCertificate: senderCertificate, udAccess: recipientUDAccess, localNumber: messageSend.localNumber, success: { + senderCertificate: messageSend.senderCertificate, udAccess: messageSend.udAccess, localNumber: messageSend.localNumber, success: { seal.fulfill(()) }, failure: { error in seal.reject(error) @@ -76,7 +67,7 @@ public final class MultiDeviceProtocol : NSObject { threadPromiseSeal.fulfill(thread) } } - return threadPromise.then(on: DispatchQueue.main) { thread -> Promise in // Intentionally the main queue + return threadPromise.then(on: OWSDispatch.sendingQueue()) { thread -> Promise in let message = messageSend.message let messageSender = SSKEnvironment.shared.messageSender let (promise, seal) = Promise.pending() @@ -85,9 +76,7 @@ public final class MultiDeviceProtocol : NSObject { && message.shouldBeSaved() // shouldBeSaved indicates it isn't a transient message if !shouldSendAutoGeneratedFR { let messageSendCopy = copy(messageSend, for: destination, with: seal) - OWSDispatch.sendingQueue().async { - messageSender.sendMessage(messageSendCopy) - } + messageSender.sendMessage(messageSendCopy) } else { Storage.write { transaction in getAutoGeneratedMultiDeviceFRMessageSend(for: destination.hexEncodedPublicKey, in: transaction, seal: seal) @@ -142,20 +131,10 @@ public final class MultiDeviceProtocol : NSObject { messageSend.failure(errors.first!) } } - }.catch(on: DispatchQueue.main) { error in // Intentionally the main queue + }.catch(on: OWSDispatch.sendingQueue()) { error in // Proceed even if updating the recipient's device links failed, so that message sending // is independent of whether the file server is online - let udManager = SSKEnvironment.shared.udManager - let senderCertificate = udManager.getSenderCertificate() - var recipientUDAccess: OWSUDAccess? - if let senderCertificate = senderCertificate { - recipientUDAccess = udManager.udAccess(forRecipientId: recipientID, requireSyncAccess: true) // Starts a new write transaction internally - } - messageSend.senderCertificate = senderCertificate - messageSend.udAccess = recipientUDAccess - OWSDispatch.sendingQueue().async { - messageSender.sendMessage(messageSend) - } + messageSender.sendMessage(messageSend) } } diff --git a/SignalServiceKit/src/Messages/Interactions/OWSEndSessionMessage.m b/SignalServiceKit/src/Messages/Interactions/OWSEndSessionMessage.m index 821cc60bb..3a5420776 100644 --- a/SignalServiceKit/src/Messages/Interactions/OWSEndSessionMessage.m +++ b/SignalServiceKit/src/Messages/Interactions/OWSEndSessionMessage.m @@ -51,7 +51,7 @@ NS_ASSUME_NONNULL_BEGIN } - (SSKProtoContentBuilder *)prepareCustomContentBuilder:(SignalRecipient *)recipient { - SSKProtoContentBuilder *builder = SSKProtoContent.builder; + SSKProtoContentBuilder *builder = [super prepareCustomContentBuilder:recipient]; PreKeyBundle *bundle = [OWSPrimaryStorage.sharedManager generatePreKeyBundleForContact:recipient.recipientId]; SSKProtoPrekeyBundleMessageBuilder *preKeyBuilder = [SSKProtoPrekeyBundleMessage builderFromPreKeyBundle:bundle]; diff --git a/SignalServiceKit/src/Messages/OWSMessageSender.m b/SignalServiceKit/src/Messages/OWSMessageSender.m index a47de736e..95547d963 100644 --- a/SignalServiceKit/src/Messages/OWSMessageSender.m +++ b/SignalServiceKit/src/Messages/OWSMessageSender.m @@ -928,7 +928,6 @@ NSString *const OWSMessageSenderRateLimitedException = @"RateLimitedException"; { OWSAssertDebug(messageSend); OWSAssertDebug(messageSend.thread || [messageSend.message isKindOfClass:[OWSOutgoingSyncMessage class]]); - OWSAssertDebug(messageSend.isUDSend); TSOutgoingMessage *message = messageSend.message; SignalRecipient *recipient = messageSend.recipient;