Add missing pieces

pull/228/head
nielsandriesse 4 years ago
parent 450c100896
commit 33f754949d

@ -1 +1 @@
Subproject commit 7753c413dc4efcfdab0e5f41e3245dd547dada7c
Subproject commit 6d307f51039509e814d70c48527f69f7b850e6da

@ -3922,6 +3922,12 @@ typedef enum : NSUInteger {
BOOL didAddToProfileWhitelist = [ThreadUtil addThreadToProfileWhitelistIfEmptyContactThread:self.thread];
if ([self.thread isKindOfClass:TSContactThread.class]) {
[LKStorage writeSyncWithBlock:^(YapDatabaseReadWriteTransaction *transaction) {
[LKSessionManagementProtocol sendSessionRequestIfNeededToPublicKey:self.thread.contactIdentifier transaction:transaction];
} error:nil];
}
__block TSOutgoingMessage *message;
[self.uiDatabaseConnection readWithBlock:^(YapDatabaseReadTransaction *_Nonnull transaction) {
message = [ThreadUtil enqueueMessageWithText:messageText
@ -4507,6 +4513,12 @@ typedef enum : NSUInteger {
return;
}
if ([self.thread isKindOfClass:TSContactThread.class]) {
[LKStorage writeSyncWithBlock:^(YapDatabaseReadWriteTransaction *transaction) {
[LKSessionManagementProtocol sendSessionRequestIfNeededToPublicKey:self.thread.contactIdentifier transaction:transaction];
} error:nil];
}
// Limit outgoing text messages to 16kb.
//
// We convert large text messages to attachments

@ -60,9 +60,11 @@ public final class SessionManagementProtocol : NSObject {
// MARK: - Sending
@objc(shouldUseFallbackEncryptionForMessage:)
public static func shouldUseFallbackEncryption(for message: TSOutgoingMessage) -> Bool {
return true
@objc(shouldUseFallbackEncryptionForMessage:recipientID:transaction:)
public static func shouldUseFallbackEncryption(for message: TSOutgoingMessage, recipientID: String, transaction: YapDatabaseReadWriteTransaction) -> Bool {
if message is SessionRequestMessage { return true }
else if let message = message as? DeviceLinkMessage, message.kind == .request { return true }
return !storage.containsSession(recipientID, deviceId: Int32(OWSDevicePrimaryDeviceId), protocolContext: transaction)
}
private static func hasSentSessionRequestExpired(for publicKey: String) -> Bool {
@ -71,6 +73,7 @@ public final class SessionManagementProtocol : NSObject {
return NSDate.ows_millisecondTimeStamp() > expiration
}
@objc(sendSessionRequestIfNeededToPublicKey:transaction:)
public static func sendSessionRequestIfNeeded(to publicKey: String, using transaction: YapDatabaseReadWriteTransaction) {
// It's never necessary to establish a session with self
guard publicKey != getUserHexEncodedPublicKey() else { return }
@ -93,9 +96,6 @@ public final class SessionManagementProtocol : NSObject {
let sessionRequestMessage = SessionRequestMessage(thread: thread)
let messageSenderJobQueue = SSKEnvironment.shared.messageSenderJobQueue
messageSenderJobQueue.add(message: sessionRequestMessage, transaction: transaction)
// aushfiuasfhiujoasf
// TODO: Handle failure
}
@objc(sendNullMessageToPublicKey:transaction:)

@ -1433,7 +1433,10 @@ NSString *const OWSMessageSenderRateLimitedException = @"RateLimitedException";
messageSend.isUDSend);
@try {
BOOL isSessionRequired = ![LKSessionManagementProtocol shouldUseFallbackEncryptionForMessage:messageSend.message];
__block BOOL isSessionRequired;
[LKStorage writeSyncWithBlock:^(YapDatabaseReadWriteTransaction *transaction) {
isSessionRequired = ![LKSessionManagementProtocol shouldUseFallbackEncryptionForMessage:messageSend.message recipientID:recipientID transaction:transaction];
} error:nil];
if (isSessionRequired) {
BOOL hasSession = [self throws_ensureRecipientHasSessionForMessageSend:messageSend recipientID:recipientID deviceId:@(OWSDevicePrimaryDeviceId)];
@ -1634,7 +1637,7 @@ NSString *const OWSMessageSenderRateLimitedException = @"RateLimitedException";
//Alice receives this, sets up her Signal cipher session locally, and sends any subsequent messages
// using Signal encryption.
BOOL shouldUseFallbackEncryption = [LKSessionManagementProtocol shouldUseFallbackEncryptionForMessage:message];
BOOL shouldUseFallbackEncryption = [LKSessionManagementProtocol shouldUseFallbackEncryptionForMessage:message recipientID:recipientID transaction:transaction];
serializedMessage = [secretCipher throwswrapped_encryptMessageWithRecipientPublicKey:recipientID
deviceID:@(OWSDevicePrimaryDeviceId).intValue

@ -203,7 +203,16 @@ public class MessageSenderOperation: OWSOperation, DurableOperation {
}
override public func didReportError(_ error: Error) {
let message = self.message
var isFailedSessionRequest = false
if message is SessionRequestMessage, let publicKey = message.thread.contactIdentifier() {
isFailedSessionRequest = (Storage.getSessionRequestSentTimestamp(for: publicKey) == message.timestamp)
}
try! Storage.writeSync { transaction in
if isFailedSessionRequest, let publicKey = message.thread.contactIdentifier() {
Storage.setSessionRequestSentTimestamp(for: publicKey, to: 0, using: transaction)
}
self.durableOperationDelegate?.durableOperation(self, didReportError: error, transaction: transaction)
}
}
@ -225,7 +234,16 @@ public class MessageSenderOperation: OWSOperation, DurableOperation {
}
override public func didFail(error: Error) {
let message = self.message
var isFailedSessionRequest = false
if message is SessionRequestMessage, let publicKey = message.thread.contactIdentifier() {
isFailedSessionRequest = (Storage.getSessionRequestSentTimestamp(for: publicKey) == message.timestamp)
}
try! Storage.writeSync { transaction in
if isFailedSessionRequest, let publicKey = message.thread.contactIdentifier() {
Storage.setSessionRequestSentTimestamp(for: publicKey, to: 0, using: transaction)
}
self.durableOperationDelegate?.durableOperation(self, didFailWithError: error, transaction: transaction)
self.message.update(sendingError: error, transaction: transaction)

Loading…
Cancel
Save