|
|
|
@ -295,7 +295,7 @@ NS_ASSUME_NONNULL_BEGIN
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (envelope.content != nil) {
|
|
|
|
|
OWSSignalServiceProtosContent *content = [OWSSignalServiceProtosContent parseFromData:plaintextData];
|
|
|
|
|
SSKProtoContent *content = [SSKProtoContent parseFromData:plaintextData];
|
|
|
|
|
DDLogInfo(@"%@ handling content: <Content: %@>", self.logTag, [self descriptionForContent:content]);
|
|
|
|
|
|
|
|
|
|
if (content.hasSyncMessage) {
|
|
|
|
@ -314,8 +314,8 @@ NS_ASSUME_NONNULL_BEGIN
|
|
|
|
|
DDLogWarn(@"%@ Ignoring envelope. Content with no known payload", self.logTag);
|
|
|
|
|
}
|
|
|
|
|
} else if (envelope.legacyMessage != nil) { // DEPRECATED - Remove after all clients have been upgraded.
|
|
|
|
|
OWSSignalServiceProtosDataMessage *dataMessage =
|
|
|
|
|
[OWSSignalServiceProtosDataMessage parseFromData:plaintextData];
|
|
|
|
|
SSKProtoDataMessage *dataMessage =
|
|
|
|
|
[SSKProtoDataMessage parseFromData:plaintextData];
|
|
|
|
|
DDLogInfo(
|
|
|
|
|
@"%@ handling message: <DataMessage: %@ />", self.logTag, [self descriptionForDataMessage:dataMessage]);
|
|
|
|
|
|
|
|
|
@ -326,7 +326,7 @@ NS_ASSUME_NONNULL_BEGIN
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
- (void)handleIncomingEnvelope:(SSKProtoEnvelope *)envelope
|
|
|
|
|
withDataMessage:(OWSSignalServiceProtosDataMessage *)dataMessage
|
|
|
|
|
withDataMessage:(SSKProtoDataMessage *)dataMessage
|
|
|
|
|
transaction:(YapDatabaseReadWriteTransaction *)transaction
|
|
|
|
|
{
|
|
|
|
|
OWSAssert(envelope);
|
|
|
|
@ -363,9 +363,9 @@ NS_ASSUME_NONNULL_BEGIN
|
|
|
|
|
|
|
|
|
|
if (!groupThread) {
|
|
|
|
|
// Unknown group.
|
|
|
|
|
if (dataMessage.group.type == OWSSignalServiceProtosGroupContextTypeUpdate) {
|
|
|
|
|
if (dataMessage.group.type == SSKProtoGroupContextTypeUpdate) {
|
|
|
|
|
// Accept group updates for unknown groups.
|
|
|
|
|
} else if (dataMessage.group.type == OWSSignalServiceProtosGroupContextTypeDeliver) {
|
|
|
|
|
} else if (dataMessage.group.type == SSKProtoGroupContextTypeDeliver) {
|
|
|
|
|
[self sendGroupInfoRequest:dataMessage.group.id envelope:envelope transaction:transaction];
|
|
|
|
|
return;
|
|
|
|
|
} else {
|
|
|
|
@ -375,11 +375,11 @@ NS_ASSUME_NONNULL_BEGIN
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ((dataMessage.flags & OWSSignalServiceProtosDataMessageFlagsEndSession) != 0) {
|
|
|
|
|
if ((dataMessage.flags & SSKProtoDataMessageFlagsEndSession) != 0) {
|
|
|
|
|
[self handleEndSessionMessageWithEnvelope:envelope dataMessage:dataMessage transaction:transaction];
|
|
|
|
|
} else if ((dataMessage.flags & OWSSignalServiceProtosDataMessageFlagsExpirationTimerUpdate) != 0) {
|
|
|
|
|
} else if ((dataMessage.flags & SSKProtoDataMessageFlagsExpirationTimerUpdate) != 0) {
|
|
|
|
|
[self handleExpirationTimerUpdateMessageWithEnvelope:envelope dataMessage:dataMessage transaction:transaction];
|
|
|
|
|
} else if ((dataMessage.flags & OWSSignalServiceProtosDataMessageFlagsProfileKeyUpdate) != 0) {
|
|
|
|
|
} else if ((dataMessage.flags & SSKProtoDataMessageFlagsProfileKeyUpdate) != 0) {
|
|
|
|
|
[self handleProfileKeyMessageWithEnvelope:envelope dataMessage:dataMessage];
|
|
|
|
|
} else if (dataMessage.attachments.count > 0) {
|
|
|
|
|
[self handleReceivedMediaWithEnvelope:envelope dataMessage:dataMessage transaction:transaction];
|
|
|
|
@ -429,7 +429,7 @@ NS_ASSUME_NONNULL_BEGIN
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
- (void)handleIncomingEnvelope:(SSKProtoEnvelope *)envelope
|
|
|
|
|
withReceiptMessage:(OWSSignalServiceProtosReceiptMessage *)receiptMessage
|
|
|
|
|
withReceiptMessage:(SSKProtoReceiptMessage *)receiptMessage
|
|
|
|
|
transaction:(YapDatabaseReadWriteTransaction *)transaction
|
|
|
|
|
{
|
|
|
|
|
OWSAssert(envelope);
|
|
|
|
@ -444,14 +444,14 @@ NS_ASSUME_NONNULL_BEGIN
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
switch (receiptMessage.type) {
|
|
|
|
|
case OWSSignalServiceProtosReceiptMessageTypeDelivery:
|
|
|
|
|
case SSKProtoReceiptMessageTypeDelivery:
|
|
|
|
|
DDLogVerbose(@"%@ Processing receipt message with delivery receipts.", self.logTag);
|
|
|
|
|
[self processDeliveryReceiptsFromRecipientId:envelope.source
|
|
|
|
|
sentTimestamps:sentTimestamps
|
|
|
|
|
deliveryTimestamp:@(envelope.timestamp)
|
|
|
|
|
transaction:transaction];
|
|
|
|
|
return;
|
|
|
|
|
case OWSSignalServiceProtosReceiptMessageTypeRead:
|
|
|
|
|
case SSKProtoReceiptMessageTypeRead:
|
|
|
|
|
DDLogVerbose(@"%@ Processing receipt message with read receipts.", self.logTag);
|
|
|
|
|
[OWSReadReceiptManager.sharedManager processReadReceiptsFromRecipientId:envelope.source
|
|
|
|
|
sentTimestamps:sentTimestamps
|
|
|
|
@ -464,7 +464,7 @@ NS_ASSUME_NONNULL_BEGIN
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
- (void)handleIncomingEnvelope:(SSKProtoEnvelope *)envelope
|
|
|
|
|
withCallMessage:(OWSSignalServiceProtosCallMessage *)callMessage
|
|
|
|
|
withCallMessage:(SSKProtoCallMessage *)callMessage
|
|
|
|
|
{
|
|
|
|
|
OWSAssert(envelope);
|
|
|
|
|
OWSAssert(callMessage);
|
|
|
|
@ -484,7 +484,7 @@ NS_ASSUME_NONNULL_BEGIN
|
|
|
|
|
} else if (callMessage.hasAnswer) {
|
|
|
|
|
[self.callMessageHandler receivedAnswer:callMessage.answer fromCallerId:envelope.source];
|
|
|
|
|
} else if (callMessage.iceUpdate.count > 0) {
|
|
|
|
|
for (OWSSignalServiceProtosCallMessageIceUpdate *iceUpdate in callMessage.iceUpdate) {
|
|
|
|
|
for (SSKProtoCallMessageIceUpdate *iceUpdate in callMessage.iceUpdate) {
|
|
|
|
|
[self.callMessageHandler receivedIceUpdate:iceUpdate fromCallerId:envelope.source];
|
|
|
|
|
}
|
|
|
|
|
} else if (callMessage.hasHangup) {
|
|
|
|
@ -499,7 +499,7 @@ NS_ASSUME_NONNULL_BEGIN
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
- (void)handleReceivedGroupAvatarUpdateWithEnvelope:(SSKProtoEnvelope *)envelope
|
|
|
|
|
dataMessage:(OWSSignalServiceProtosDataMessage *)dataMessage
|
|
|
|
|
dataMessage:(SSKProtoDataMessage *)dataMessage
|
|
|
|
|
transaction:(YapDatabaseReadWriteTransaction *)transaction
|
|
|
|
|
{
|
|
|
|
|
OWSAssert(envelope);
|
|
|
|
@ -537,7 +537,7 @@ NS_ASSUME_NONNULL_BEGIN
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
- (void)handleReceivedMediaWithEnvelope:(SSKProtoEnvelope *)envelope
|
|
|
|
|
dataMessage:(OWSSignalServiceProtosDataMessage *)dataMessage
|
|
|
|
|
dataMessage:(SSKProtoDataMessage *)dataMessage
|
|
|
|
|
transaction:(YapDatabaseReadWriteTransaction *)transaction
|
|
|
|
|
{
|
|
|
|
|
OWSAssert(envelope);
|
|
|
|
@ -585,7 +585,7 @@ NS_ASSUME_NONNULL_BEGIN
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
- (void)handleIncomingEnvelope:(SSKProtoEnvelope *)envelope
|
|
|
|
|
withSyncMessage:(OWSSignalServiceProtosSyncMessage *)syncMessage
|
|
|
|
|
withSyncMessage:(SSKProtoSyncMessage *)syncMessage
|
|
|
|
|
transaction:(YapDatabaseReadWriteTransaction *)transaction
|
|
|
|
|
{
|
|
|
|
|
OWSAssert(envelope);
|
|
|
|
@ -608,7 +608,7 @@ NS_ASSUME_NONNULL_BEGIN
|
|
|
|
|
OWSRecordTranscriptJob *recordJob =
|
|
|
|
|
[[OWSRecordTranscriptJob alloc] initWithIncomingSentMessageTranscript:transcript];
|
|
|
|
|
|
|
|
|
|
OWSSignalServiceProtosDataMessage *dataMessage = syncMessage.sent.message;
|
|
|
|
|
SSKProtoDataMessage *dataMessage = syncMessage.sent.message;
|
|
|
|
|
OWSAssert(dataMessage);
|
|
|
|
|
NSString *destination = syncMessage.sent.destination;
|
|
|
|
|
if (dataMessage && destination.length > 0 && dataMessage.hasProfileKey) {
|
|
|
|
@ -642,7 +642,7 @@ NS_ASSUME_NONNULL_BEGIN
|
|
|
|
|
transaction:transaction];
|
|
|
|
|
}
|
|
|
|
|
} else if (syncMessage.hasRequest) {
|
|
|
|
|
if (syncMessage.request.type == OWSSignalServiceProtosSyncMessageRequestTypeContacts) {
|
|
|
|
|
if (syncMessage.request.type == SSKProtoSyncMessageRequestTypeContacts) {
|
|
|
|
|
// We respond asynchronously because populating the sync message will
|
|
|
|
|
// create transactions and it's not practical (due to locking in the OWSIdentityManager)
|
|
|
|
|
// to plumb our transaction through.
|
|
|
|
@ -668,7 +668,7 @@ NS_ASSUME_NONNULL_BEGIN
|
|
|
|
|
@"%@ Failed to send Contacts response syncMessage with error: %@", self.logTag, error);
|
|
|
|
|
}];
|
|
|
|
|
});
|
|
|
|
|
} else if (syncMessage.request.type == OWSSignalServiceProtosSyncMessageRequestTypeGroups) {
|
|
|
|
|
} else if (syncMessage.request.type == SSKProtoSyncMessageRequestTypeGroups) {
|
|
|
|
|
OWSSyncGroupsMessage *syncGroupsMessage = [[OWSSyncGroupsMessage alloc] init];
|
|
|
|
|
DataSource *dataSource = [DataSourceValue
|
|
|
|
|
dataSourceWithSyncMessageData:[syncGroupsMessage
|
|
|
|
@ -682,10 +682,10 @@ NS_ASSUME_NONNULL_BEGIN
|
|
|
|
|
failure:^(NSError *error) {
|
|
|
|
|
DDLogError(@"%@ Failed to send Groups response syncMessage with error: %@", self.logTag, error);
|
|
|
|
|
}];
|
|
|
|
|
} else if (syncMessage.request.type == OWSSignalServiceProtosSyncMessageRequestTypeBlocked) {
|
|
|
|
|
} else if (syncMessage.request.type == SSKProtoSyncMessageRequestTypeBlocked) {
|
|
|
|
|
DDLogInfo(@"%@ Received request for block list", self.logTag);
|
|
|
|
|
[_blockingManager syncBlockedPhoneNumbers];
|
|
|
|
|
} else if (syncMessage.request.type == OWSSignalServiceProtosSyncMessageRequestTypeConfiguration) {
|
|
|
|
|
} else if (syncMessage.request.type == SSKProtoSyncMessageRequestTypeConfiguration) {
|
|
|
|
|
BOOL areReadReceiptsEnabled =
|
|
|
|
|
[[OWSReadReceiptManager sharedManager] areReadReceiptsEnabledWithTransaction:transaction];
|
|
|
|
|
OWSSyncConfigurationMessage *syncConfigurationMessage =
|
|
|
|
@ -720,7 +720,7 @@ NS_ASSUME_NONNULL_BEGIN
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
- (void)handleEndSessionMessageWithEnvelope:(SSKProtoEnvelope *)envelope
|
|
|
|
|
dataMessage:(OWSSignalServiceProtosDataMessage *)dataMessage
|
|
|
|
|
dataMessage:(SSKProtoDataMessage *)dataMessage
|
|
|
|
|
transaction:(YapDatabaseReadWriteTransaction *)transaction
|
|
|
|
|
{
|
|
|
|
|
OWSAssert(envelope);
|
|
|
|
@ -737,7 +737,7 @@ NS_ASSUME_NONNULL_BEGIN
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
- (void)handleExpirationTimerUpdateMessageWithEnvelope:(SSKProtoEnvelope *)envelope
|
|
|
|
|
dataMessage:(OWSSignalServiceProtosDataMessage *)dataMessage
|
|
|
|
|
dataMessage:(SSKProtoDataMessage *)dataMessage
|
|
|
|
|
transaction:(YapDatabaseReadWriteTransaction *)transaction
|
|
|
|
|
{
|
|
|
|
|
OWSAssert(envelope);
|
|
|
|
@ -780,7 +780,7 @@ NS_ASSUME_NONNULL_BEGIN
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
- (void)handleProfileKeyMessageWithEnvelope:(SSKProtoEnvelope *)envelope
|
|
|
|
|
dataMessage:(OWSSignalServiceProtosDataMessage *)dataMessage
|
|
|
|
|
dataMessage:(SSKProtoDataMessage *)dataMessage
|
|
|
|
|
{
|
|
|
|
|
OWSAssert(envelope);
|
|
|
|
|
OWSAssert(dataMessage);
|
|
|
|
@ -805,7 +805,7 @@ NS_ASSUME_NONNULL_BEGIN
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
- (void)handleReceivedTextMessageWithEnvelope:(SSKProtoEnvelope *)envelope
|
|
|
|
|
dataMessage:(OWSSignalServiceProtosDataMessage *)dataMessage
|
|
|
|
|
dataMessage:(SSKProtoDataMessage *)dataMessage
|
|
|
|
|
transaction:(YapDatabaseReadWriteTransaction *)transaction
|
|
|
|
|
{
|
|
|
|
|
OWSAssert(envelope);
|
|
|
|
@ -845,13 +845,13 @@ NS_ASSUME_NONNULL_BEGIN
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
- (void)handleGroupInfoRequest:(SSKProtoEnvelope *)envelope
|
|
|
|
|
dataMessage:(OWSSignalServiceProtosDataMessage *)dataMessage
|
|
|
|
|
dataMessage:(SSKProtoDataMessage *)dataMessage
|
|
|
|
|
transaction:(YapDatabaseReadWriteTransaction *)transaction
|
|
|
|
|
{
|
|
|
|
|
OWSAssert(envelope);
|
|
|
|
|
OWSAssert(dataMessage);
|
|
|
|
|
OWSAssert(transaction);
|
|
|
|
|
OWSAssert(dataMessage.group.type == OWSSignalServiceProtosGroupContextTypeRequestInfo);
|
|
|
|
|
OWSAssert(dataMessage.group.type == SSKProtoGroupContextTypeRequestInfo);
|
|
|
|
|
|
|
|
|
|
NSData *groupId = dataMessage.hasGroup ? dataMessage.group.id : nil;
|
|
|
|
|
if (!groupId) {
|
|
|
|
@ -901,7 +901,7 @@ NS_ASSUME_NONNULL_BEGIN
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
- (TSIncomingMessage *_Nullable)handleReceivedEnvelope:(SSKProtoEnvelope *)envelope
|
|
|
|
|
withDataMessage:(OWSSignalServiceProtosDataMessage *)dataMessage
|
|
|
|
|
withDataMessage:(SSKProtoDataMessage *)dataMessage
|
|
|
|
|
attachmentIds:(NSArray<NSString *> *)attachmentIds
|
|
|
|
|
transaction:(YapDatabaseReadWriteTransaction *)transaction
|
|
|
|
|
{
|
|
|
|
@ -914,7 +914,7 @@ NS_ASSUME_NONNULL_BEGIN
|
|
|
|
|
NSData *groupId = dataMessage.hasGroup ? dataMessage.group.id : nil;
|
|
|
|
|
OWSContact *_Nullable contact = [OWSContacts contactForDataMessage:dataMessage transaction:transaction];
|
|
|
|
|
|
|
|
|
|
if (dataMessage.group.type == OWSSignalServiceProtosGroupContextTypeRequestInfo) {
|
|
|
|
|
if (dataMessage.group.type == SSKProtoGroupContextTypeRequestInfo) {
|
|
|
|
|
[self handleGroupInfoRequest:envelope dataMessage:dataMessage transaction:transaction];
|
|
|
|
|
return nil;
|
|
|
|
|
}
|
|
|
|
@ -943,7 +943,7 @@ NS_ASSUME_NONNULL_BEGIN
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
switch (dataMessage.group.type) {
|
|
|
|
|
case OWSSignalServiceProtosGroupContextTypeUpdate: {
|
|
|
|
|
case SSKProtoGroupContextTypeUpdate: {
|
|
|
|
|
// Ensures that the thread exists but doesn't update it.
|
|
|
|
|
TSGroupThread *newGroupThread =
|
|
|
|
|
[TSGroupThread getOrCreateThreadWithGroupId:groupId transaction:transaction];
|
|
|
|
@ -976,7 +976,7 @@ NS_ASSUME_NONNULL_BEGIN
|
|
|
|
|
|
|
|
|
|
return nil;
|
|
|
|
|
}
|
|
|
|
|
case OWSSignalServiceProtosGroupContextTypeQuit: {
|
|
|
|
|
case SSKProtoGroupContextTypeQuit: {
|
|
|
|
|
if (!oldGroupThread) {
|
|
|
|
|
DDLogInfo(@"%@ ignoring quit group message from unknown group.", self.logTag);
|
|
|
|
|
return nil;
|
|
|
|
@ -994,7 +994,7 @@ NS_ASSUME_NONNULL_BEGIN
|
|
|
|
|
customMessage:updateGroupInfo] saveWithTransaction:transaction];
|
|
|
|
|
return nil;
|
|
|
|
|
}
|
|
|
|
|
case OWSSignalServiceProtosGroupContextTypeDeliver: {
|
|
|
|
|
case SSKProtoGroupContextTypeDeliver: {
|
|
|
|
|
if (!oldGroupThread) {
|
|
|
|
|
OWSFail(@"%@ ignoring deliver group message from unknown group.", self.logTag);
|
|
|
|
|
return nil;
|
|
|
|
@ -1191,9 +1191,9 @@ NS_ASSUME_NONNULL_BEGIN
|
|
|
|
|
|
|
|
|
|
#pragma mark - helpers
|
|
|
|
|
|
|
|
|
|
- (BOOL)isDataMessageGroupAvatarUpdate:(OWSSignalServiceProtosDataMessage *)dataMessage
|
|
|
|
|
- (BOOL)isDataMessageGroupAvatarUpdate:(SSKProtoDataMessage *)dataMessage
|
|
|
|
|
{
|
|
|
|
|
return dataMessage.hasGroup && dataMessage.group.type == OWSSignalServiceProtosGroupContextTypeUpdate
|
|
|
|
|
return dataMessage.hasGroup && dataMessage.group.type == SSKProtoGroupContextTypeUpdate
|
|
|
|
|
&& dataMessage.group.hasAvatar;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -1203,7 +1203,7 @@ NS_ASSUME_NONNULL_BEGIN
|
|
|
|
|
* but never creating a new group thread.
|
|
|
|
|
*/
|
|
|
|
|
- (nullable TSThread *)threadForEnvelope:(SSKProtoEnvelope *)envelope
|
|
|
|
|
dataMessage:(OWSSignalServiceProtosDataMessage *)dataMessage
|
|
|
|
|
dataMessage:(SSKProtoDataMessage *)dataMessage
|
|
|
|
|
transaction:(YapDatabaseReadWriteTransaction *)transaction
|
|
|
|
|
{
|
|
|
|
|
OWSAssert(envelope);
|
|
|
|
|