Merge branch 'charlesmchen/ud6'
This commit is contained in:
commit
bfbd418cb1
|
@ -1045,8 +1045,8 @@ static NSTimeInterval launchStartedAt;
|
||||||
[Environment.shared.contactsManager startObserving];
|
[Environment.shared.contactsManager startObserving];
|
||||||
|
|
||||||
// If there were any messages in our local queue which we hadn't yet processed.
|
// If there were any messages in our local queue which we hadn't yet processed.
|
||||||
[[OWSMessageReceiver sharedInstance] handleAnyUnprocessedEnvelopesAsync];
|
[SSKEnvironment.shared.messageReceiver handleAnyUnprocessedEnvelopesAsync];
|
||||||
[[OWSBatchMessageProcessor sharedInstance] handleAnyUnprocessedEnvelopesAsync];
|
[SSKEnvironment.shared.batchMessageProcessor handleAnyUnprocessedEnvelopesAsync];
|
||||||
|
|
||||||
if (!Environment.shared.preferences.hasGeneratedThumbnails) {
|
if (!Environment.shared.preferences.hasGeneratedThumbnails) {
|
||||||
[OWSPrimaryStorage.sharedManager.newDatabaseConnection
|
[OWSPrimaryStorage.sharedManager.newDatabaseConnection
|
||||||
|
|
|
@ -12,13 +12,9 @@ public class MessageFetcherJob: NSObject {
|
||||||
private var timer: Timer?
|
private var timer: Timer?
|
||||||
|
|
||||||
// MARK: injected dependencies
|
// MARK: injected dependencies
|
||||||
private let networkManager: TSNetworkManager
|
|
||||||
private let messageReceiver: OWSMessageReceiver
|
|
||||||
private let signalService: OWSSignalService
|
private let signalService: OWSSignalService
|
||||||
|
|
||||||
@objc public init(messageReceiver: OWSMessageReceiver, networkManager: TSNetworkManager, signalService: OWSSignalService) {
|
@objc public init(signalService: OWSSignalService) {
|
||||||
self.messageReceiver = messageReceiver
|
|
||||||
self.networkManager = networkManager
|
|
||||||
self.signalService = signalService
|
self.signalService = signalService
|
||||||
|
|
||||||
super.init()
|
super.init()
|
||||||
|
@ -26,6 +22,18 @@ public class MessageFetcherJob: NSObject {
|
||||||
SwiftSingletons.register(self)
|
SwiftSingletons.register(self)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// MARK: Singletons
|
||||||
|
|
||||||
|
private var networkManager: TSNetworkManager {
|
||||||
|
return SSKEnvironment.shared.networkManager
|
||||||
|
}
|
||||||
|
|
||||||
|
private var messageReceiver: OWSMessageReceiver {
|
||||||
|
return SSKEnvironment.shared.messageReceiver
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK:
|
||||||
|
|
||||||
@discardableResult
|
@discardableResult
|
||||||
public func run() -> Promise<Void> {
|
public func run() -> Promise<Void> {
|
||||||
Logger.debug("")
|
Logger.debug("")
|
||||||
|
|
|
@ -3912,9 +3912,9 @@ typedef OWSContact * (^OWSContactBlock)(YapDatabaseReadWriteTransaction *transac
|
||||||
}
|
}
|
||||||
|
|
||||||
[OWSPrimaryStorage.dbReadWriteConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) {
|
[OWSPrimaryStorage.dbReadWriteConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) {
|
||||||
[[OWSBatchMessageProcessor sharedInstance] enqueueEnvelopeData:envelopeData
|
[SSKEnvironment.shared.batchMessageProcessor enqueueEnvelopeData:envelopeData
|
||||||
plaintextData:plaintextData
|
plaintextData:plaintextData
|
||||||
transaction:transaction];
|
transaction:transaction];
|
||||||
}];
|
}];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -87,9 +87,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||||
[[OutboundCallInitiator alloc] initWithContactsManager:Environment.shared.contactsManager
|
[[OutboundCallInitiator alloc] initWithContactsManager:Environment.shared.contactsManager
|
||||||
contactsUpdater:SSKEnvironment.shared.contactsUpdater];
|
contactsUpdater:SSKEnvironment.shared.contactsUpdater];
|
||||||
|
|
||||||
_messageFetcherJob = [[OWSMessageFetcherJob alloc] initWithMessageReceiver:[OWSMessageReceiver sharedInstance]
|
_messageFetcherJob = [[OWSMessageFetcherJob alloc] initWithSignalService:[OWSSignalService sharedInstance]];
|
||||||
networkManager:SSKEnvironment.shared.networkManager
|
|
||||||
signalService:[OWSSignalService sharedInstance]];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
- (OWSWebRTCCallMessageHandler *)callMessageHandler
|
- (OWSWebRTCCallMessageHandler *)callMessageHandler
|
||||||
|
|
|
@ -10,9 +10,12 @@
|
||||||
#import <SignalMessaging/OWSProfileManager.h>
|
#import <SignalMessaging/OWSProfileManager.h>
|
||||||
#import <SignalMessaging/SignalMessaging-Swift.h>
|
#import <SignalMessaging/SignalMessaging-Swift.h>
|
||||||
#import <SignalServiceKit/OWSBackgroundTask.h>
|
#import <SignalServiceKit/OWSBackgroundTask.h>
|
||||||
|
#import <SignalServiceKit/OWSBatchMessageProcessor.h>
|
||||||
#import <SignalServiceKit/OWSBlockingManager.h>
|
#import <SignalServiceKit/OWSBlockingManager.h>
|
||||||
#import <SignalServiceKit/OWSIdentityManager.h>
|
#import <SignalServiceKit/OWSIdentityManager.h>
|
||||||
|
#import <SignalServiceKit/OWSMessageDecrypter.h>
|
||||||
#import <SignalServiceKit/OWSMessageManager.h>
|
#import <SignalServiceKit/OWSMessageManager.h>
|
||||||
|
#import <SignalServiceKit/OWSMessageReceiver.h>
|
||||||
#import <SignalServiceKit/OWSStorage.h>
|
#import <SignalServiceKit/OWSStorage.h>
|
||||||
#import <SignalServiceKit/SSKEnvironment.h>
|
#import <SignalServiceKit/SSKEnvironment.h>
|
||||||
|
|
||||||
|
@ -55,6 +58,10 @@ NS_ASSUME_NONNULL_BEGIN
|
||||||
OWSBlockingManager *blockingManager = [[OWSBlockingManager alloc] initWithPrimaryStorage:primaryStorage];
|
OWSBlockingManager *blockingManager = [[OWSBlockingManager alloc] initWithPrimaryStorage:primaryStorage];
|
||||||
OWSIdentityManager *identityManager = [[OWSIdentityManager alloc] initWithPrimaryStorage:primaryStorage];
|
OWSIdentityManager *identityManager = [[OWSIdentityManager alloc] initWithPrimaryStorage:primaryStorage];
|
||||||
id<OWSUDManager> udManager = [[OWSUDManagerImpl alloc] initWithPrimaryStorage:primaryStorage];
|
id<OWSUDManager> udManager = [[OWSUDManagerImpl alloc] initWithPrimaryStorage:primaryStorage];
|
||||||
|
OWSMessageDecrypter *messageDecrypter = [[OWSMessageDecrypter alloc] initWithPrimaryStorage:primaryStorage];
|
||||||
|
OWSBatchMessageProcessor *batchMessageProcessor =
|
||||||
|
[[OWSBatchMessageProcessor alloc] initWithPrimaryStorage:primaryStorage];
|
||||||
|
OWSMessageReceiver *messageReceiver = [[OWSMessageReceiver alloc] initWithPrimaryStorage:primaryStorage];
|
||||||
|
|
||||||
[Environment setShared:[[Environment alloc] initWithPreferences:preferences]];
|
[Environment setShared:[[Environment alloc] initWithPreferences:preferences]];
|
||||||
|
|
||||||
|
@ -67,7 +74,10 @@ NS_ASSUME_NONNULL_BEGIN
|
||||||
messageManager:messageManager
|
messageManager:messageManager
|
||||||
blockingManager:blockingManager
|
blockingManager:blockingManager
|
||||||
identityManager:identityManager
|
identityManager:identityManager
|
||||||
udManager:udManager]];
|
udManager:udManager
|
||||||
|
messageDecrypter:messageDecrypter
|
||||||
|
batchMessageProcessor:batchMessageProcessor
|
||||||
|
messageReceiver:messageReceiver]];
|
||||||
|
|
||||||
appSpecificSingletonBlock();
|
appSpecificSingletonBlock();
|
||||||
|
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
#import "OWSMessageReceiver.h"
|
#import "OWSMessageReceiver.h"
|
||||||
#import "OWSPrimaryStorage+SessionStore.h"
|
#import "OWSPrimaryStorage+SessionStore.h"
|
||||||
#import "OWSPrimaryStorage.h"
|
#import "OWSPrimaryStorage.h"
|
||||||
|
#import "SSKEnvironment.h"
|
||||||
#import "TSContactThread.h"
|
#import "TSContactThread.h"
|
||||||
#import "TSDatabaseView.h"
|
#import "TSDatabaseView.h"
|
||||||
#import "TSErrorMessage_privateConstructor.h"
|
#import "TSErrorMessage_privateConstructor.h"
|
||||||
|
@ -102,7 +103,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||||
[self.thread receivedMessagesForInvalidKey:newKey];
|
[self.thread receivedMessagesForInvalidKey:newKey];
|
||||||
|
|
||||||
for (TSInvalidIdentityKeyReceivingErrorMessage *errorMessage in messagesToDecrypt) {
|
for (TSInvalidIdentityKeyReceivingErrorMessage *errorMessage in messagesToDecrypt) {
|
||||||
[[OWSMessageReceiver sharedInstance] handleReceivedEnvelopeData:errorMessage.envelopeData];
|
[SSKEnvironment.shared.messageReceiver handleReceivedEnvelopeData:errorMessage.envelopeData];
|
||||||
|
|
||||||
// Here we remove the existing error message because handleReceivedEnvelope will either
|
// Here we remove the existing error message because handleReceivedEnvelope will either
|
||||||
// 1.) succeed and create a new successful message in the thread or...
|
// 1.) succeed and create a new successful message in the thread or...
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
|
|
||||||
NS_ASSUME_NONNULL_BEGIN
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
|
||||||
|
@class OWSPrimaryStorage;
|
||||||
@class OWSStorage;
|
@class OWSStorage;
|
||||||
@class SSKProtoEnvelope;
|
@class SSKProtoEnvelope;
|
||||||
@class YapDatabaseReadWriteTransaction;
|
@class YapDatabaseReadWriteTransaction;
|
||||||
|
@ -13,7 +14,8 @@ NS_ASSUME_NONNULL_BEGIN
|
||||||
// in the order in which they were received.
|
// in the order in which they were received.
|
||||||
@interface OWSBatchMessageProcessor : NSObject
|
@interface OWSBatchMessageProcessor : NSObject
|
||||||
|
|
||||||
+ (instancetype)sharedInstance;
|
- (instancetype)init NS_UNAVAILABLE;
|
||||||
|
- (instancetype)initWithPrimaryStorage:(OWSPrimaryStorage *)primaryStorage NS_DESIGNATED_INITIALIZER;
|
||||||
|
|
||||||
+ (NSString *)databaseExtensionName;
|
+ (NSString *)databaseExtensionName;
|
||||||
+ (void)asyncRegisterDatabaseExtension:(OWSStorage *)storage;
|
+ (void)asyncRegisterDatabaseExtension:(OWSStorage *)storage;
|
||||||
|
|
|
@ -231,15 +231,13 @@ NSString *const OWSMessageContentJobFinderExtensionGroup = @"OWSMessageContentJo
|
||||||
|
|
||||||
@interface OWSMessageContentQueue : NSObject
|
@interface OWSMessageContentQueue : NSObject
|
||||||
|
|
||||||
@property (nonatomic, readonly) OWSMessageManager *messagesManager;
|
|
||||||
@property (nonatomic, readonly) YapDatabaseConnection *dbConnection;
|
@property (nonatomic, readonly) YapDatabaseConnection *dbConnection;
|
||||||
@property (nonatomic, readonly) OWSMessageContentJobFinder *finder;
|
@property (nonatomic, readonly) OWSMessageContentJobFinder *finder;
|
||||||
@property (nonatomic) BOOL isDrainingQueue;
|
@property (nonatomic) BOOL isDrainingQueue;
|
||||||
@property (atomic) BOOL isAppInBackground;
|
@property (atomic) BOOL isAppInBackground;
|
||||||
|
|
||||||
- (instancetype)initWithMessagesManager:(OWSMessageManager *)messagesManager
|
- (instancetype)initWithDBConnection:(YapDatabaseConnection *)dbConnection
|
||||||
primaryStorage:(OWSPrimaryStorage *)primaryStorage
|
finder:(OWSMessageContentJobFinder *)finder NS_DESIGNATED_INITIALIZER;
|
||||||
finder:(OWSMessageContentJobFinder *)finder NS_DESIGNATED_INITIALIZER;
|
|
||||||
- (instancetype)init NS_UNAVAILABLE;
|
- (instancetype)init NS_UNAVAILABLE;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
@ -248,9 +246,7 @@ NSString *const OWSMessageContentJobFinderExtensionGroup = @"OWSMessageContentJo
|
||||||
|
|
||||||
@implementation OWSMessageContentQueue
|
@implementation OWSMessageContentQueue
|
||||||
|
|
||||||
- (instancetype)initWithMessagesManager:(OWSMessageManager *)messagesManager
|
- (instancetype)initWithDBConnection:(YapDatabaseConnection *)dbConnection finder:(OWSMessageContentJobFinder *)finder
|
||||||
primaryStorage:(OWSPrimaryStorage *)primaryStorage
|
|
||||||
finder:(OWSMessageContentJobFinder *)finder
|
|
||||||
{
|
{
|
||||||
OWSSingletonAssert();
|
OWSSingletonAssert();
|
||||||
|
|
||||||
|
@ -259,8 +255,7 @@ NSString *const OWSMessageContentJobFinderExtensionGroup = @"OWSMessageContentJo
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
_messagesManager = messagesManager;
|
_dbConnection = dbConnection;
|
||||||
_dbConnection = [primaryStorage newDatabaseConnection];
|
|
||||||
_finder = finder;
|
_finder = finder;
|
||||||
_isDrainingQueue = NO;
|
_isDrainingQueue = NO;
|
||||||
|
|
||||||
|
@ -286,6 +281,15 @@ NSString *const OWSMessageContentJobFinderExtensionGroup = @"OWSMessageContentJo
|
||||||
[[NSNotificationCenter defaultCenter] removeObserver:self];
|
[[NSNotificationCenter defaultCenter] removeObserver:self];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#pragma mark - Singletons
|
||||||
|
|
||||||
|
- (OWSMessageManager *)messageManager
|
||||||
|
{
|
||||||
|
OWSAssertDebug(SSKEnvironment.shared.messageManager);
|
||||||
|
|
||||||
|
return SSKEnvironment.shared.messageManager;
|
||||||
|
}
|
||||||
|
|
||||||
#pragma mark - Notifications
|
#pragma mark - Notifications
|
||||||
|
|
||||||
- (void)applicationWillEnterForeground:(NSNotification *)notification
|
- (void)applicationWillEnterForeground:(NSNotification *)notification
|
||||||
|
@ -399,9 +403,9 @@ NSString *const OWSMessageContentJobFinderExtensionGroup = @"OWSMessageContentJo
|
||||||
if (!envelope) {
|
if (!envelope) {
|
||||||
reportFailure(transaction);
|
reportFailure(transaction);
|
||||||
} else {
|
} else {
|
||||||
[self.messagesManager processEnvelope:envelope
|
[self.messageManager processEnvelope:envelope
|
||||||
plaintextData:job.plaintextData
|
plaintextData:job.plaintextData
|
||||||
transaction:transaction];
|
transaction:transaction];
|
||||||
}
|
}
|
||||||
} @catch (NSException *exception) {
|
} @catch (NSException *exception) {
|
||||||
OWSFailDebug(@"Received an invalid envelope: %@", exception.debugDescription);
|
OWSFailDebug(@"Received an invalid envelope: %@", exception.debugDescription);
|
||||||
|
@ -437,9 +441,7 @@ NSString *const OWSMessageContentJobFinderExtensionGroup = @"OWSMessageContentJo
|
||||||
|
|
||||||
@implementation OWSBatchMessageProcessor
|
@implementation OWSBatchMessageProcessor
|
||||||
|
|
||||||
- (instancetype)initWithDBConnection:(YapDatabaseConnection *)dbConnection
|
- (instancetype)initWithPrimaryStorage:(OWSPrimaryStorage *)primaryStorage
|
||||||
messagesManager:(OWSMessageManager *)messagesManager
|
|
||||||
primaryStorage:(OWSPrimaryStorage *)primaryStorage
|
|
||||||
{
|
{
|
||||||
OWSSingletonAssert();
|
OWSSingletonAssert();
|
||||||
|
|
||||||
|
@ -448,38 +450,17 @@ NSString *const OWSMessageContentJobFinderExtensionGroup = @"OWSMessageContentJo
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// For coherency we use the same dbConnection to persist and read the unprocessed envelopes
|
||||||
|
YapDatabaseConnection *dbConnection = [primaryStorage newDatabaseConnection];
|
||||||
OWSMessageContentJobFinder *finder = [[OWSMessageContentJobFinder alloc] initWithDBConnection:dbConnection];
|
OWSMessageContentJobFinder *finder = [[OWSMessageContentJobFinder alloc] initWithDBConnection:dbConnection];
|
||||||
OWSMessageContentQueue *processingQueue = [[OWSMessageContentQueue alloc] initWithMessagesManager:messagesManager
|
OWSMessageContentQueue *processingQueue =
|
||||||
primaryStorage:primaryStorage
|
[[OWSMessageContentQueue alloc] initWithDBConnection:dbConnection finder:finder];
|
||||||
finder:finder];
|
|
||||||
|
|
||||||
_processingQueue = processingQueue;
|
_processingQueue = processingQueue;
|
||||||
|
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (instancetype)initDefault
|
|
||||||
{
|
|
||||||
// For concurrency coherency we use the same dbConnection to persist and read the unprocessed envelopes
|
|
||||||
YapDatabaseConnection *dbConnection = [[OWSPrimaryStorage sharedManager] newDatabaseConnection];
|
|
||||||
OWSMessageManager *messagesManager = [OWSMessageManager sharedManager];
|
|
||||||
OWSPrimaryStorage *primaryStorage = [OWSPrimaryStorage sharedManager];
|
|
||||||
|
|
||||||
return [self initWithDBConnection:dbConnection messagesManager:messagesManager primaryStorage:primaryStorage];
|
|
||||||
}
|
|
||||||
|
|
||||||
+ (instancetype)sharedInstance
|
|
||||||
{
|
|
||||||
static OWSBatchMessageProcessor *sharedInstance;
|
|
||||||
|
|
||||||
static dispatch_once_t onceToken;
|
|
||||||
dispatch_once(&onceToken, ^{
|
|
||||||
sharedInstance = [[self alloc] initDefault];
|
|
||||||
});
|
|
||||||
|
|
||||||
return sharedInstance;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma mark - class methods
|
#pragma mark - class methods
|
||||||
|
|
||||||
+ (NSString *)databaseExtensionName
|
+ (NSString *)databaseExtensionName
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
|
|
||||||
NS_ASSUME_NONNULL_BEGIN
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
|
||||||
|
@class OWSPrimaryStorage;
|
||||||
@class SSKProtoEnvelope;
|
@class SSKProtoEnvelope;
|
||||||
@class YapDatabaseReadWriteTransaction;
|
@class YapDatabaseReadWriteTransaction;
|
||||||
|
|
||||||
|
@ -15,7 +16,7 @@ typedef void (^DecryptFailureBlock)(void);
|
||||||
@interface OWSMessageDecrypter : OWSMessageHandler
|
@interface OWSMessageDecrypter : OWSMessageHandler
|
||||||
|
|
||||||
- (instancetype)init NS_UNAVAILABLE;
|
- (instancetype)init NS_UNAVAILABLE;
|
||||||
+ (instancetype)sharedManager;
|
- (instancetype)initWithPrimaryStorage:(OWSPrimaryStorage *)primaryStorage NS_DESIGNATED_INITIALIZER;
|
||||||
|
|
||||||
// decryptEnvelope: can be called from any thread.
|
// decryptEnvelope: can be called from any thread.
|
||||||
// successBlock & failureBlock will be called an arbitrary thread.
|
// successBlock & failureBlock will be called an arbitrary thread.
|
||||||
|
|
|
@ -21,6 +21,7 @@
|
||||||
#import "TSPreKeyManager.h"
|
#import "TSPreKeyManager.h"
|
||||||
#import <AxolotlKit/AxolotlExceptions.h>
|
#import <AxolotlKit/AxolotlExceptions.h>
|
||||||
#import <AxolotlKit/SessionCipher.h>
|
#import <AxolotlKit/SessionCipher.h>
|
||||||
|
#import <SignalMetadataKit/SignalMetadataKit-Swift.h>
|
||||||
#import <SignalServiceKit/SignalServiceKit-Swift.h>
|
#import <SignalServiceKit/SignalServiceKit-Swift.h>
|
||||||
|
|
||||||
NS_ASSUME_NONNULL_BEGIN
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
@ -38,28 +39,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||||
|
|
||||||
@implementation OWSMessageDecrypter
|
@implementation OWSMessageDecrypter
|
||||||
|
|
||||||
+ (instancetype)sharedManager
|
|
||||||
{
|
|
||||||
static OWSMessageDecrypter *sharedMyManager = nil;
|
|
||||||
static dispatch_once_t onceToken;
|
|
||||||
dispatch_once(&onceToken, ^{
|
|
||||||
sharedMyManager = [[self alloc] initDefault];
|
|
||||||
});
|
|
||||||
return sharedMyManager;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (instancetype)initDefault
|
|
||||||
{
|
|
||||||
OWSPrimaryStorage *primaryStorage = [OWSPrimaryStorage sharedManager];
|
|
||||||
OWSIdentityManager *identityManager = [OWSIdentityManager sharedManager];
|
|
||||||
OWSBlockingManager *blockingManager = [OWSBlockingManager sharedManager];
|
|
||||||
|
|
||||||
return [self initWithPrimaryStorage:primaryStorage identityManager:identityManager blockingManager:blockingManager];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (instancetype)initWithPrimaryStorage:(OWSPrimaryStorage *)primaryStorage
|
- (instancetype)initWithPrimaryStorage:(OWSPrimaryStorage *)primaryStorage
|
||||||
identityManager:(OWSIdentityManager *)identityManager
|
|
||||||
blockingManager:(OWSBlockingManager *)blockingManager
|
|
||||||
{
|
{
|
||||||
self = [super init];
|
self = [super init];
|
||||||
|
|
||||||
|
@ -68,8 +48,6 @@ NS_ASSUME_NONNULL_BEGIN
|
||||||
}
|
}
|
||||||
|
|
||||||
_primaryStorage = primaryStorage;
|
_primaryStorage = primaryStorage;
|
||||||
_identityManager = identityManager;
|
|
||||||
_blockingManager = blockingManager;
|
|
||||||
|
|
||||||
_dbConnection = primaryStorage.newDatabaseConnection;
|
_dbConnection = primaryStorage.newDatabaseConnection;
|
||||||
|
|
||||||
|
@ -78,13 +56,29 @@ NS_ASSUME_NONNULL_BEGIN
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#pragma mark - Singletons
|
||||||
|
|
||||||
|
- (OWSBlockingManager *)blockingManager
|
||||||
|
{
|
||||||
|
OWSAssertDebug(SSKEnvironment.shared.blockingManager);
|
||||||
|
|
||||||
|
return SSKEnvironment.shared.blockingManager;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (OWSIdentityManager *)identityManager
|
||||||
|
{
|
||||||
|
OWSAssertDebug(SSKEnvironment.shared.identityManager);
|
||||||
|
|
||||||
|
return SSKEnvironment.shared.identityManager;
|
||||||
|
}
|
||||||
|
|
||||||
#pragma mark - Blocking
|
#pragma mark - Blocking
|
||||||
|
|
||||||
- (BOOL)isEnvelopeSenderBlocked:(SSKProtoEnvelope *)envelope
|
- (BOOL)isEnvelopeSenderBlocked:(SSKProtoEnvelope *)envelope
|
||||||
{
|
{
|
||||||
OWSAssertDebug(envelope);
|
OWSAssertDebug(envelope);
|
||||||
|
|
||||||
return [_blockingManager.blockedPhoneNumbers containsObject:envelope.source];
|
return [self.blockingManager.blockedPhoneNumbers containsObject:envelope.source];
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma mark - Decryption
|
#pragma mark - Decryption
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
|
|
||||||
NS_ASSUME_NONNULL_BEGIN
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
|
||||||
|
@class OWSPrimaryStorage;
|
||||||
@class OWSStorage;
|
@class OWSStorage;
|
||||||
|
|
||||||
// This class is used to write incoming (encrypted, unprocessed)
|
// This class is used to write incoming (encrypted, unprocessed)
|
||||||
|
@ -12,7 +13,8 @@ NS_ASSUME_NONNULL_BEGIN
|
||||||
// are forwarded to OWSBatchMessageProcessor.
|
// are forwarded to OWSBatchMessageProcessor.
|
||||||
@interface OWSMessageReceiver : NSObject
|
@interface OWSMessageReceiver : NSObject
|
||||||
|
|
||||||
+ (instancetype)sharedInstance;
|
- (instancetype)init NS_UNAVAILABLE;
|
||||||
|
- (instancetype)initWithPrimaryStorage:(OWSPrimaryStorage *)primaryStorage NS_DESIGNATED_INITIALIZER;
|
||||||
|
|
||||||
+ (NSString *)databaseExtensionName;
|
+ (NSString *)databaseExtensionName;
|
||||||
+ (void)asyncRegisterDatabaseExtension:(OWSStorage *)storage;
|
+ (void)asyncRegisterDatabaseExtension:(OWSStorage *)storage;
|
||||||
|
|
|
@ -221,14 +221,12 @@ NSString *const OWSMessageDecryptJobFinderExtensionGroup = @"OWSMessageProcessin
|
||||||
|
|
||||||
@interface OWSMessageDecryptQueue : NSObject
|
@interface OWSMessageDecryptQueue : NSObject
|
||||||
|
|
||||||
@property (nonatomic, readonly) OWSMessageDecrypter *messageDecrypter;
|
@property (nonatomic, readonly) YapDatabaseConnection *dbConnection;
|
||||||
@property (nonatomic, readonly) OWSBatchMessageProcessor *batchMessageProcessor;
|
|
||||||
@property (nonatomic, readonly) OWSMessageDecryptJobFinder *finder;
|
@property (nonatomic, readonly) OWSMessageDecryptJobFinder *finder;
|
||||||
@property (nonatomic) BOOL isDrainingQueue;
|
@property (nonatomic) BOOL isDrainingQueue;
|
||||||
|
|
||||||
- (instancetype)initWithMessageDecrypter:(OWSMessageDecrypter *)messageDecrypter
|
- (instancetype)initWithDBConnection:(YapDatabaseConnection *)dbConnection
|
||||||
batchMessageProcessor:(OWSBatchMessageProcessor *)batchMessageProcessor
|
finder:(OWSMessageDecryptJobFinder *)finder NS_DESIGNATED_INITIALIZER;
|
||||||
finder:(OWSMessageDecryptJobFinder *)finder NS_DESIGNATED_INITIALIZER;
|
|
||||||
- (instancetype)init NS_UNAVAILABLE;
|
- (instancetype)init NS_UNAVAILABLE;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
@ -237,9 +235,7 @@ NSString *const OWSMessageDecryptJobFinderExtensionGroup = @"OWSMessageProcessin
|
||||||
|
|
||||||
@implementation OWSMessageDecryptQueue
|
@implementation OWSMessageDecryptQueue
|
||||||
|
|
||||||
- (instancetype)initWithMessageDecrypter:(OWSMessageDecrypter *)messageDecrypter
|
- (instancetype)initWithDBConnection:(YapDatabaseConnection *)dbConnection finder:(OWSMessageDecryptJobFinder *)finder
|
||||||
batchMessageProcessor:(OWSBatchMessageProcessor *)batchMessageProcessor
|
|
||||||
finder:(OWSMessageDecryptJobFinder *)finder
|
|
||||||
{
|
{
|
||||||
OWSSingletonAssert();
|
OWSSingletonAssert();
|
||||||
|
|
||||||
|
@ -248,8 +244,7 @@ NSString *const OWSMessageDecryptJobFinderExtensionGroup = @"OWSMessageProcessin
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
_messageDecrypter = messageDecrypter;
|
_dbConnection = dbConnection;
|
||||||
_batchMessageProcessor = batchMessageProcessor;
|
|
||||||
_finder = finder;
|
_finder = finder;
|
||||||
_isDrainingQueue = NO;
|
_isDrainingQueue = NO;
|
||||||
|
|
||||||
|
@ -260,7 +255,23 @@ NSString *const OWSMessageDecryptJobFinderExtensionGroup = @"OWSMessageProcessin
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma mark - instance methods
|
#pragma mark - Singletons
|
||||||
|
|
||||||
|
- (OWSMessageDecrypter *)messageDecrypter
|
||||||
|
{
|
||||||
|
OWSAssertDebug(SSKEnvironment.shared.messageDecrypter);
|
||||||
|
|
||||||
|
return SSKEnvironment.shared.messageDecrypter;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (OWSBatchMessageProcessor *)batchMessageProcessor
|
||||||
|
{
|
||||||
|
OWSAssertDebug(SSKEnvironment.shared.batchMessageProcessor);
|
||||||
|
|
||||||
|
return SSKEnvironment.shared.batchMessageProcessor;
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - Instance methods
|
||||||
|
|
||||||
- (dispatch_queue_t)serialQueue
|
- (dispatch_queue_t)serialQueue
|
||||||
{
|
{
|
||||||
|
@ -382,9 +393,7 @@ NSString *const OWSMessageDecryptJobFinderExtensionGroup = @"OWSMessageProcessin
|
||||||
|
|
||||||
@implementation OWSMessageReceiver
|
@implementation OWSMessageReceiver
|
||||||
|
|
||||||
- (instancetype)initWithDBConnection:(YapDatabaseConnection *)dbConnection
|
- (instancetype)initWithPrimaryStorage:(OWSPrimaryStorage *)primaryStorage
|
||||||
messageDecrypter:(OWSMessageDecrypter *)messageDecrypter
|
|
||||||
batchMessageProcessor:(OWSBatchMessageProcessor *)batchMessageProcessor
|
|
||||||
{
|
{
|
||||||
OWSSingletonAssert();
|
OWSSingletonAssert();
|
||||||
|
|
||||||
|
@ -393,41 +402,17 @@ NSString *const OWSMessageDecryptJobFinderExtensionGroup = @"OWSMessageProcessin
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// For coherency we use the same dbConnection to persist and read the unprocessed envelopes
|
||||||
|
YapDatabaseConnection *dbConnection = [primaryStorage newDatabaseConnection];
|
||||||
OWSMessageDecryptJobFinder *finder = [[OWSMessageDecryptJobFinder alloc] initWithDBConnection:dbConnection];
|
OWSMessageDecryptJobFinder *finder = [[OWSMessageDecryptJobFinder alloc] initWithDBConnection:dbConnection];
|
||||||
OWSMessageDecryptQueue *processingQueue =
|
OWSMessageDecryptQueue *processingQueue =
|
||||||
[[OWSMessageDecryptQueue alloc] initWithMessageDecrypter:messageDecrypter
|
[[OWSMessageDecryptQueue alloc] initWithDBConnection:dbConnection finder:finder];
|
||||||
batchMessageProcessor:batchMessageProcessor
|
|
||||||
finder:finder];
|
|
||||||
|
|
||||||
_processingQueue = processingQueue;
|
_processingQueue = processingQueue;
|
||||||
|
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (instancetype)initDefault
|
|
||||||
{
|
|
||||||
// For concurrency coherency we use the same dbConnection to persist and read the unprocessed envelopes
|
|
||||||
YapDatabaseConnection *dbConnection = [[OWSPrimaryStorage sharedManager] newDatabaseConnection];
|
|
||||||
OWSMessageDecrypter *messageDecrypter = [OWSMessageDecrypter sharedManager];
|
|
||||||
OWSBatchMessageProcessor *batchMessageProcessor = [OWSBatchMessageProcessor sharedInstance];
|
|
||||||
|
|
||||||
return [self initWithDBConnection:dbConnection
|
|
||||||
messageDecrypter:messageDecrypter
|
|
||||||
batchMessageProcessor:batchMessageProcessor];
|
|
||||||
}
|
|
||||||
|
|
||||||
+ (instancetype)sharedInstance
|
|
||||||
{
|
|
||||||
static OWSMessageReceiver *sharedInstance;
|
|
||||||
|
|
||||||
static dispatch_once_t onceToken;
|
|
||||||
dispatch_once(&onceToken, ^{
|
|
||||||
sharedInstance = [[self alloc] initDefault];
|
|
||||||
});
|
|
||||||
|
|
||||||
return sharedInstance;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma mark - class methods
|
#pragma mark - class methods
|
||||||
|
|
||||||
+ (NSString *)databaseExtensionName
|
+ (NSString *)databaseExtensionName
|
||||||
|
|
|
@ -147,7 +147,6 @@ NSString *const kNSNotification_SocketManagerStateDidChange = @"kNSNotification_
|
||||||
@interface TSSocketManager ()
|
@interface TSSocketManager ()
|
||||||
|
|
||||||
@property (nonatomic, readonly) OWSSignalService *signalService;
|
@property (nonatomic, readonly) OWSSignalService *signalService;
|
||||||
@property (nonatomic, readonly) OWSMessageReceiver *messageReceiver;
|
|
||||||
|
|
||||||
// This class has a few "tiers" of state.
|
// This class has a few "tiers" of state.
|
||||||
//
|
//
|
||||||
|
@ -218,7 +217,6 @@ NSString *const kNSNotification_SocketManagerStateDidChange = @"kNSNotification_
|
||||||
OWSAssertIsOnMainThread();
|
OWSAssertIsOnMainThread();
|
||||||
|
|
||||||
_signalService = [OWSSignalService sharedInstance];
|
_signalService = [OWSSignalService sharedInstance];
|
||||||
_messageReceiver = [OWSMessageReceiver sharedInstance];
|
|
||||||
_state = SocketManagerStateClosed;
|
_state = SocketManagerStateClosed;
|
||||||
_socketMessageMap = [NSMutableDictionary new];
|
_socketMessageMap = [NSMutableDictionary new];
|
||||||
|
|
||||||
|
@ -270,6 +268,13 @@ NSString *const kNSNotification_SocketManagerStateDidChange = @"kNSNotification_
|
||||||
return sharedMyManager;
|
return sharedMyManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#pragma mark - Dependencies
|
||||||
|
|
||||||
|
- (OWSMessageReceiver *)messageReceiver
|
||||||
|
{
|
||||||
|
return SSKEnvironment.shared.messageReceiver;
|
||||||
|
}
|
||||||
|
|
||||||
#pragma mark - Manage Socket
|
#pragma mark - Manage Socket
|
||||||
|
|
||||||
- (void)ensureWebsocketIsOpen
|
- (void)ensureWebsocketIsOpen
|
||||||
|
|
|
@ -5,9 +5,12 @@
|
||||||
NS_ASSUME_NONNULL_BEGIN
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
|
||||||
@class ContactsUpdater;
|
@class ContactsUpdater;
|
||||||
|
@class OWSBatchMessageProcessor;
|
||||||
@class OWSBlockingManager;
|
@class OWSBlockingManager;
|
||||||
@class OWSIdentityManager;
|
@class OWSIdentityManager;
|
||||||
|
@class OWSMessageDecrypter;
|
||||||
@class OWSMessageManager;
|
@class OWSMessageManager;
|
||||||
|
@class OWSMessageReceiver;
|
||||||
@class OWSMessageSender;
|
@class OWSMessageSender;
|
||||||
@class OWSPrimaryStorage;
|
@class OWSPrimaryStorage;
|
||||||
@class TSNetworkManager;
|
@class TSNetworkManager;
|
||||||
|
@ -30,7 +33,10 @@ NS_ASSUME_NONNULL_BEGIN
|
||||||
messageManager:(OWSMessageManager *)messageManager
|
messageManager:(OWSMessageManager *)messageManager
|
||||||
blockingManager:(OWSBlockingManager *)blockingManager
|
blockingManager:(OWSBlockingManager *)blockingManager
|
||||||
identityManager:(OWSIdentityManager *)identityManager
|
identityManager:(OWSIdentityManager *)identityManager
|
||||||
udManager:(id<OWSUDManager>)udManager NS_DESIGNATED_INITIALIZER;
|
udManager:(id<OWSUDManager>)udManager
|
||||||
|
messageDecrypter:(OWSMessageDecrypter *)messageDecrypter
|
||||||
|
batchMessageProcessor:(OWSBatchMessageProcessor *)batchMessageProcessor
|
||||||
|
messageReceiver:(OWSMessageReceiver *)messageReceiver NS_DESIGNATED_INITIALIZER;
|
||||||
|
|
||||||
- (instancetype)init NS_UNAVAILABLE;
|
- (instancetype)init NS_UNAVAILABLE;
|
||||||
|
|
||||||
|
@ -53,6 +59,9 @@ NS_ASSUME_NONNULL_BEGIN
|
||||||
@property (nonatomic, readonly) OWSBlockingManager *blockingManager;
|
@property (nonatomic, readonly) OWSBlockingManager *blockingManager;
|
||||||
@property (nonatomic, readonly) OWSIdentityManager *identityManager;
|
@property (nonatomic, readonly) OWSIdentityManager *identityManager;
|
||||||
@property (nonatomic, readonly) id<OWSUDManager> udManager;
|
@property (nonatomic, readonly) id<OWSUDManager> udManager;
|
||||||
|
@property (nonatomic, readonly) OWSMessageDecrypter *messageDecrypter;
|
||||||
|
@property (nonatomic, readonly) OWSBatchMessageProcessor *batchMessageProcessor;
|
||||||
|
@property (nonatomic, readonly) OWSMessageReceiver *messageReceiver;
|
||||||
|
|
||||||
// This property is configured after Environment is created.
|
// This property is configured after Environment is created.
|
||||||
@property (atomic, nullable) id<OWSCallMessageHandler> callMessageHandler;
|
@property (atomic, nullable) id<OWSCallMessageHandler> callMessageHandler;
|
||||||
|
|
|
@ -22,6 +22,9 @@ static SSKEnvironment *sharedSSKEnvironment;
|
||||||
@property (nonatomic) OWSBlockingManager *blockingManager;
|
@property (nonatomic) OWSBlockingManager *blockingManager;
|
||||||
@property (nonatomic) OWSIdentityManager *identityManager;
|
@property (nonatomic) OWSIdentityManager *identityManager;
|
||||||
@property (nonatomic) id<OWSUDManager> udManager;
|
@property (nonatomic) id<OWSUDManager> udManager;
|
||||||
|
@property (nonatomic) OWSMessageDecrypter *messageDecrypter;
|
||||||
|
@property (nonatomic) OWSBatchMessageProcessor *batchMessageProcessor;
|
||||||
|
@property (nonatomic) OWSMessageReceiver *messageReceiver;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
@ -43,6 +46,9 @@ static SSKEnvironment *sharedSSKEnvironment;
|
||||||
blockingManager:(OWSBlockingManager *)blockingManager
|
blockingManager:(OWSBlockingManager *)blockingManager
|
||||||
identityManager:(OWSIdentityManager *)identityManager
|
identityManager:(OWSIdentityManager *)identityManager
|
||||||
udManager:(id<OWSUDManager>)udManager
|
udManager:(id<OWSUDManager>)udManager
|
||||||
|
messageDecrypter:(OWSMessageDecrypter *)messageDecrypter
|
||||||
|
batchMessageProcessor:(OWSBatchMessageProcessor *)batchMessageProcessor
|
||||||
|
messageReceiver:(OWSMessageReceiver *)messageReceiver
|
||||||
{
|
{
|
||||||
self = [super init];
|
self = [super init];
|
||||||
if (!self) {
|
if (!self) {
|
||||||
|
@ -59,6 +65,9 @@ static SSKEnvironment *sharedSSKEnvironment;
|
||||||
OWSAssertDebug(blockingManager);
|
OWSAssertDebug(blockingManager);
|
||||||
OWSAssertDebug(identityManager);
|
OWSAssertDebug(identityManager);
|
||||||
OWSAssertDebug(udManager);
|
OWSAssertDebug(udManager);
|
||||||
|
OWSAssertDebug(messageDecrypter);
|
||||||
|
OWSAssertDebug(batchMessageProcessor);
|
||||||
|
OWSAssertDebug(messageReceiver);
|
||||||
|
|
||||||
_contactsManager = contactsManager;
|
_contactsManager = contactsManager;
|
||||||
_messageSender = messageSender;
|
_messageSender = messageSender;
|
||||||
|
@ -70,6 +79,9 @@ static SSKEnvironment *sharedSSKEnvironment;
|
||||||
_blockingManager = blockingManager;
|
_blockingManager = blockingManager;
|
||||||
_identityManager = identityManager;
|
_identityManager = identityManager;
|
||||||
_udManager = udManager;
|
_udManager = udManager;
|
||||||
|
_messageDecrypter = messageDecrypter;
|
||||||
|
_batchMessageProcessor = batchMessageProcessor;
|
||||||
|
_messageReceiver = messageReceiver;
|
||||||
|
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
//
|
//
|
||||||
|
|
||||||
#import "MockSSKEnvironment.h"
|
#import "MockSSKEnvironment.h"
|
||||||
|
#import "OWSBatchMessageProcessor.h"
|
||||||
#import "OWSBlockingManager.h"
|
#import "OWSBlockingManager.h"
|
||||||
#import "OWSFakeCallMessageHandler.h"
|
#import "OWSFakeCallMessageHandler.h"
|
||||||
#import "OWSFakeContactsManager.h"
|
#import "OWSFakeContactsManager.h"
|
||||||
|
@ -12,7 +13,9 @@
|
||||||
#import "OWSFakeNotificationsManager.h"
|
#import "OWSFakeNotificationsManager.h"
|
||||||
#import "OWSFakeProfileManager.h"
|
#import "OWSFakeProfileManager.h"
|
||||||
#import "OWSIdentityManager.h"
|
#import "OWSIdentityManager.h"
|
||||||
|
#import "OWSMessageDecrypter.h"
|
||||||
#import "OWSMessageManager.h"
|
#import "OWSMessageManager.h"
|
||||||
|
#import "OWSMessageReceiver.h"
|
||||||
#import "OWSPrimaryStorage.h"
|
#import "OWSPrimaryStorage.h"
|
||||||
#import <SignalServiceKit/SignalServiceKit-Swift.h>
|
#import <SignalServiceKit/SignalServiceKit-Swift.h>
|
||||||
|
|
||||||
|
@ -49,6 +52,10 @@ NS_ASSUME_NONNULL_BEGIN
|
||||||
OWSBlockingManager *blockingManager = [[OWSBlockingManager alloc] initWithPrimaryStorage:primaryStorage];
|
OWSBlockingManager *blockingManager = [[OWSBlockingManager alloc] initWithPrimaryStorage:primaryStorage];
|
||||||
OWSIdentityManager *identityManager = [[OWSIdentityManager alloc] initWithPrimaryStorage:primaryStorage];
|
OWSIdentityManager *identityManager = [[OWSIdentityManager alloc] initWithPrimaryStorage:primaryStorage];
|
||||||
id<OWSUDManager> udManager = [[OWSUDManagerImpl alloc] initWithPrimaryStorage:primaryStorage];
|
id<OWSUDManager> udManager = [[OWSUDManagerImpl alloc] initWithPrimaryStorage:primaryStorage];
|
||||||
|
OWSMessageDecrypter *messageDecrypter = [[OWSMessageDecrypter alloc] initWithPrimaryStorage:primaryStorage];
|
||||||
|
OWSBatchMessageProcessor *batchMessageProcessor =
|
||||||
|
[[OWSBatchMessageProcessor alloc] initWithPrimaryStorage:primaryStorage];
|
||||||
|
OWSMessageReceiver *messageReceiver = [[OWSMessageReceiver alloc] initWithPrimaryStorage:primaryStorage];
|
||||||
|
|
||||||
self = [super initWithContactsManager:contactsManager
|
self = [super initWithContactsManager:contactsManager
|
||||||
messageSender:messageSender
|
messageSender:messageSender
|
||||||
|
@ -59,7 +66,10 @@ NS_ASSUME_NONNULL_BEGIN
|
||||||
messageManager:messageManager
|
messageManager:messageManager
|
||||||
blockingManager:blockingManager
|
blockingManager:blockingManager
|
||||||
identityManager:identityManager
|
identityManager:identityManager
|
||||||
udManager:udManager];
|
udManager:udManager
|
||||||
|
messageDecrypter:messageDecrypter
|
||||||
|
batchMessageProcessor:batchMessageProcessor
|
||||||
|
messageReceiver:messageReceiver];
|
||||||
if (!self) {
|
if (!self) {
|
||||||
return nil;
|
return nil;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue