Merge tag '2.31.2.0' into release/2.32.0
This commit is contained in:
commit
156302acc7
|
@ -3925,6 +3925,7 @@ typedef OWSContact * (^OWSContactBlock)(YapDatabaseReadWriteTransaction *transac
|
|||
[OWSPrimaryStorage.dbReadWriteConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) {
|
||||
[SSKEnvironment.shared.batchMessageProcessor enqueueEnvelopeData:envelopeData
|
||||
plaintextData:plaintextData
|
||||
wasReceivedByUD:NO
|
||||
transaction:transaction];
|
||||
}];
|
||||
}
|
||||
|
|
|
@ -22,6 +22,7 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
|
||||
- (void)enqueueEnvelopeData:(NSData *)envelopeData
|
||||
plaintextData:(NSData *_Nullable)plaintextData
|
||||
wasReceivedByUD:(BOOL)wasReceivedByUD
|
||||
transaction:(YapDatabaseReadWriteTransaction *)transaction;
|
||||
|
||||
@end
|
||||
|
|
|
@ -33,9 +33,11 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
@property (nonatomic, readonly) NSDate *createdAt;
|
||||
@property (nonatomic, readonly) NSData *envelopeData;
|
||||
@property (nonatomic, readonly, nullable) NSData *plaintextData;
|
||||
@property (nonatomic, readonly) BOOL wasReceivedByUD;
|
||||
|
||||
- (instancetype)initWithEnvelopeData:(NSData *)envelopeData
|
||||
plaintextData:(NSData *_Nullable)plaintextData NS_DESIGNATED_INITIALIZER;
|
||||
plaintextData:(NSData *_Nullable)plaintextData
|
||||
wasReceivedByUD:(BOOL)wasReceivedByUD NS_DESIGNATED_INITIALIZER;
|
||||
- (nullable instancetype)initWithCoder:(NSCoder *)coder NS_DESIGNATED_INITIALIZER;
|
||||
- (instancetype)initWithUniqueId:(NSString *_Nullable)uniqueId NS_UNAVAILABLE;
|
||||
|
||||
|
@ -52,7 +54,9 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
return @"OWSBatchMessageProcessingJob";
|
||||
}
|
||||
|
||||
- (instancetype)initWithEnvelopeData:(NSData *)envelopeData plaintextData:(NSData *_Nullable)plaintextData
|
||||
- (instancetype)initWithEnvelopeData:(NSData *)envelopeData
|
||||
plaintextData:(NSData *_Nullable)plaintextData
|
||||
wasReceivedByUD:(BOOL)wasReceivedByUD
|
||||
{
|
||||
OWSAssertDebug(envelopeData);
|
||||
|
||||
|
@ -63,6 +67,7 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
|
||||
_envelopeData = envelopeData;
|
||||
_plaintextData = plaintextData;
|
||||
_wasReceivedByUD = wasReceivedByUD;
|
||||
_createdAt = [NSDate new];
|
||||
|
||||
return self;
|
||||
|
@ -148,13 +153,15 @@ NSString *const OWSMessageContentJobFinderExtensionGroup = @"OWSMessageContentJo
|
|||
|
||||
- (void)addJobWithEnvelopeData:(NSData *)envelopeData
|
||||
plaintextData:(NSData *_Nullable)plaintextData
|
||||
wasReceivedByUD:(BOOL)wasReceivedByUD
|
||||
transaction:(YapDatabaseReadWriteTransaction *)transaction
|
||||
{
|
||||
OWSAssertDebug(envelopeData);
|
||||
OWSAssertDebug(transaction);
|
||||
|
||||
OWSMessageContentJob *job =
|
||||
[[OWSMessageContentJob alloc] initWithEnvelopeData:envelopeData plaintextData:plaintextData];
|
||||
OWSMessageContentJob *job = [[OWSMessageContentJob alloc] initWithEnvelopeData:envelopeData
|
||||
plaintextData:plaintextData
|
||||
wasReceivedByUD:wasReceivedByUD];
|
||||
[job saveWithTransaction:transaction];
|
||||
}
|
||||
|
||||
|
@ -318,13 +325,17 @@ NSString *const OWSMessageContentJobFinderExtensionGroup = @"OWSMessageContentJo
|
|||
|
||||
- (void)enqueueEnvelopeData:(NSData *)envelopeData
|
||||
plaintextData:(NSData *_Nullable)plaintextData
|
||||
wasReceivedByUD:(BOOL)wasReceivedByUD
|
||||
transaction:(YapDatabaseReadWriteTransaction *)transaction
|
||||
{
|
||||
OWSAssertDebug(envelopeData);
|
||||
OWSAssertDebug(transaction);
|
||||
|
||||
// We need to persist the decrypted envelope data ASAP to prevent data loss.
|
||||
[self.finder addJobWithEnvelopeData:envelopeData plaintextData:plaintextData transaction:transaction];
|
||||
[self.finder addJobWithEnvelopeData:envelopeData
|
||||
plaintextData:plaintextData
|
||||
wasReceivedByUD:wasReceivedByUD
|
||||
transaction:transaction];
|
||||
}
|
||||
|
||||
- (void)drainQueue
|
||||
|
@ -407,6 +418,7 @@ NSString *const OWSMessageContentJobFinderExtensionGroup = @"OWSMessageContentJo
|
|||
} else {
|
||||
[self.messageManager throws_processEnvelope:envelope
|
||||
plaintextData:job.plaintextData
|
||||
wasReceivedByUD:job.wasReceivedByUD
|
||||
transaction:transaction];
|
||||
}
|
||||
} @catch (NSException *exception) {
|
||||
|
@ -485,6 +497,7 @@ NSString *const OWSMessageContentJobFinderExtensionGroup = @"OWSMessageContentJo
|
|||
|
||||
- (void)enqueueEnvelopeData:(NSData *)envelopeData
|
||||
plaintextData:(NSData *_Nullable)plaintextData
|
||||
wasReceivedByUD:(BOOL)wasReceivedByUD
|
||||
transaction:(YapDatabaseReadWriteTransaction *)transaction
|
||||
{
|
||||
if (envelopeData.length < 1) {
|
||||
|
@ -494,7 +507,10 @@ NSString *const OWSMessageContentJobFinderExtensionGroup = @"OWSMessageContentJo
|
|||
OWSAssert(transaction);
|
||||
|
||||
// We need to persist the decrypted envelope data ASAP to prevent data loss.
|
||||
[self.processingQueue enqueueEnvelopeData:envelopeData plaintextData:plaintextData transaction:transaction];
|
||||
[self.processingQueue enqueueEnvelopeData:envelopeData
|
||||
plaintextData:plaintextData
|
||||
wasReceivedByUD:wasReceivedByUD
|
||||
transaction:transaction];
|
||||
|
||||
// The new envelope won't be visible to the finder until this transaction commits,
|
||||
// so drainQueue in the transaction completion.
|
||||
|
|
|
@ -21,6 +21,7 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
// processEnvelope: can be called from any thread.
|
||||
- (void)throws_processEnvelope:(SSKProtoEnvelope *)envelope
|
||||
plaintextData:(NSData *_Nullable)plaintextData
|
||||
wasReceivedByUD:(BOOL)wasReceivedByUD
|
||||
transaction:(YapDatabaseReadWriteTransaction *)transaction;
|
||||
|
||||
// This should be invoked by the main app when the app is ready.
|
||||
|
|
|
@ -226,6 +226,7 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
|
||||
- (void)throws_processEnvelope:(SSKProtoEnvelope *)envelope
|
||||
plaintextData:(NSData *_Nullable)plaintextData
|
||||
wasReceivedByUD:(BOOL)wasReceivedByUD
|
||||
transaction:(YapDatabaseReadWriteTransaction *)transaction
|
||||
{
|
||||
if (!envelope) {
|
||||
|
@ -268,7 +269,10 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
OWSFailDebug(@"missing decrypted data for envelope: %@", [self descriptionForEnvelope:envelope]);
|
||||
return;
|
||||
}
|
||||
[self throws_handleEnvelope:envelope plaintextData:plaintextData transaction:transaction];
|
||||
[self throws_handleEnvelope:envelope
|
||||
plaintextData:plaintextData
|
||||
wasReceivedByUD:wasReceivedByUD
|
||||
transaction:transaction];
|
||||
break;
|
||||
case SSKProtoEnvelopeTypeReceipt:
|
||||
OWSAssertDebug(!plaintextData);
|
||||
|
@ -359,6 +363,7 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
|
||||
- (void)throws_handleEnvelope:(SSKProtoEnvelope *)envelope
|
||||
plaintextData:(NSData *)plaintextData
|
||||
wasReceivedByUD:(BOOL)wasReceivedByUD
|
||||
transaction:(YapDatabaseReadWriteTransaction *)transaction
|
||||
{
|
||||
if (!envelope) {
|
||||
|
@ -413,7 +418,10 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
|
||||
[[OWSDeviceManager sharedManager] setHasReceivedSyncMessage];
|
||||
} else if (contentProto.dataMessage) {
|
||||
[self handleIncomingEnvelope:envelope withDataMessage:contentProto.dataMessage transaction:transaction];
|
||||
[self handleIncomingEnvelope:envelope
|
||||
withDataMessage:contentProto.dataMessage
|
||||
wasReceivedByUD:wasReceivedByUD
|
||||
transaction:transaction];
|
||||
} else if (contentProto.callMessage) {
|
||||
[self handleIncomingEnvelope:envelope withCallMessage:contentProto.callMessage];
|
||||
} else if (contentProto.typingMessage) {
|
||||
|
@ -436,7 +444,10 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
}
|
||||
OWSLogInfo(@"handling message: <DataMessage: %@ />", [self descriptionForDataMessage:dataMessageProto]);
|
||||
|
||||
[self handleIncomingEnvelope:envelope withDataMessage:dataMessageProto transaction:transaction];
|
||||
[self handleIncomingEnvelope:envelope
|
||||
withDataMessage:dataMessageProto
|
||||
wasReceivedByUD:wasReceivedByUD
|
||||
transaction:transaction];
|
||||
} else {
|
||||
OWSProdInfoWEnvelope([OWSAnalyticsEvents messageManagerErrorEnvelopeNoActionablePayload], envelope);
|
||||
}
|
||||
|
@ -444,6 +455,7 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
|
||||
- (void)handleIncomingEnvelope:(SSKProtoEnvelope *)envelope
|
||||
withDataMessage:(SSKProtoDataMessage *)dataMessage
|
||||
wasReceivedByUD:(BOOL)wasReceivedByUD
|
||||
transaction:(YapDatabaseReadWriteTransaction *)transaction
|
||||
{
|
||||
if (!envelope) {
|
||||
|
@ -526,9 +538,15 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
} else if ((dataMessage.flags & SSKProtoDataMessageFlagsProfileKeyUpdate) != 0) {
|
||||
[self handleProfileKeyMessageWithEnvelope:envelope dataMessage:dataMessage];
|
||||
} else if (dataMessage.attachments.count > 0) {
|
||||
[self handleReceivedMediaWithEnvelope:envelope dataMessage:dataMessage transaction:transaction];
|
||||
[self handleReceivedMediaWithEnvelope:envelope
|
||||
dataMessage:dataMessage
|
||||
wasReceivedByUD:wasReceivedByUD
|
||||
transaction:transaction];
|
||||
} else {
|
||||
[self handleReceivedTextMessageWithEnvelope:envelope dataMessage:dataMessage transaction:transaction];
|
||||
[self handleReceivedTextMessageWithEnvelope:envelope
|
||||
dataMessage:dataMessage
|
||||
wasReceivedByUD:wasReceivedByUD
|
||||
transaction:transaction];
|
||||
|
||||
if ([self isDataMessageGroupAvatarUpdate:dataMessage]) {
|
||||
OWSLogVerbose(@"Data message had group avatar attachment");
|
||||
|
@ -537,18 +555,11 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
}
|
||||
|
||||
// Send delivery receipts for "valid data" messages received via UD.
|
||||
BOOL wasReceivedByUD = [self wasReceivedByUD:envelope];
|
||||
if (wasReceivedByUD) {
|
||||
[self.outgoingReceiptManager enqueueDeliveryReceiptForEnvelope:envelope];
|
||||
}
|
||||
}
|
||||
|
||||
- (BOOL)wasReceivedByUD:(SSKProtoEnvelope *)envelope
|
||||
{
|
||||
return (
|
||||
envelope.type == SSKProtoEnvelopeTypeUnidentifiedSender && (!envelope.hasSource || envelope.source.length < 1));
|
||||
}
|
||||
|
||||
- (void)sendGroupInfoRequest:(NSData *)groupId
|
||||
envelope:(SSKProtoEnvelope *)envelope
|
||||
transaction:(YapDatabaseReadWriteTransaction *)transaction
|
||||
|
@ -761,6 +772,7 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
|
||||
- (void)handleReceivedMediaWithEnvelope:(SSKProtoEnvelope *)envelope
|
||||
dataMessage:(SSKProtoDataMessage *)dataMessage
|
||||
wasReceivedByUD:(BOOL)wasReceivedByUD
|
||||
transaction:(YapDatabaseReadWriteTransaction *)transaction
|
||||
{
|
||||
if (!envelope) {
|
||||
|
@ -782,8 +794,9 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
return;
|
||||
}
|
||||
|
||||
TSIncomingMessage *_Nullable message =
|
||||
[self handleReceivedEnvelope:envelope withDataMessage:dataMessage transaction:transaction];
|
||||
TSIncomingMessage *_Nullable message = [self handleReceivedEnvelope:envelope withDataMessage:dataMessage
|
||||
wasReceivedByUD:wasReceivedByUD
|
||||
transaction:transaction];
|
||||
|
||||
if (!message) {
|
||||
return;
|
||||
|
@ -1037,6 +1050,7 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
|
||||
- (void)handleReceivedTextMessageWithEnvelope:(SSKProtoEnvelope *)envelope
|
||||
dataMessage:(SSKProtoDataMessage *)dataMessage
|
||||
wasReceivedByUD:(BOOL)wasReceivedByUD
|
||||
transaction:(YapDatabaseReadWriteTransaction *)transaction
|
||||
{
|
||||
if (!envelope) {
|
||||
|
@ -1052,7 +1066,10 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
return;
|
||||
}
|
||||
|
||||
[self handleReceivedEnvelope:envelope withDataMessage:dataMessage transaction:transaction];
|
||||
[self handleReceivedEnvelope:envelope
|
||||
withDataMessage:dataMessage
|
||||
wasReceivedByUD:wasReceivedByUD
|
||||
transaction:transaction];
|
||||
}
|
||||
|
||||
- (void)handleGroupInfoRequest:(SSKProtoEnvelope *)envelope
|
||||
|
@ -1135,6 +1152,7 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
|
||||
- (TSIncomingMessage *_Nullable)handleReceivedEnvelope:(SSKProtoEnvelope *)envelope
|
||||
withDataMessage:(SSKProtoDataMessage *)dataMessage
|
||||
wasReceivedByUD:(BOOL)wasReceivedByUD
|
||||
transaction:(YapDatabaseReadWriteTransaction *)transaction
|
||||
{
|
||||
if (!envelope) {
|
||||
|
@ -1155,7 +1173,6 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
NSData *groupId = dataMessage.group ? dataMessage.group.id : nil;
|
||||
OWSContact *_Nullable contact = [OWSContacts contactForDataMessage:dataMessage transaction:transaction];
|
||||
NSNumber *_Nullable serverTimestamp = (envelope.hasServerTimestamp ? @(envelope.serverTimestamp) : nil);
|
||||
BOOL wasReceivedByUD = [self wasReceivedByUD:envelope];
|
||||
|
||||
if (dataMessage.group.type == SSKProtoGroupContextTypeRequestInfo) {
|
||||
[self handleGroupInfoRequest:envelope dataMessage:dataMessage transaction:transaction];
|
||||
|
|
|
@ -335,6 +335,12 @@ NSString *const OWSMessageDecryptJobFinderExtensionGroup = @"OWSMessageProcessin
|
|||
}];
|
||||
}
|
||||
|
||||
- (BOOL)wasReceivedByUD:(SSKProtoEnvelope *)envelope
|
||||
{
|
||||
return (
|
||||
envelope.type == SSKProtoEnvelopeTypeUnidentifiedSender && (!envelope.hasSource || envelope.source.length < 1));
|
||||
}
|
||||
|
||||
- (void)processJob:(OWSMessageDecryptJob *)job completion:(void (^)(BOOL))completion
|
||||
{
|
||||
AssertOnDispatchQueue(self.serialQueue);
|
||||
|
@ -358,6 +364,10 @@ NSString *const OWSMessageDecryptJobFinderExtensionGroup = @"OWSMessageProcessin
|
|||
return;
|
||||
}
|
||||
|
||||
// We use the original envelope for this check;
|
||||
// the decryption process might rewrite the envelope.
|
||||
BOOL wasReceivedByUD = [self wasReceivedByUD:envelope];
|
||||
|
||||
[self.messageDecrypter decryptEnvelope:envelope
|
||||
envelopeData:job.envelopeData
|
||||
successBlock:^(OWSMessageDecryptResult *result, YapDatabaseReadWriteTransaction *transaction) {
|
||||
|
@ -371,6 +381,7 @@ NSString *const OWSMessageDecryptJobFinderExtensionGroup = @"OWSMessageProcessin
|
|||
// since the envelope may be altered by the decryption process in the UD case.
|
||||
[self.batchMessageProcessor enqueueEnvelopeData:result.envelopeData
|
||||
plaintextData:result.plaintextData
|
||||
wasReceivedByUD:wasReceivedByUD
|
||||
transaction:transaction];
|
||||
|
||||
dispatch_async(self.serialQueue, ^{
|
||||
|
|
Loading…
Reference in New Issue