From 92c462f55d63a2016bd1d0711a5deab057739fde Mon Sep 17 00:00:00 2001 From: nielsandriesse Date: Wed, 17 Jun 2020 14:39:53 +1000 Subject: [PATCH] Debug --- SignalServiceKit/src/Loki/API/LokiPoller.swift | 2 +- .../src/Loki/Database/OWSPrimaryStorage+Loki.m | 4 ++-- .../src/Loki/Database/Storage+Collections.swift | 2 ++ .../Friend Requests/FriendRequestProtocol.swift | 5 +---- .../Friend Requests/LKFriendRequestMessage.m | 2 +- .../Message Types/SessionRequestMessage.swift | 16 ++++++++++++++++ .../Protocol/Multi Device/LKDeviceLinkMessage.m | 2 +- .../SessionManagementProtocol.swift | 6 ------ .../Messages/Interactions/OWSEndSessionMessage.m | 2 +- .../Messages/Interactions/TSOutgoingMessage.h | 2 +- .../Messages/Interactions/TSOutgoingMessage.m | 2 +- SignalServiceKit/src/Messages/OWSMessageSender.m | 3 ++- 12 files changed, 29 insertions(+), 19 deletions(-) diff --git a/SignalServiceKit/src/Loki/API/LokiPoller.swift b/SignalServiceKit/src/Loki/API/LokiPoller.swift index c6dd2e6ac..84be750d9 100644 --- a/SignalServiceKit/src/Loki/API/LokiPoller.swift +++ b/SignalServiceKit/src/Loki/API/LokiPoller.swift @@ -60,7 +60,7 @@ public final class LokiPoller : NSObject { let (promise, seal) = Promise.pending() strongSelf.pollNextSnode(seal: seal) return promise - }.ensure(on: DispatchQueue.main) { [weak self] in + }.ensure(on: DispatchQueue.main) { [weak self] in // Timers don't do well on background queues guard let strongSelf = self, !strongSelf.hasStopped else { return } Timer.scheduledTimer(withTimeInterval: LokiPoller.retryInterval, repeats: false) { _ in guard let strongSelf = self else { return } diff --git a/SignalServiceKit/src/Loki/Database/OWSPrimaryStorage+Loki.m b/SignalServiceKit/src/Loki/Database/OWSPrimaryStorage+Loki.m index ca3a4527c..9700b752e 100644 --- a/SignalServiceKit/src/Loki/Database/OWSPrimaryStorage+Loki.m +++ b/SignalServiceKit/src/Loki/Database/OWSPrimaryStorage+Loki.m @@ -144,14 +144,14 @@ - (void)setPreKeyBundle:(PreKeyBundle *)bundle forContact:(NSString *)hexEncodedPublicKey transaction:(YapDatabaseReadWriteTransaction *)transaction { [transaction setObject:bundle forKey:hexEncodedPublicKey inCollection:LKPreKeyBundleCollection]; - [LKLogger print:[NSString stringWithFormat:@"[Loki] Stored pre key bundle for: %@.", hexEncodedPublicKey]]; + [LKLogger print:[NSString stringWithFormat:@"[Loki] Stored pre key bundle from: %@.", hexEncodedPublicKey]]; // FIXME: I don't think the line below is good for anything [transaction.connection flushTransactionsWithCompletionQueue:dispatch_get_main_queue() completionBlock:^{ }]; } - (void)removePreKeyBundleForContact:(NSString *)hexEncodedPublicKey transaction:(YapDatabaseReadWriteTransaction *)transaction { [transaction removeObjectForKey:hexEncodedPublicKey inCollection:LKPreKeyBundleCollection]; - [LKLogger print:[NSString stringWithFormat:@"[Loki] Removed pre key bundle for: %@.", hexEncodedPublicKey]]; + [LKLogger print:[NSString stringWithFormat:@"[Loki] Removed pre key bundle from: %@.", hexEncodedPublicKey]]; } # pragma mark - Last Message Hash diff --git a/SignalServiceKit/src/Loki/Database/Storage+Collections.swift b/SignalServiceKit/src/Loki/Database/Storage+Collections.swift index 7c89c1a8c..11cdb6d71 100644 --- a/SignalServiceKit/src/Loki/Database/Storage+Collections.swift +++ b/SignalServiceKit/src/Loki/Database/Storage+Collections.swift @@ -1,4 +1,6 @@ +// TODO: Create an extension for each category, e.g. Storage+OpenGroups, Storage+SnodePool, etc. + @objc public extension Storage { // TODO: Add remaining collections diff --git a/SignalServiceKit/src/Loki/Protocol/Friend Requests/FriendRequestProtocol.swift b/SignalServiceKit/src/Loki/Protocol/Friend Requests/FriendRequestProtocol.swift index c0069a9e3..c0994a53c 100644 --- a/SignalServiceKit/src/Loki/Protocol/Friend Requests/FriendRequestProtocol.swift +++ b/SignalServiceKit/src/Loki/Protocol/Friend Requests/FriendRequestProtocol.swift @@ -259,10 +259,7 @@ public final class FriendRequestProtocol : NSObject { return } let hexEncodedPublicKey = envelope.source! // Set during UD decryption - guard envelope.type == .friendRequest else { // Set during UD decryption - print("[Loki] Ignoring friend request logic for non friend request type envelope.") - return - } + guard envelope.type == .friendRequest else { return } // Set during UD decryption if canFriendRequestBeAutoAccepted(for: hexEncodedPublicKey, using: transaction) { storage.setFriendRequestStatus(.friends, for: hexEncodedPublicKey, transaction: transaction) sendFriendRequestAcceptedMessage(to: hexEncodedPublicKey, using: transaction) diff --git a/SignalServiceKit/src/Loki/Protocol/Friend Requests/LKFriendRequestMessage.m b/SignalServiceKit/src/Loki/Protocol/Friend Requests/LKFriendRequestMessage.m index cca33718c..d3ea53524 100644 --- a/SignalServiceKit/src/Loki/Protocol/Friend Requests/LKFriendRequestMessage.m +++ b/SignalServiceKit/src/Loki/Protocol/Friend Requests/LKFriendRequestMessage.m @@ -16,7 +16,7 @@ } #pragma mark Building -- (SSKProtoContentBuilder *)prepareCustomContentBuilder:(SignalRecipient *)recipient { +- (nullable id)prepareCustomContentBuilder:(SignalRecipient *)recipient { SSKProtoContentBuilder *contentBuilder = [super prepareCustomContentBuilder:recipient]; // Attach the pre key bundle for the contact in question PreKeyBundle *preKeyBundle = [OWSPrimaryStorage.sharedManager generatePreKeyBundleForContact:recipient.recipientId]; diff --git a/SignalServiceKit/src/Loki/Protocol/Message Types/SessionRequestMessage.swift b/SignalServiceKit/src/Loki/Protocol/Message Types/SessionRequestMessage.swift index 186aad7ac..4f9f5008c 100644 --- a/SignalServiceKit/src/Loki/Protocol/Message Types/SessionRequestMessage.swift +++ b/SignalServiceKit/src/Loki/Protocol/Message Types/SessionRequestMessage.swift @@ -26,4 +26,20 @@ internal final class SessionRequestMessage : TSOutgoingMessage { builder.setFlags(UInt32(SSKProtoDataMessage.SSKProtoDataMessageFlags.sessionRequest.rawValue)) return builder } + + override func prepareCustomContentBuilder(_ recipient: SignalRecipient) -> Any? { + guard let contentBuilder = super.prepareCustomContentBuilder(recipient) as? SSKProtoContent.SSKProtoContentBuilder else { return nil } + // Generate a pre key bundle for the recipient and attach it + let preKeyBundle = OWSPrimaryStorage.shared().generatePreKeyBundle(forContact: recipient.recipientId()) + let preKeyBundleMessageBuilder = SSKProtoPrekeyBundleMessage.builder(from: preKeyBundle) + do { + let preKeyBundleMessage = try preKeyBundleMessageBuilder.build() + contentBuilder.setPrekeyBundleMessage(preKeyBundleMessage) + } catch { + owsFailDebug("Failed to build pre key bundle message for: \(recipient.recipientId()) due to error: \(error).") + return nil + } + // Return + return contentBuilder + } } diff --git a/SignalServiceKit/src/Loki/Protocol/Multi Device/LKDeviceLinkMessage.m b/SignalServiceKit/src/Loki/Protocol/Multi Device/LKDeviceLinkMessage.m index ed2b6b180..bf25c09d7 100644 --- a/SignalServiceKit/src/Loki/Protocol/Multi Device/LKDeviceLinkMessage.m +++ b/SignalServiceKit/src/Loki/Protocol/Multi Device/LKDeviceLinkMessage.m @@ -34,7 +34,7 @@ } #pragma mark Building -- (SSKProtoContentBuilder *)prepareCustomContentBuilder:(SignalRecipient *)recipient { +- (nullable id)prepareCustomContentBuilder:(SignalRecipient *)recipient { SSKProtoContentBuilder *contentBuilder = [super prepareCustomContentBuilder:recipient]; NSError *error; if (self.kind == LKDeviceLinkMessageKindRequest) { diff --git a/SignalServiceKit/src/Loki/Protocol/Session Management/SessionManagementProtocol.swift b/SignalServiceKit/src/Loki/Protocol/Session Management/SessionManagementProtocol.swift index 4c82f3810..27cc29f67 100644 --- a/SignalServiceKit/src/Loki/Protocol/Session Management/SessionManagementProtocol.swift +++ b/SignalServiceKit/src/Loki/Protocol/Session Management/SessionManagementProtocol.swift @@ -15,12 +15,6 @@ public final class SessionManagementProtocol : NSObject { internal static var storage: OWSPrimaryStorage { OWSPrimaryStorage.shared() } // MARK: - General - // BEHAVIOR NOTE: OWSMessageSender.throws_encryptedMessageForMessageSend:recipientId:plaintext:transaction: sets - // isFriendRequest to true if the message in question is a friend request or a device linking request, but NOT if - // it's a session request. - - // TODO: Does the above make sense? - @objc(createPreKeys) public static func createPreKeys() { // We don't generate new pre keys here like Signal does. diff --git a/SignalServiceKit/src/Messages/Interactions/OWSEndSessionMessage.m b/SignalServiceKit/src/Messages/Interactions/OWSEndSessionMessage.m index 1900fafd6..4138f194b 100644 --- a/SignalServiceKit/src/Messages/Interactions/OWSEndSessionMessage.m +++ b/SignalServiceKit/src/Messages/Interactions/OWSEndSessionMessage.m @@ -50,7 +50,7 @@ NS_ASSUME_NONNULL_BEGIN return builder; } -- (SSKProtoContentBuilder *)prepareCustomContentBuilder:(SignalRecipient *)recipient { +- (nullable id)prepareCustomContentBuilder:(SignalRecipient *)recipient { SSKProtoContentBuilder *builder = [super prepareCustomContentBuilder:recipient]; PreKeyBundle *bundle = [OWSPrimaryStorage.sharedManager generatePreKeyBundleForContact:recipient.recipientId]; diff --git a/SignalServiceKit/src/Messages/Interactions/TSOutgoingMessage.h b/SignalServiceKit/src/Messages/Interactions/TSOutgoingMessage.h index cfefe7249..8ea563e7b 100644 --- a/SignalServiceKit/src/Messages/Interactions/TSOutgoingMessage.h +++ b/SignalServiceKit/src/Messages/Interactions/TSOutgoingMessage.h @@ -164,7 +164,7 @@ typedef NS_ENUM(NSInteger, TSGroupMetaMessage) { /** * Allows subclasses to supply a custom content builder that has already prepared part of the message. */ -- (SSKProtoContentBuilder *)prepareCustomContentBuilder:(SignalRecipient *)recipient; +- (nullable id)prepareCustomContentBuilder:(SignalRecipient *)recipient; /** * Should this message be synced to the users other registered devices? This is diff --git a/SignalServiceKit/src/Messages/Interactions/TSOutgoingMessage.m b/SignalServiceKit/src/Messages/Interactions/TSOutgoingMessage.m index f7bad61f8..3422bc08f 100644 --- a/SignalServiceKit/src/Messages/Interactions/TSOutgoingMessage.m +++ b/SignalServiceKit/src/Messages/Interactions/TSOutgoingMessage.m @@ -1124,7 +1124,7 @@ NSString *NSStringForOutgoingMessageRecipientState(OWSOutgoingMessageRecipientSt return dataProto; } -- (SSKProtoContentBuilder *)prepareCustomContentBuilder:(SignalRecipient *)recipient { +- (nullable id)prepareCustomContentBuilder:(SignalRecipient *)recipient { SSKProtoDataMessage *_Nullable dataMessage = [self buildDataMessage:recipient.recipientId]; if (!dataMessage) { diff --git a/SignalServiceKit/src/Messages/OWSMessageSender.m b/SignalServiceKit/src/Messages/OWSMessageSender.m index 281160c74..f03a91d70 100644 --- a/SignalServiceKit/src/Messages/OWSMessageSender.m +++ b/SignalServiceKit/src/Messages/OWSMessageSender.m @@ -1887,6 +1887,7 @@ NSString *const OWSMessageSenderRateLimitedException = @"RateLimitedException"; } BOOL isFriendRequestMessage = [messageSend.message isKindOfClass:LKFriendRequestMessage.class]; + BOOL isSessionRequestMessage = [messageSend.message isKindOfClass:LKSessionRequestMessage.class]; BOOL isDeviceLinkMessage = [messageSend.message isKindOfClass:LKDeviceLinkMessage.class] && ((LKDeviceLinkMessage *)messageSend.message).kind == LKDeviceLinkMessageKindRequest; @@ -1916,7 +1917,7 @@ NSString *const OWSMessageSenderRateLimitedException = @"RateLimitedException"; paddedPlaintext:[plainText paddedMessageBody] senderCertificate:messageSend.senderCertificate protocolContext:transaction - useFallbackSessionCipher:isFriendRequestMessage || isDeviceLinkMessage + useFallbackSessionCipher:isFriendRequestMessage || isSessionRequestMessage || isDeviceLinkMessage error:&error]; SCKRaiseIfExceptionWrapperError(error);