From bb964540705151ea96a5f50d49894ef985273bd4 Mon Sep 17 00:00:00 2001 From: Matthew Chen Date: Mon, 30 Apr 2018 10:21:58 -0400 Subject: [PATCH] More outgoing message fixes. --- .../src/Contacts/ContactsUpdater.m | 4 ++ .../Messages/Interactions/TSOutgoingMessage.h | 7 +++- .../Messages/Interactions/TSOutgoingMessage.m | 42 +++++++++++++++++++ .../src/Messages/OWSMessageSender.m | 6 ++- 4 files changed, 56 insertions(+), 3 deletions(-) diff --git a/SignalServiceKit/src/Contacts/ContactsUpdater.m b/SignalServiceKit/src/Contacts/ContactsUpdater.m index f31fecdba..e7138d723 100644 --- a/SignalServiceKit/src/Contacts/ContactsUpdater.m +++ b/SignalServiceKit/src/Contacts/ContactsUpdater.m @@ -40,6 +40,10 @@ NS_ASSUME_NONNULL_BEGIN - (nullable SignalRecipient *)synchronousLookup:(NSString *)identifier error:(NSError **)error { + OWSAssert(error); + + DDLogInfo(@"%@ %s %@", self.logTag, __PRETTY_FUNCTION__, identifier); + dispatch_semaphore_t sema = dispatch_semaphore_create(0); __block SignalRecipient *recipient; diff --git a/SignalServiceKit/src/Messages/Interactions/TSOutgoingMessage.h b/SignalServiceKit/src/Messages/Interactions/TSOutgoingMessage.h index 87aa0fcca..63a41ce03 100644 --- a/SignalServiceKit/src/Messages/Interactions/TSOutgoingMessage.h +++ b/SignalServiceKit/src/Messages/Interactions/TSOutgoingMessage.h @@ -21,7 +21,8 @@ typedef NS_ENUM(NSInteger, TSOutgoingMessageState) { TSOutgoingMessageStateSent, }; -// Used +NSString *NSStringForOutgoingMessageState(TSOutgoingMessageState value); + typedef NS_ENUM(NSInteger, OWSOutgoingMessageRecipientState) { // Message could not be sent to recipient. OWSOutgoingMessageRecipientStateFailed = 0, @@ -37,6 +38,8 @@ typedef NS_ENUM(NSInteger, OWSOutgoingMessageRecipientState) { OWSOutgoingMessageRecipientStateMax = OWSOutgoingMessageRecipientStateSent, }; +NSString *NSStringForOutgoingMessageRecipientState(OWSOutgoingMessageRecipientState value); + typedef NS_ENUM(NSInteger, TSGroupMetaMessage) { TSGroupMessageUnspecified, TSGroupMessageNew, @@ -223,6 +226,8 @@ typedef NS_ENUM(NSInteger, TSGroupMetaMessage) { - (nullable NSNumber *)firstRecipientReadTimestamp; +- (NSString *)statusDescription; + @end NS_ASSUME_NONNULL_END diff --git a/SignalServiceKit/src/Messages/Interactions/TSOutgoingMessage.m b/SignalServiceKit/src/Messages/Interactions/TSOutgoingMessage.m index 13ee3b170..b77edc8d4 100644 --- a/SignalServiceKit/src/Messages/Interactions/TSOutgoingMessage.m +++ b/SignalServiceKit/src/Messages/Interactions/TSOutgoingMessage.m @@ -23,6 +23,36 @@ NS_ASSUME_NONNULL_BEGIN NSString *const kTSOutgoingMessageSentRecipientAll = @"kTSOutgoingMessageSentRecipientAll"; +NSString *NSStringForOutgoingMessageState(TSOutgoingMessageState value) +{ + switch (value) { + case TSOutgoingMessageStateSending: + return @"TSOutgoingMessageStateSending"; + case TSOutgoingMessageStateFailed: + return @"TSOutgoingMessageStateFailed"; + case TSOutgoingMessageStateSent_OBSOLETE: + return @"TSOutgoingMessageStateSent_OBSOLETE"; + case TSOutgoingMessageStateDelivered_OBSOLETE: + return @"TSOutgoingMessageStateDelivered_OBSOLETE"; + case TSOutgoingMessageStateSent: + return @"TSOutgoingMessageStateSent"; + } +} + +NSString *NSStringForOutgoingMessageRecipientState(OWSOutgoingMessageRecipientState value) +{ + switch (value) { + case OWSOutgoingMessageRecipientStateFailed: + return @"OWSOutgoingMessageRecipientStateFailed"; + case OWSOutgoingMessageRecipientStateSending: + return @"OWSOutgoingMessageRecipientStateSending"; + case OWSOutgoingMessageRecipientStateSkipped: + return @"OWSOutgoingMessageRecipientStateSkipped"; + case OWSOutgoingMessageRecipientStateSent: + return @"OWSOutgoingMessageRecipientStateSent"; + } +} + @interface TSOutgoingMessageRecipientState () @property (atomic) OWSOutgoingMessageRecipientState state; @@ -870,6 +900,18 @@ NSString *const kTSOutgoingMessageSentRecipientAll = @"kTSOutgoingMessageSentRec return [builder build]; } +- (NSString *)statusDescription +{ + NSMutableString *result = [NSMutableString new]; + [result appendFormat:@"[status: %@", NSStringForOutgoingMessageState(self.messageState)]; + for (NSString *recipientId in self.recipientStateMap) { + TSOutgoingMessageRecipientState *recipientState = self.recipientStateMap[recipientId]; + [result appendFormat:@", %@: %@", recipientId, NSStringForOutgoingMessageRecipientState(recipientState.state)]; + } + [result appendString:@"]"]; + return [result copy]; +} + @end NS_ASSUME_NONNULL_END diff --git a/SignalServiceKit/src/Messages/OWSMessageSender.m b/SignalServiceKit/src/Messages/OWSMessageSender.m index 5f8299001..5a73aa4c4 100644 --- a/SignalServiceKit/src/Messages/OWSMessageSender.m +++ b/SignalServiceKit/src/Messages/OWSMessageSender.m @@ -186,7 +186,9 @@ void AssertIsOnSendingQueue() - (void)didSucceed { - OWSAssert(self.message.messageState == TSOutgoingMessageStateSent); + if (self.message.messageState != TSOutgoingMessageStateSent) { + OWSProdLogAndFail(@"%@ unexpected message status: %@", self.logTag, self.message.statusDescription); + } self.successHandler(); } @@ -423,7 +425,7 @@ NSString *const OWSMessageSenderRateLimitedException = @"RateLimitedException"; { OWSAssert(error); - error = nil; + *error = nil; NSMutableArray *recipients = [NSMutableArray new];