From a6cef1c4cc32023c6d2d203cccf9c9f2d4994654 Mon Sep 17 00:00:00 2001 From: Matthew Chen Date: Thu, 29 Nov 2018 14:30:03 -0500 Subject: [PATCH 1/3] Update UD indicators. --- SignalServiceKit/src/Messages/OWSMessageManager.m | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/SignalServiceKit/src/Messages/OWSMessageManager.m b/SignalServiceKit/src/Messages/OWSMessageManager.m index 68a20d28c..033c1976f 100644 --- a/SignalServiceKit/src/Messages/OWSMessageManager.m +++ b/SignalServiceKit/src/Messages/OWSMessageManager.m @@ -528,12 +528,18 @@ NS_ASSUME_NONNULL_BEGIN } // Send delivery receipts for "valid data" messages received via UD. - BOOL wasReceivedByUD = envelope.type == SSKProtoEnvelopeTypeUnidentifiedSender; + 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 @@ -1121,7 +1127,7 @@ 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 = envelope.type == SSKProtoEnvelopeTypeUnidentifiedSender; + BOOL wasReceivedByUD = [self wasReceivedByUD:envelope]; if (dataMessage.group.type == SSKProtoGroupContextTypeRequestInfo) { [self handleGroupInfoRequest:envelope dataMessage:dataMessage transaction:transaction]; From c183aeca8e524a10aa4f0c53d1c19eb0340c4092 Mon Sep 17 00:00:00 2001 From: Matthew Chen Date: Thu, 29 Nov 2018 14:30:16 -0500 Subject: [PATCH 2/3] Refine asserts around message sending. --- SignalServiceKit/src/Messages/OWSMessageSender.m | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/SignalServiceKit/src/Messages/OWSMessageSender.m b/SignalServiceKit/src/Messages/OWSMessageSender.m index 7c5b6655b..d0c0e37e3 100644 --- a/SignalServiceKit/src/Messages/OWSMessageSender.m +++ b/SignalServiceKit/src/Messages/OWSMessageSender.m @@ -1053,6 +1053,17 @@ NSString *const OWSMessageSenderRateLimitedException = @"RateLimitedException"; } } + for (NSDictionary *deviceMessage in deviceMessages) { + NSNumber *_Nullable messageType = deviceMessage[@"type"]; + OWSAssertDebug(messageType); + if (messageSend.isUDSend) { + OWSAssertDebug([messageType isEqualToNumber:@(TSUnidentifiedSenderMessageType)]); + } else { + OWSAssertDebug([messageType isEqualToNumber:@(TSEncryptedWhisperMessageType)] || + [messageType isEqualToNumber:@(TSPreKeyWhisperMessageType)]); + } + } + if (deviceMessages.count == 0) { // This might happen: // From a2dfcd0288962fec3ea8ba2504d368961118e523 Mon Sep 17 00:00:00 2001 From: Matthew Chen Date: Thu, 29 Nov 2018 15:00:37 -0500 Subject: [PATCH 3/3] Respond to CR. --- SignalServiceKit/src/Messages/OWSMessageSender.m | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/SignalServiceKit/src/Messages/OWSMessageSender.m b/SignalServiceKit/src/Messages/OWSMessageSender.m index d0c0e37e3..53c359a67 100644 --- a/SignalServiceKit/src/Messages/OWSMessageSender.m +++ b/SignalServiceKit/src/Messages/OWSMessageSender.m @@ -1056,12 +1056,20 @@ NSString *const OWSMessageSenderRateLimitedException = @"RateLimitedException"; for (NSDictionary *deviceMessage in deviceMessages) { NSNumber *_Nullable messageType = deviceMessage[@"type"]; OWSAssertDebug(messageType); + BOOL hasValidMessageType; if (messageSend.isUDSend) { - OWSAssertDebug([messageType isEqualToNumber:@(TSUnidentifiedSenderMessageType)]); + hasValidMessageType = [messageType isEqualToNumber:@(TSUnidentifiedSenderMessageType)]; } else { - OWSAssertDebug([messageType isEqualToNumber:@(TSEncryptedWhisperMessageType)] || + hasValidMessageType = ([messageType isEqualToNumber:@(TSEncryptedWhisperMessageType)] || [messageType isEqualToNumber:@(TSPreKeyWhisperMessageType)]); } + + if (!hasValidMessageType) { + OWSFailDebug(@"Invalid message type: %@", messageType); + NSError *error = OWSErrorMakeFailedToSendOutgoingMessageError(); + [error setIsRetryable:NO]; + return messageSend.failure(error); + } } if (deviceMessages.count == 0) {