Merge branch 'mkirk/improve-asserts' into hotfix/2.15.2

pull/1/head
Michael Kirk 7 years ago
commit df94337a01

@ -355,12 +355,12 @@ if __name__ == "__main__":
event_names_header_file_path = os.path.join(git_repo_path, 'SignalServiceKit', 'src', 'Util', 'OWSAnalyticsEvents.h')
if not os.path.exists(event_names_header_file_path):
print 'Macros header does not exist:', event_names_header_file_path
print 'event_names_header_file_path does not exist:', event_names_header_file_path
sys.exit(1)
event_names_source_file_path = os.path.join(git_repo_path, 'SignalServiceKit', 'src', 'Util', 'OWSAnalyticsEvents.m')
if not os.path.exists(event_names_source_file_path):
print 'Macros header does not exist:', event_names_source_file_path
print 'event_names_source_file_path does not exist:', event_names_source_file_path
sys.exit(1)
for rootdir, dirnames, filenames in os.walk(git_repo_path):

@ -42,20 +42,6 @@
NS_ASSUME_NONNULL_BEGIN
// The debug logs can be more verbose than the analytics events.
//
// In this case `descriptionForEnvelope` is valuable enough to
// log but too dangerous to include in the analytics event.
#define OWSProdErrorWEnvelope(__analyticsEventName, __envelope) \
{ \
DDLogError(@"%s:%d %@: %@", \
__PRETTY_FUNCTION__, \
__LINE__, \
__analyticsEventName, \
[self descriptionForEnvelope:__envelope]); \
OWSProdError(__analyticsEventName) \
}
@interface TSMessagesManager ()
@property (nonatomic, readonly) id<OWSCallMessageHandler> callMessageHandler;
@ -278,6 +264,7 @@ NS_ASSUME_NONNULL_BEGIN
completion:(nullable MessageManagerCompletionBlock)completionHandler
{
OWSAssert([NSThread isMainThread]);
OWSAssert([TSAccountManager isRegistered]);
// Ensure that completionHandler is called on the main thread,
// and handle the nil case.
@ -366,6 +353,7 @@ NS_ASSUME_NONNULL_BEGIN
- (void)handleDeliveryReceipt:(OWSSignalServiceProtosEnvelope *)envelope
{
OWSAssert([NSThread isMainThread]);
[self.dbConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) {
TSInteraction *interaction =
[TSInteraction interactionForTimestamp:envelope.timestamp withTransaction:transaction];
@ -380,6 +368,7 @@ NS_ASSUME_NONNULL_BEGIN
completion:(void (^)(NSError *_Nullable error))completion
{
OWSAssert([NSThread isMainThread]);
@synchronized(self) {
TSStorageManager *storageManager = [TSStorageManager sharedManager];
NSString *recipientId = messageEnvelope.source;
@ -511,7 +500,7 @@ NS_ASSUME_NONNULL_BEGIN
DDLogInfo(@"%@ handling dataMessage: %@", self.tag, [self descriptionForDataMessage:dataMessage]);
[self handleIncomingEnvelope:envelope withDataMessage:dataMessage];
} else {
DDLogWarn(@"%@ Ignoring envelope with neither DataMessage nor Content.", self.tag);
OWSProdInfoWEnvelope([OWSAnalyticsEvents messageManagerErrorEnvelopeNoActionablePayload], envelope);
}
}
@ -591,7 +580,7 @@ NS_ASSUME_NONNULL_BEGIN
} else if (callMessage.hasBusy) {
[self.callMessageHandler receivedBusy:callMessage.busy fromCallerId:incomingEnvelope.source];
} else {
DDLogWarn(@"%@ Ignoring Received CallMessage without actionable content: %@", self.tag, callMessage);
OWSProdInfoWEnvelope([OWSAnalyticsEvents messageManagerErrorCallMessageNoActionablePayload], incomingEnvelope);
}
}
@ -600,6 +589,7 @@ NS_ASSUME_NONNULL_BEGIN
{
OWSAssert([NSThread isMainThread]);
TSGroupThread *groupThread = [TSGroupThread getOrCreateThreadWithGroupIdData:dataMessage.group.id];
OWSAssert(groupThread);
OWSAttachmentsProcessor *attachmentsProcessor =
[[OWSAttachmentsProcessor alloc] initWithAttachmentProtos:@[ dataMessage.group.avatar ]
timestamp:envelope.timestamp
@ -628,6 +618,7 @@ NS_ASSUME_NONNULL_BEGIN
{
OWSAssert([NSThread isMainThread]);
TSThread *thread = [self threadForEnvelope:envelope dataMessage:dataMessage];
OWSAssert(thread);
OWSAttachmentsProcessor *attachmentsProcessor =
[[OWSAttachmentsProcessor alloc] initWithAttachmentProtos:dataMessage.attachments
timestamp:envelope.timestamp
@ -665,6 +656,15 @@ NS_ASSUME_NONNULL_BEGIN
withSyncMessage:(OWSSignalServiceProtosSyncMessage *)syncMessage
{
OWSAssert([NSThread isMainThread]);
OWSAssert([TSAccountManager isRegistered]);
NSString *localNumber = [TSAccountManager localNumber];
if (![localNumber isEqualToString:messageEnvelope.source]) {
// Sync messages should only come from linked devices.
OWSProdErrorWEnvelope([OWSAnalyticsEvents messageManagerErrorSyncMessageFromUnknownSource], messageEnvelope);
return;
}
if (syncMessage.hasSent) {
OWSIncomingSentMessageTranscript *transcript =
[[OWSIncomingSentMessageTranscript alloc] initWithProto:syncMessage.sent relay:messageEnvelope.relay];
@ -777,6 +777,7 @@ NS_ASSUME_NONNULL_BEGIN
enabled:NO
durationSeconds:OWSDisappearingMessagesConfigurationDefaultExpirationDuration];
}
OWSAssert(disappearingMessagesConfiguration);
[disappearingMessagesConfiguration save];
NSString *name = [self.contactsManager displayNameForPhoneIdentifier:envelope.source];
OWSDisappearingConfigurationUpdateInfoMessage *message =
@ -798,6 +799,7 @@ NS_ASSUME_NONNULL_BEGIN
{
OWSAssert([NSThread isMainThread]);
OWSAssert(gThread);
OWSAssert(gThread.groupModel);
OWSAssert(message);
if (gThread.groupModel.groupImage) {
@ -1023,30 +1025,30 @@ NS_ASSUME_NONNULL_BEGIN
__block TSErrorMessage *errorMessage;
[self.dbConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) {
if ([exception.name isEqualToString:NoSessionException]) {
OWSProdErrorWEnvelope(@"message_manager_error_no_session", envelope);
OWSProdErrorWEnvelope([OWSAnalyticsEvents messageManagerErrorNoSession], envelope);
errorMessage = [TSErrorMessage missingSessionWithEnvelope:envelope withTransaction:transaction];
} else if ([exception.name isEqualToString:InvalidKeyException]) {
OWSProdErrorWEnvelope(@"message_manager_error_invalid_key", envelope);
OWSProdErrorWEnvelope([OWSAnalyticsEvents messageManagerErrorInvalidKey], envelope);
errorMessage = [TSErrorMessage invalidKeyExceptionWithEnvelope:envelope withTransaction:transaction];
} else if ([exception.name isEqualToString:InvalidKeyIdException]) {
OWSProdErrorWEnvelope(@"message_manager_error_invalid_key_id", envelope);
OWSProdErrorWEnvelope([OWSAnalyticsEvents messageManagerErrorInvalidKeyId], envelope);
errorMessage = [TSErrorMessage invalidKeyExceptionWithEnvelope:envelope withTransaction:transaction];
} else if ([exception.name isEqualToString:DuplicateMessageException]) {
// Duplicate messages are dismissed
return;
} else if ([exception.name isEqualToString:InvalidVersionException]) {
OWSProdErrorWEnvelope(@"message_manager_error_invalid_message_version", envelope);
OWSProdErrorWEnvelope([OWSAnalyticsEvents messageManagerErrorInvalidMessageVersion], envelope);
errorMessage = [TSErrorMessage invalidVersionWithEnvelope:envelope withTransaction:transaction];
} else if ([exception.name isEqualToString:UntrustedIdentityKeyException]) {
// Should no longer get here, since we now record the new identity for incoming messages.
OWSProdErrorWEnvelope(@"message_manager_error_untrusted_identity_key_exception", envelope);
OWSProdErrorWEnvelope([OWSAnalyticsEvents messageManagerErrorUntrustedIdentityKeyException], envelope);
OWSFail(@"%@ Failed to trust identity on incoming message from: %@.%d",
self.tag,
envelope.source,
envelope.sourceDevice);
return;
} else {
OWSProdErrorWEnvelope(@"message_manager_error_corrupt_message", envelope);
OWSProdErrorWEnvelope([OWSAnalyticsEvents messageManagerErrorCorruptMessage], envelope);
errorMessage = [TSErrorMessage corruptedMessageWithEnvelope:envelope withTransaction:transaction];
}

@ -134,4 +134,32 @@ typedef NSDictionary<NSString *, id> *_Nonnull (^OWSProdAssertParametersBlock)()
#define OWSProdCritical(__eventName) OWSProdEventWParams(OWSAnalyticsSeverityCritical, __eventName, nil)
#pragma mark - TSMessagesManager macros
// Defined here rather than in TSMessagesManager so that our analytic event extraction script
// can properly detect the event names.
//
// The debug logs can be more verbose than the analytics events.
//
// In this case `descriptionForEnvelope` is valuable enough to
// log but too dangerous to include in the analytics event.
#define OWSProdErrorWEnvelope(__analyticsEventName, __envelope) \
{ \
DDLogError(@"%s:%d %@: %@", \
__PRETTY_FUNCTION__, \
__LINE__, \
__analyticsEventName, \
[self descriptionForEnvelope:__envelope]); \
OWSProdError(__analyticsEventName) \
}
#define OWSProdInfoWEnvelope(__analyticsEventName, __envelope) \
{ \
DDLogInfo(@"%s:%d %@: %@", \
__PRETTY_FUNCTION__, \
__LINE__, \
__analyticsEventName, \
[self descriptionForEnvelope:__envelope]); \
OWSProdInfo(__analyticsEventName) \
}
NS_ASSUME_NONNULL_END

@ -96,24 +96,42 @@ NS_ASSUME_NONNULL_BEGIN
+ (NSString *)errorUpdateAttributesRequestFailed;
+ (NSString *)messageManagerErrorCallMessageNoActionablePayload;
+ (NSString *)messageManagerErrorCorruptMessage;
+ (NSString *)messageManagerErrorCouldNotHandlePrekeyBundle;
+ (NSString *)messageManagerErrorCouldNotHandleSecureMessage;
+ (NSString *)messageManagerErrorEnvelopeNoActionablePayload;
+ (NSString *)messageManagerErrorEnvelopeTypeKeyExchange;
+ (NSString *)messageManagerErrorEnvelopeTypeOther;
+ (NSString *)messageManagerErrorEnvelopeTypeUnknown;
+ (NSString *)messageManagerErrorInvalidKey;
+ (NSString *)messageManagerErrorInvalidKeyId;
+ (NSString *)messageManagerErrorInvalidMessageVersion;
+ (NSString *)messageManagerErrorInvalidProtocolMessage;
+ (NSString *)messageManagerErrorMessageEnvelopeHasNoContent;
+ (NSString *)messageManagerErrorNoSession;
+ (NSString *)messageManagerErrorOversizeMessage;
+ (NSString *)messageManagerErrorPrekeyBundleEnvelopeHasNoContent;
+ (NSString *)messageManagerErrorSyncMessageFromUnknownSource;
+ (NSString *)messageManagerErrorUntrustedIdentityKeyException;
+ (NSString *)messageReceiverErrorLargeMessage;
+ (NSString *)messageReceiverErrorOversizeMessage;

@ -222,6 +222,16 @@ NS_ASSUME_NONNULL_BEGIN
return @"error_update_attributes_request_failed";
}
+ (NSString *)messageManagerErrorCallMessageNoActionablePayload
{
return @"message_manager_error_call_message_no_actionable_payload";
}
+ (NSString *)messageManagerErrorCorruptMessage
{
return @"message_manager_error_corrupt_message";
}
+ (NSString *)messageManagerErrorCouldNotHandlePrekeyBundle
{
return @"message_manager_error_could_not_handle_prekey_bundle";
@ -232,6 +242,11 @@ NS_ASSUME_NONNULL_BEGIN
return @"message_manager_error_could_not_handle_secure_message";
}
+ (NSString *)messageManagerErrorEnvelopeNoActionablePayload
{
return @"message_manager_error_envelope_no_actionable_payload";
}
+ (NSString *)messageManagerErrorEnvelopeTypeKeyExchange
{
return @"message_manager_error_envelope_type_key_exchange";
@ -247,6 +262,21 @@ NS_ASSUME_NONNULL_BEGIN
return @"message_manager_error_envelope_type_unknown";
}
+ (NSString *)messageManagerErrorInvalidKey
{
return @"message_manager_error_invalid_key";
}
+ (NSString *)messageManagerErrorInvalidKeyId
{
return @"message_manager_error_invalid_key_id";
}
+ (NSString *)messageManagerErrorInvalidMessageVersion
{
return @"message_manager_error_invalid_message_version";
}
+ (NSString *)messageManagerErrorInvalidProtocolMessage
{
return @"message_manager_error_invalid_protocol_message";
@ -257,6 +287,11 @@ NS_ASSUME_NONNULL_BEGIN
return @"message_manager_error_message_envelope_has_no_content";
}
+ (NSString *)messageManagerErrorNoSession
{
return @"message_manager_error_no_session";
}
+ (NSString *)messageManagerErrorOversizeMessage
{
return @"message_manager_error_oversize_message";
@ -267,6 +302,16 @@ NS_ASSUME_NONNULL_BEGIN
return @"message_manager_error_prekey_bundle_envelope_has_no_content";
}
+ (NSString *)messageManagerErrorSyncMessageFromUnknownSource
{
return @"message_manager_error_sync_message_from_unknown_source";
}
+ (NSString *)messageManagerErrorUntrustedIdentityKeyException
{
return @"message_manager_error_untrusted_identity_key_exception";
}
+ (NSString *)messageReceiverErrorLargeMessage
{
return @"message_receiver_error_large_message";

Loading…
Cancel
Save