pull/220/head
nielsandriesse 5 years ago
parent 8a7b95d21f
commit 92c462f55d

@ -60,7 +60,7 @@ public final class LokiPoller : NSObject {
let (promise, seal) = Promise<Void>.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 }

@ -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

@ -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

@ -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)

@ -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];

@ -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
}
}

@ -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) {

@ -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.

@ -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];

@ -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

@ -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) {

@ -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);

Loading…
Cancel
Save