diff --git a/Signal.xcodeproj/project.pbxproj b/Signal.xcodeproj/project.pbxproj index b8abedc39..09d4b7295 100644 --- a/Signal.xcodeproj/project.pbxproj +++ b/Signal.xcodeproj/project.pbxproj @@ -74,6 +74,7 @@ 34B3F89C1E8DF3270035BE1A /* BlockListViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 34B3F89B1E8DF3270035BE1A /* BlockListViewController.m */; }; 34B3F89F1E8DF5490035BE1A /* OWSTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 34B3F89E1E8DF5490035BE1A /* OWSTableViewController.m */; }; 34B3F8A21E8EA6040035BE1A /* ViewControllerUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 34B3F8A11E8EA6040035BE1A /* ViewControllerUtils.m */; }; + 34BECE2B1F74C12700D7438D /* DebugUIStress.m in Sources */ = {isa = PBXBuildFile; fileRef = 34BECE2A1F74C12700D7438D /* DebugUIStress.m */; }; 34C04D801F6195E6004308B3 /* OWSFlatButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34C04D7F1F6195E6004308B3 /* OWSFlatButton.swift */; }; 34C42D5B1F45F7A80072EC04 /* OWSNavigationController.m in Sources */ = {isa = PBXBuildFile; fileRef = 34C42D5A1F45F7A80072EC04 /* OWSNavigationController.m */; }; 34C42D611F4734CA0072EC04 /* OWSContactOffersCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 34C42D601F4734CA0072EC04 /* OWSContactOffersCell.m */; }; @@ -514,6 +515,8 @@ 34B3F89E1E8DF5490035BE1A /* OWSTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OWSTableViewController.m; sourceTree = ""; }; 34B3F8A01E8EA6040035BE1A /* ViewControllerUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ViewControllerUtils.h; sourceTree = ""; }; 34B3F8A11E8EA6040035BE1A /* ViewControllerUtils.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ViewControllerUtils.m; sourceTree = ""; }; + 34BECE291F74C12700D7438D /* DebugUIStress.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DebugUIStress.h; sourceTree = ""; }; + 34BECE2A1F74C12700D7438D /* DebugUIStress.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DebugUIStress.m; sourceTree = ""; }; 34C04D7F1F6195E6004308B3 /* OWSFlatButton.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OWSFlatButton.swift; sourceTree = ""; }; 34C42D591F45F7A80072EC04 /* OWSNavigationController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OWSNavigationController.h; sourceTree = ""; }; 34C42D5A1F45F7A80072EC04 /* OWSNavigationController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OWSNavigationController.m; sourceTree = ""; }; @@ -1121,6 +1124,7 @@ 34D8C0221ED3673300188D7C /* DebugUI */ = { isa = PBXGroup; children = ( + 45638BDB1F3DD0D400128435 /* DebugUICalling.swift */, 34D8C0291ED3685800188D7C /* DebugUIContacts.h */, 34D8C02A1ED3685800188D7C /* DebugUIContacts.m */, 34E3EF0B1EFC235B007F6822 /* DebugUIDiskUsage.h */, @@ -1131,12 +1135,13 @@ 341F2C0E1F2B8AE700D07D6B /* DebugUIMisc.m */, 34E3EF0E1EFC2684007F6822 /* DebugUIPage.h */, 34E3EF0F1EFC2684007F6822 /* DebugUIPage.m */, + 4556FA671F54AA9500AF40DD /* DebugUIProfile.swift */, 452037CF1EE84975004E4CDF /* DebugUISessionState.h */, 452037D01EE84975004E4CDF /* DebugUISessionState.m */, + 34BECE291F74C12700D7438D /* DebugUIStress.h */, + 34BECE2A1F74C12700D7438D /* DebugUIStress.m */, 34D8C0251ED3673300188D7C /* DebugUITableViewController.h */, 34D8C0261ED3673300188D7C /* DebugUITableViewController.m */, - 45638BDB1F3DD0D400128435 /* DebugUICalling.swift */, - 4556FA671F54AA9500AF40DD /* DebugUIProfile.swift */, ); path = DebugUI; sourceTree = ""; @@ -2340,6 +2345,7 @@ 341207271EE19F6A00463194 /* OWSSystemMessageCell.m in Sources */, 341BB7491DB727EE001E2975 /* JSQMediaItem+OWS.m in Sources */, 34B3F89C1E8DF3270035BE1A /* BlockListViewController.m in Sources */, + 34BECE2B1F74C12700D7438D /* DebugUIStress.m in Sources */, 45F2B1941D9C9F48000D2C69 /* OWSOutgoingMessageCollectionViewCell.m in Sources */, 34C42D5B1F45F7A80072EC04 /* OWSNavigationController.m in Sources */, B68EF9BA1C0B1EBD009C3DCD /* FLAnimatedImage.m in Sources */, diff --git a/Signal/src/Signal-Bridging-Header.h b/Signal/src/Signal-Bridging-Header.h index 39bb1b118..cc2f8bca7 100644 --- a/Signal/src/Signal-Bridging-Header.h +++ b/Signal/src/Signal-Bridging-Header.h @@ -2,8 +2,6 @@ // Copyright (c) 2017 Open Whisper Systems. All rights reserved. // -#import - #import "AppSettingsViewController.h" #import "AttachmentSharing.h" #import "DebugUIPage.h" @@ -39,6 +37,7 @@ #import "UIView+OWS.h" #import "ViewControllerUtils.h" #import +#import #import #import #import @@ -53,7 +52,7 @@ #import #import #import -#import +#import #import #import #import diff --git a/Signal/src/ViewControllers/ConversationView/ConversationViewController.m b/Signal/src/ViewControllers/ConversationView/ConversationViewController.m index e95f64b6b..fa1b46b08 100644 --- a/Signal/src/ViewControllers/ConversationView/ConversationViewController.m +++ b/Signal/src/ViewControllers/ConversationView/ConversationViewController.m @@ -2,18 +2,17 @@ // Copyright (c) 2017 Open Whisper Systems. All rights reserved. // +#import "ConversationViewController.h" #import "AppDelegate.h" #import "AttachmentSharing.h" #import "BlockListUIUtils.h" #import "BlockListViewController.h" #import "ContactsViewHelper.h" -#import "ConversationViewController.h" #import "DebugUITableViewController.h" #import "Environment.h" #import "FingerprintViewController.h" #import "FullImageViewController.h" #import "NewGroupViewController.h" -#import "NSDate+millisecondTimeStamp.h" #import "OWSAudioAttachmentPlayer.h" #import "OWSCall.h" #import "OWSContactOffersCell.h" @@ -34,7 +33,6 @@ #import "OWSUnreadIndicatorCell.h" #import "Signal-Swift.h" #import "SignalKeyingStorage.h" -#import "ThreadUtil.h" #import "TSAttachmentPointer.h" #import "TSCall.h" #import "TSContactThread.h" @@ -47,14 +45,15 @@ #import "TSInfoMessage.h" #import "TSInvalidIdentityKeyErrorMessage.h" #import "TSUnreadIndicatorInteraction.h" +#import "ThreadUtil.h" #import "UIFont+OWS.h" #import "UIUtil.h" #import "UIViewController+CameraPermissions.h" #import "UIViewController+OWS.h" #import "ViewControllerUtils.h" +#import #import #import -#import #import #import #import @@ -80,11 +79,11 @@ #import #import #import -#import #import #import #import #import +#import #import @import Photos; diff --git a/Signal/src/ViewControllers/DebugUI/DebugUIMisc.m b/Signal/src/ViewControllers/DebugUI/DebugUIMisc.m index 30284e0b0..ec66c4a93 100644 --- a/Signal/src/ViewControllers/DebugUI/DebugUIMisc.m +++ b/Signal/src/ViewControllers/DebugUI/DebugUIMisc.m @@ -61,13 +61,6 @@ NS_ASSUME_NONNULL_BEGIN actionBlock:^{ [DebugUIMisc clearHasDismissedOffers]; }]]; - if ([thread isKindOfClass:[TSGroupThread class]]) { - TSGroupThread *groupThread = (TSGroupThread *)thread; - [items addObject:[OWSTableItem itemWithTitle:@"Hallucinate twin group" - actionBlock:^{ - [DebugUIMisc hallucinateTwinGroup:groupThread]; - }]]; - } return [OWSTableSection sectionWithTitle:self.name items:items]; } @@ -122,28 +115,6 @@ NS_ASSUME_NONNULL_BEGIN }]; } -// Creates a new group (by cloning the current group) without informing the, -// other members. This can be used to test "group info requests", etc. -+ (void)hallucinateTwinGroup:(TSGroupThread *)groupThread -{ - __block TSGroupThread *thread; - [[TSStorageManager sharedManager].dbReadWriteConnection - readWriteWithBlock:^(YapDatabaseReadWriteTransaction *_Nonnull transaction) { - TSGroupModel *groupModel = - [[TSGroupModel alloc] initWithTitle:[groupThread.groupModel.groupName stringByAppendingString:@" Copy"] - memberIds:[groupThread.groupModel.groupMemberIds mutableCopy] - image:groupThread.groupModel.groupImage - groupId:[SecurityUtils generateRandomBytes:16]]; - thread = [TSGroupThread getOrCreateThreadWithGroupModel:groupModel transaction:transaction]; - }]; - OWSAssert(thread); - - dispatch_async(dispatch_get_main_queue(), ^{ - [Environment presentConversationForThread:thread]; - - }); -} - @end NS_ASSUME_NONNULL_END diff --git a/Signal/src/ViewControllers/DebugUI/DebugUIStress.h b/Signal/src/ViewControllers/DebugUI/DebugUIStress.h new file mode 100644 index 000000000..6a9aa1dbe --- /dev/null +++ b/Signal/src/ViewControllers/DebugUI/DebugUIStress.h @@ -0,0 +1,15 @@ +// +// Copyright (c) 2017 Open Whisper Systems. All rights reserved. +// + +#import "DebugUIPage.h" + +NS_ASSUME_NONNULL_BEGIN + +@class TSThread; + +@interface DebugUIStress : DebugUIPage + +@end + +NS_ASSUME_NONNULL_END diff --git a/Signal/src/ViewControllers/DebugUI/DebugUIStress.m b/Signal/src/ViewControllers/DebugUI/DebugUIStress.m new file mode 100644 index 000000000..7bb86f821 --- /dev/null +++ b/Signal/src/ViewControllers/DebugUI/DebugUIStress.m @@ -0,0 +1,505 @@ +// +// Copyright (c) 2017 Open Whisper Systems. All rights reserved. +// + +#import "DebugUIStress.h" +#import "Environment.h" +#import "OWSMessageSender.h" +#import "OWSTableViewController.h" +#import "ThreadUtil.h" +#import +#import +#import +#import +#import +#import +#import + +NS_ASSUME_NONNULL_BEGIN + +@implementation DebugUIStress + +#pragma mark - Logging + ++ (NSString *)tag +{ + return [NSString stringWithFormat:@"[%@]", self.class]; +} + +- (NSString *)tag +{ + return self.class.tag; +} + +#pragma mark - Factory Methods + +- (NSString *)name +{ + return @"Stress"; +} + +- (nullable OWSTableSection *)sectionForThread:(nullable TSThread *)thread +{ + OWSAssert(thread); + + NSMutableArray *items = [NSMutableArray new]; + [items addObject:[OWSTableItem itemWithTitle:@"Send empty message" + actionBlock:^{ + [DebugUIStress sendStressMessage:thread block:^(SignalRecipient *recipient) { + return [NSData new]; + }]; + }]]; + [items addObject:[OWSTableItem itemWithTitle:@"Send random noise message" + actionBlock:^{ + [DebugUIStress + sendStressMessage:thread + block:^(SignalRecipient *recipient) { + NSUInteger contentLength = arc4random_uniform(32); + return [Cryptography generateRandomBytes:contentLength]; + }]; + }]]; + [items addObject:[OWSTableItem itemWithTitle:@"Send no payload message" + actionBlock:^{ + [DebugUIStress sendStressMessage:thread block:^(SignalRecipient *recipient) { + OWSSignalServiceProtosContentBuilder *contentBuilder = [OWSSignalServiceProtosContentBuilder new]; + return [[contentBuilder build] data]; + }]; + }]]; + [items addObject:[OWSTableItem itemWithTitle:@"Send empty null message" + actionBlock:^{ + [DebugUIStress sendStressMessage:thread block:^(SignalRecipient *recipient) { + OWSSignalServiceProtosContentBuilder *contentBuilder = [OWSSignalServiceProtosContentBuilder new]; + OWSSignalServiceProtosNullMessageBuilder *nullMessageBuilder = [OWSSignalServiceProtosNullMessageBuilder new]; + contentBuilder.nullMessage = [nullMessageBuilder build]; + return [[contentBuilder build] data]; + }]; + }]]; + [items + addObject:[OWSTableItem itemWithTitle:@"Send random null message" + actionBlock:^{ + [DebugUIStress + sendStressMessage:thread + block:^(SignalRecipient *recipient) { + OWSSignalServiceProtosContentBuilder *contentBuilder = + [OWSSignalServiceProtosContentBuilder new]; + OWSSignalServiceProtosNullMessageBuilder *nullMessageBuilder = + [OWSSignalServiceProtosNullMessageBuilder new]; + NSUInteger contentLength = arc4random_uniform(32); + nullMessageBuilder.padding = + [Cryptography generateRandomBytes:contentLength]; + contentBuilder.nullMessage = [nullMessageBuilder build]; + return [[contentBuilder build] data]; + }]; + }]]; + [items + addObject:[OWSTableItem itemWithTitle:@"Send empty sync message" + actionBlock:^{ + [DebugUIStress + sendStressMessage:thread + block:^(SignalRecipient *recipient) { + OWSSignalServiceProtosContentBuilder *contentBuilder = + [OWSSignalServiceProtosContentBuilder new]; + OWSSignalServiceProtosSyncMessageBuilder *syncMessageBuilder = + [OWSSignalServiceProtosSyncMessageBuilder new]; + contentBuilder.syncMessage = [syncMessageBuilder build]; + return [[contentBuilder build] data]; + }]; + }]]; + [items + addObject:[OWSTableItem itemWithTitle:@"Send empty sync sent message" + actionBlock:^{ + [DebugUIStress + sendStressMessage:thread + block:^(SignalRecipient *recipient) { + OWSSignalServiceProtosContentBuilder *contentBuilder = + [OWSSignalServiceProtosContentBuilder new]; + OWSSignalServiceProtosSyncMessageBuilder *syncMessageBuilder = + [OWSSignalServiceProtosSyncMessageBuilder new]; + OWSSignalServiceProtosSyncMessageSentBuilder *sentBuilder = + [OWSSignalServiceProtosSyncMessageSentBuilder new]; + syncMessageBuilder.sent = [sentBuilder build]; + contentBuilder.syncMessage = [syncMessageBuilder build]; + return [[contentBuilder build] data]; + }]; + }]]; + [items addObject:[OWSTableItem itemWithTitle:@"Send whitespace text data message" + actionBlock:^{ + [DebugUIStress + sendStressMessage:thread + block:^(SignalRecipient *recipient) { + OWSSignalServiceProtosContentBuilder *contentBuilder = + [OWSSignalServiceProtosContentBuilder new]; + OWSSignalServiceProtosDataMessageBuilder *dataBuilder = + [OWSSignalServiceProtosDataMessageBuilder new]; + dataBuilder.body = @" "; + [DebugUIStress ensureGroupOfDataBuilder:dataBuilder + thread:thread]; + contentBuilder.dataMessage = [dataBuilder build]; + return [[contentBuilder build] data]; + }]; + }]]; + [items addObject:[OWSTableItem + itemWithTitle:@"Send bad attachment data message" + actionBlock:^{ + [DebugUIStress + sendStressMessage:thread + block:^(SignalRecipient *recipient) { + OWSSignalServiceProtosContentBuilder *contentBuilder = + [OWSSignalServiceProtosContentBuilder new]; + OWSSignalServiceProtosDataMessageBuilder *dataBuilder = + [OWSSignalServiceProtosDataMessageBuilder new]; + OWSSignalServiceProtosAttachmentPointerBuilder *attachmentPointer = + [OWSSignalServiceProtosAttachmentPointerBuilder new]; + [attachmentPointer setId:arc4random_uniform(32) + 1]; + [attachmentPointer setContentType:@"1"]; + [attachmentPointer setSize:arc4random_uniform(32) + 1]; + [attachmentPointer setDigest:[Cryptography generateRandomBytes:1]]; + [attachmentPointer setFileName:@" "]; + [DebugUIStress ensureGroupOfDataBuilder:dataBuilder thread:thread]; + contentBuilder.dataMessage = [dataBuilder build]; + return [[contentBuilder build] data]; + }]; + }]]; + [items addObject:[OWSTableItem itemWithTitle:@"Send normal text data message" + actionBlock:^{ + [DebugUIStress + sendStressMessage:thread + block:^(SignalRecipient *recipient) { + OWSSignalServiceProtosContentBuilder *contentBuilder = + [OWSSignalServiceProtosContentBuilder new]; + OWSSignalServiceProtosDataMessageBuilder *dataBuilder = + [OWSSignalServiceProtosDataMessageBuilder new]; + dataBuilder.body = @"alice"; + [DebugUIStress ensureGroupOfDataBuilder:dataBuilder + thread:thread]; + contentBuilder.dataMessage = [dataBuilder build]; + return [[contentBuilder build] data]; + }]; + }]]; + [items addObject:[OWSTableItem itemWithTitle:@"Send N text messages with same timestamp" + actionBlock:^{ + uint64_t timestamp = [NSDate ows_millisecondTimeStamp]; + for (int i = 0; i < 3; i++) { + [DebugUIStress + sendStressMessage:thread + timestamp:timestamp + block:^(SignalRecipient *recipient) { + OWSSignalServiceProtosContentBuilder *contentBuilder = + [OWSSignalServiceProtosContentBuilder new]; + OWSSignalServiceProtosDataMessageBuilder *dataBuilder = + [OWSSignalServiceProtosDataMessageBuilder new]; + dataBuilder.body = [NSString stringWithFormat:@"%@ %d", + [NSUUID UUID].UUIDString, + i]; + [DebugUIStress ensureGroupOfDataBuilder:dataBuilder + thread:thread]; + contentBuilder.dataMessage = [dataBuilder build]; + return [[contentBuilder build] data]; + }]; + } + }]]; + [items addObject:[OWSTableItem + itemWithTitle:@"Send text message with current timestamp" + actionBlock:^{ + uint64_t timestamp = [NSDate ows_millisecondTimeStamp]; + [DebugUIStress + sendStressMessage:thread + timestamp:timestamp + block:^(SignalRecipient *recipient) { + OWSSignalServiceProtosContentBuilder *contentBuilder = + [OWSSignalServiceProtosContentBuilder new]; + OWSSignalServiceProtosDataMessageBuilder *dataBuilder = + [OWSSignalServiceProtosDataMessageBuilder new]; + dataBuilder.body = + [[NSUUID UUID].UUIDString stringByAppendingString:@" now"]; + [DebugUIStress ensureGroupOfDataBuilder:dataBuilder thread:thread]; + contentBuilder.dataMessage = [dataBuilder build]; + return [[contentBuilder build] data]; + }]; + }]]; + [items addObject:[OWSTableItem + itemWithTitle:@"Send text message with future timestamp" + actionBlock:^{ + uint64_t timestamp = [NSDate ows_millisecondTimeStamp]; + timestamp += kHourInMs; + [DebugUIStress + sendStressMessage:thread + timestamp:timestamp + block:^(SignalRecipient *recipient) { + OWSSignalServiceProtosContentBuilder *contentBuilder = + [OWSSignalServiceProtosContentBuilder new]; + OWSSignalServiceProtosDataMessageBuilder *dataBuilder = + [OWSSignalServiceProtosDataMessageBuilder new]; + dataBuilder.body = + [[NSUUID UUID].UUIDString stringByAppendingString:@" now"]; + [DebugUIStress ensureGroupOfDataBuilder:dataBuilder thread:thread]; + contentBuilder.dataMessage = [dataBuilder build]; + return [[contentBuilder build] data]; + }]; + }]]; + [items addObject:[OWSTableItem + itemWithTitle:@"Send text message with past timestamp" + actionBlock:^{ + uint64_t timestamp = [NSDate ows_millisecondTimeStamp]; + timestamp -= kHourInMs; + [DebugUIStress + sendStressMessage:thread + timestamp:timestamp + block:^(SignalRecipient *recipient) { + OWSSignalServiceProtosContentBuilder *contentBuilder = + [OWSSignalServiceProtosContentBuilder new]; + OWSSignalServiceProtosDataMessageBuilder *dataBuilder = + [OWSSignalServiceProtosDataMessageBuilder new]; + dataBuilder.body = + [[NSUUID UUID].UUIDString stringByAppendingString:@" now"]; + [DebugUIStress ensureGroupOfDataBuilder:dataBuilder thread:thread]; + contentBuilder.dataMessage = [dataBuilder build]; + return [[contentBuilder build] data]; + }]; + }]]; + [items addObject:[OWSTableItem itemWithTitle:@"Send N text messages with same timestamp" + actionBlock:^{ + OWSSignalServiceProtosContentBuilder *contentBuilder = + [OWSSignalServiceProtosContentBuilder new]; + OWSSignalServiceProtosDataMessageBuilder *dataBuilder = + [OWSSignalServiceProtosDataMessageBuilder new]; + dataBuilder.body = @"alice"; + contentBuilder.dataMessage = [dataBuilder build]; + [DebugUIStress ensureGroupOfDataBuilder:dataBuilder thread:thread]; + NSData *data = [[contentBuilder build] data]; + + uint64_t timestamp = [NSDate ows_millisecondTimeStamp]; + + for (int i = 0; i < 3; i++) { + [DebugUIStress sendStressMessage:thread + timestamp:timestamp + block:^(SignalRecipient *recipient) { + return data; + }]; + } + }]]; + [items + addObject:[OWSTableItem itemWithTitle:@"Send malformed sync sent message 1" + actionBlock:^{ + [DebugUIStress + sendStressMessage:thread + block:^(SignalRecipient *recipient) { + OWSSignalServiceProtosContentBuilder *contentBuilder = + [OWSSignalServiceProtosContentBuilder new]; + OWSSignalServiceProtosSyncMessageBuilder *syncMessageBuilder = + [OWSSignalServiceProtosSyncMessageBuilder new]; + OWSSignalServiceProtosSyncMessageSentBuilder *sentBuilder = + [OWSSignalServiceProtosSyncMessageSentBuilder new]; + sentBuilder.destination = @"abc"; + sentBuilder.timestamp = arc4random_uniform(32) + 1; + OWSSignalServiceProtosDataMessageBuilder *dataBuilder = + [OWSSignalServiceProtosDataMessageBuilder new]; + sentBuilder.message = [dataBuilder build]; + syncMessageBuilder.sent = [sentBuilder build]; + contentBuilder.syncMessage = [syncMessageBuilder build]; + return [[contentBuilder build] data]; + }]; + }]]; + [items + addObject:[OWSTableItem itemWithTitle:@"Send malformed sync sent message 2" + actionBlock:^{ + [DebugUIStress + sendStressMessage:thread + block:^(SignalRecipient *recipient) { + OWSSignalServiceProtosContentBuilder *contentBuilder = + [OWSSignalServiceProtosContentBuilder new]; + OWSSignalServiceProtosSyncMessageBuilder *syncMessageBuilder = + [OWSSignalServiceProtosSyncMessageBuilder new]; + OWSSignalServiceProtosSyncMessageSentBuilder *sentBuilder = + [OWSSignalServiceProtosSyncMessageSentBuilder new]; + sentBuilder.destination = @"abc"; + sentBuilder.timestamp = 0; + OWSSignalServiceProtosDataMessageBuilder *dataBuilder = + [OWSSignalServiceProtosDataMessageBuilder new]; + sentBuilder.message = [dataBuilder build]; + syncMessageBuilder.sent = [sentBuilder build]; + contentBuilder.syncMessage = [syncMessageBuilder build]; + return [[contentBuilder build] data]; + }]; + }]]; + [items + addObject:[OWSTableItem itemWithTitle:@"Send malformed sync sent message 3" + actionBlock:^{ + [DebugUIStress + sendStressMessage:thread + block:^(SignalRecipient *recipient) { + OWSSignalServiceProtosContentBuilder *contentBuilder = + [OWSSignalServiceProtosContentBuilder new]; + OWSSignalServiceProtosSyncMessageBuilder *syncMessageBuilder = + [OWSSignalServiceProtosSyncMessageBuilder new]; + OWSSignalServiceProtosSyncMessageSentBuilder *sentBuilder = + [OWSSignalServiceProtosSyncMessageSentBuilder new]; + sentBuilder.destination = @"abc"; + sentBuilder.timestamp = 0; + OWSSignalServiceProtosDataMessageBuilder *dataBuilder = + [OWSSignalServiceProtosDataMessageBuilder new]; + dataBuilder.body = @" "; + sentBuilder.message = [dataBuilder build]; + syncMessageBuilder.sent = [sentBuilder build]; + contentBuilder.syncMessage = [syncMessageBuilder build]; + return [[contentBuilder build] data]; + }]; + }]]; + [items + addObject:[OWSTableItem itemWithTitle:@"Send malformed sync sent message 4" + actionBlock:^{ + [DebugUIStress + sendStressMessage:thread + block:^(SignalRecipient *recipient) { + OWSSignalServiceProtosContentBuilder *contentBuilder = + [OWSSignalServiceProtosContentBuilder new]; + OWSSignalServiceProtosSyncMessageBuilder *syncMessageBuilder = + [OWSSignalServiceProtosSyncMessageBuilder new]; + OWSSignalServiceProtosSyncMessageSentBuilder *sentBuilder = + [OWSSignalServiceProtosSyncMessageSentBuilder new]; + sentBuilder.destination = @"abc"; + sentBuilder.timestamp = 0; + OWSSignalServiceProtosDataMessageBuilder *dataBuilder = + [OWSSignalServiceProtosDataMessageBuilder new]; + dataBuilder.body = @" "; + OWSSignalServiceProtosGroupContextBuilder *groupBuilder = + [OWSSignalServiceProtosGroupContextBuilder new]; + [groupBuilder setId:[Cryptography generateRandomBytes:1]]; + dataBuilder.group = [groupBuilder build]; + sentBuilder.message = [dataBuilder build]; + syncMessageBuilder.sent = [sentBuilder build]; + contentBuilder.syncMessage = [syncMessageBuilder build]; + return [[contentBuilder build] data]; + }]; + }]]; + [items + addObject:[OWSTableItem itemWithTitle:@"Send malformed sync sent message 5" + actionBlock:^{ + [DebugUIStress + sendStressMessage:thread + block:^(SignalRecipient *recipient) { + OWSSignalServiceProtosContentBuilder *contentBuilder = + [OWSSignalServiceProtosContentBuilder new]; + OWSSignalServiceProtosSyncMessageBuilder *syncMessageBuilder = + [OWSSignalServiceProtosSyncMessageBuilder new]; + OWSSignalServiceProtosSyncMessageSentBuilder *sentBuilder = + [OWSSignalServiceProtosSyncMessageSentBuilder new]; + sentBuilder.destination = @"abc"; + sentBuilder.timestamp = 0; + OWSSignalServiceProtosDataMessageBuilder *dataBuilder = + [OWSSignalServiceProtosDataMessageBuilder new]; + dataBuilder.body = @" "; + OWSSignalServiceProtosGroupContextBuilder *groupBuilder = + [OWSSignalServiceProtosGroupContextBuilder new]; + [groupBuilder setId:[Cryptography generateRandomBytes:1]]; + dataBuilder.group = [groupBuilder build]; + sentBuilder.message = [dataBuilder build]; + syncMessageBuilder.sent = [sentBuilder build]; + contentBuilder.syncMessage = [syncMessageBuilder build]; + return [[contentBuilder build] data]; + }]; + }]]; + [items + addObject:[OWSTableItem itemWithTitle:@"Send empty sync sent message 6" + actionBlock:^{ + [DebugUIStress + sendStressMessage:thread + block:^(SignalRecipient *recipient) { + OWSSignalServiceProtosContentBuilder *contentBuilder = + [OWSSignalServiceProtosContentBuilder new]; + OWSSignalServiceProtosSyncMessageBuilder *syncMessageBuilder = + [OWSSignalServiceProtosSyncMessageBuilder new]; + OWSSignalServiceProtosSyncMessageSentBuilder *sentBuilder = + [OWSSignalServiceProtosSyncMessageSentBuilder new]; + sentBuilder.destination = @"abc"; + syncMessageBuilder.sent = [sentBuilder build]; + contentBuilder.syncMessage = [syncMessageBuilder build]; + return [[contentBuilder build] data]; + }]; + }]]; + + if ([thread isKindOfClass:[TSGroupThread class]]) { + TSGroupThread *groupThread = (TSGroupThread *)thread; + [items addObject:[OWSTableItem itemWithTitle:@"Hallucinate twin group" + actionBlock:^{ + [DebugUIStress hallucinateTwinGroup:groupThread]; + }]]; + } + return [OWSTableSection sectionWithTitle:self.name items:items]; +} + ++ (void)ensureGroupOfDataBuilder:(OWSSignalServiceProtosDataMessageBuilder *)dataBuilder thread:(TSThread *)thread +{ + OWSAssert(dataBuilder); + OWSAssert(thread); + + if (![thread isKindOfClass:[TSGroupThread class]]) { + return; + } + + TSGroupThread *groupThread = (TSGroupThread *)thread; + OWSSignalServiceProtosGroupContextBuilder *groupBuilder = [OWSSignalServiceProtosGroupContextBuilder new]; + [groupBuilder setType:OWSSignalServiceProtosGroupContextTypeDeliver]; + [groupBuilder setId:groupThread.groupModel.groupId]; + [dataBuilder setGroup:groupBuilder.build]; +} + ++ (void)sendStressMessage:(TSOutgoingMessage *)message +{ + OWSAssert(message); + + OWSMessageSender *messageSender = [Environment getCurrent].messageSender; + [messageSender sendMessage:message + success:^{ + DDLogInfo(@"%@ Successfully sent message.", self.tag); + } + failure:^(NSError *error) { + DDLogWarn(@"%@ Failed to deliver message with error: %@", self.tag, error); + }]; +} + ++ (void)sendStressMessage:(TSThread *)thread + block:(DynamicOutgoingMessageBlock)block +{ + OWSAssert(thread); + OWSAssert(block); + + OWSDynamicOutgoingMessage *message = + [[OWSDynamicOutgoingMessage alloc] initWithPlainTextDataBlock:block thread:thread]; + + [self sendStressMessage:message]; +} + ++ (void)sendStressMessage:(TSThread *)thread timestamp:(uint64_t)timestamp block:(DynamicOutgoingMessageBlock)block +{ + OWSAssert(thread); + OWSAssert(block); + + OWSDynamicOutgoingMessage *message = + [[OWSDynamicOutgoingMessage alloc] initWithPlainTextDataBlock:block timestamp:timestamp thread:thread]; + + [self sendStressMessage:message]; +} + +// Creates a new group (by cloning the current group) without informing the, +// other members. This can be used to test "group info requests", etc. ++ (void)hallucinateTwinGroup:(TSGroupThread *)groupThread +{ + __block TSGroupThread *thread; + [[TSStorageManager sharedManager].dbReadWriteConnection + readWriteWithBlock:^(YapDatabaseReadWriteTransaction *_Nonnull transaction) { + TSGroupModel *groupModel = + [[TSGroupModel alloc] initWithTitle:[groupThread.groupModel.groupName stringByAppendingString:@" Copy"] + memberIds:[groupThread.groupModel.groupMemberIds mutableCopy] + image:groupThread.groupModel.groupImage + groupId:[SecurityUtils generateRandomBytes:16]]; + thread = [TSGroupThread getOrCreateThreadWithGroupModel:groupModel transaction:transaction]; + }]; + OWSAssert(thread); + + [Environment presentConversationForThread:thread]; +} + +@end + +NS_ASSUME_NONNULL_END diff --git a/Signal/src/ViewControllers/DebugUI/DebugUITableViewController.m b/Signal/src/ViewControllers/DebugUI/DebugUITableViewController.m index f1b9e6dad..e5e8b27e5 100644 --- a/Signal/src/ViewControllers/DebugUI/DebugUITableViewController.m +++ b/Signal/src/ViewControllers/DebugUI/DebugUITableViewController.m @@ -8,6 +8,7 @@ #import "DebugUIMessages.h" #import "DebugUIMisc.h" #import "DebugUISessionState.h" +#import "DebugUIStress.h" #import "Signal-Swift.h" #import #import @@ -96,6 +97,8 @@ NS_ASSUME_NONNULL_BEGIN addObject:[self itemForSubsection:[DebugUICalling new] viewController:viewController thread:thread]]; } [subsectionItems addObject:[self itemForSubsection:[DebugUIProfile new] viewController:viewController thread:thread]]; + [subsectionItems + addObject:[self itemForSubsection:[DebugUIStress new] viewController:viewController thread:thread]]; [subsectionItems addObject:[self itemForSubsection:[DebugUIMisc new] viewController:viewController thread:thread]]; [contents addSection:[OWSTableSection sectionWithTitle:@"Sections" items:subsectionItems]]; diff --git a/Signal/src/ViewControllers/FingerprintViewController.m b/Signal/src/ViewControllers/FingerprintViewController.m index 0a0516766..7a4a36c92 100644 --- a/Signal/src/ViewControllers/FingerprintViewController.m +++ b/Signal/src/ViewControllers/FingerprintViewController.m @@ -12,7 +12,7 @@ #import "UIFont+OWS.h" #import "UIUtil.h" #import "UIView+OWS.h" -#import +#import #import #import #import diff --git a/Signal/src/ViewControllers/HomeViewController.m b/Signal/src/ViewControllers/HomeViewController.m index a79e7351e..1387712b7 100644 --- a/Signal/src/ViewControllers/HomeViewController.m +++ b/Signal/src/ViewControllers/HomeViewController.m @@ -7,7 +7,6 @@ #import "AppSettingsViewController.h" #import "ConversationViewController.h" #import "InboxTableViewCell.h" -#import "NSDate+millisecondTimeStamp.h" #import "NewContactThreadViewController.h" #import "OWSContactsManager.h" #import "OWSNavigationController.h" @@ -23,6 +22,7 @@ #import "VersionMigrations.h" #import "ViewControllerUtils.h" #import +#import #import #import #import diff --git a/Signal/src/ViewControllers/NewGroupViewController.m b/Signal/src/ViewControllers/NewGroupViewController.m index 9374740e8..c0deb64ca 100644 --- a/Signal/src/ViewControllers/NewGroupViewController.m +++ b/Signal/src/ViewControllers/NewGroupViewController.m @@ -18,7 +18,7 @@ #import "UIUtil.h" #import "UIView+OWS.h" #import "UIViewController+OWS.h" -#import +#import #import #import #import diff --git a/Signal/src/ViewControllers/OWSConversationSettingsViewController.m b/Signal/src/ViewControllers/OWSConversationSettingsViewController.m index 95b1664ec..758513efe 100644 --- a/Signal/src/ViewControllers/OWSConversationSettingsViewController.m +++ b/Signal/src/ViewControllers/OWSConversationSettingsViewController.m @@ -20,7 +20,7 @@ #import "UIView+OWS.h" #import "UpdateGroupViewController.h" #import <25519/Curve25519.h> -#import +#import #import #import #import diff --git a/Signal/src/ViewControllers/UpdateGroupViewController.m b/Signal/src/ViewControllers/UpdateGroupViewController.m index 384367ebc..834539b68 100644 --- a/Signal/src/ViewControllers/UpdateGroupViewController.m +++ b/Signal/src/ViewControllers/UpdateGroupViewController.m @@ -19,7 +19,7 @@ #import "UIView+OWS.h" #import "UIViewController+OWS.h" #import "ViewControllerUtils.h" -#import +#import #import #import #import diff --git a/Signal/src/network/PushManager.m b/Signal/src/network/PushManager.m index 1fa016f7d..cf0fd0a7c 100644 --- a/Signal/src/network/PushManager.m +++ b/Signal/src/network/PushManager.m @@ -8,7 +8,7 @@ #import "OWSContactsManager.h" #import "Signal-Swift.h" #import "ThreadUtil.h" -#import +#import #import #import #import diff --git a/Signal/src/util/ThreadUtil.m b/Signal/src/util/ThreadUtil.m index fd83c8945..0df0b3ee9 100644 --- a/Signal/src/util/ThreadUtil.m +++ b/Signal/src/util/ThreadUtil.m @@ -8,7 +8,7 @@ #import "OWSProfileManager.h" #import "Signal-Swift.h" #import "TSUnreadIndicatorInteraction.h" -#import +#import #import #import #import diff --git a/SignalServiceKit/src/Devices/OWSDevice.m b/SignalServiceKit/src/Devices/OWSDevice.m index 3d329614a..b1a5cc6b3 100644 --- a/SignalServiceKit/src/Devices/OWSDevice.m +++ b/SignalServiceKit/src/Devices/OWSDevice.m @@ -3,7 +3,7 @@ // #import "OWSDevice.h" -#import "NSDate+millisecondTimeStamp.h" +#import "NSDate+OWS.h" #import "OWSError.h" #import "YapDatabaseConnection.h" #import "YapDatabaseTransaction.h" diff --git a/SignalServiceKit/src/Messages/DeviceSyncing/OWSSyncContactsMessage.m b/SignalServiceKit/src/Messages/DeviceSyncing/OWSSyncContactsMessage.m index 0dd4172b8..78f6db821 100644 --- a/SignalServiceKit/src/Messages/DeviceSyncing/OWSSyncContactsMessage.m +++ b/SignalServiceKit/src/Messages/DeviceSyncing/OWSSyncContactsMessage.m @@ -5,14 +5,14 @@ #import "OWSSyncContactsMessage.h" #import "Contact.h" #import "ContactsManagerProtocol.h" -#import "NSDate+millisecondTimeStamp.h" +#import "NSDate+OWS.h" #import "OWSContactsOutputStream.h" -#import "OWSSignalServiceProtos.pb.h" #import "OWSIdentityManager.h" +#import "OWSSignalServiceProtos.pb.h" +#import "ProfileManagerProtocol.h" #import "SignalAccount.h" #import "TSAttachment.h" #import "TSAttachmentStream.h" -#import "ProfileManagerProtocol.h" NS_ASSUME_NONNULL_BEGIN diff --git a/SignalServiceKit/src/Messages/DeviceSyncing/OWSSyncGroupsMessage.m b/SignalServiceKit/src/Messages/DeviceSyncing/OWSSyncGroupsMessage.m index 24faf9ca1..575f3d9eb 100644 --- a/SignalServiceKit/src/Messages/DeviceSyncing/OWSSyncGroupsMessage.m +++ b/SignalServiceKit/src/Messages/DeviceSyncing/OWSSyncGroupsMessage.m @@ -3,7 +3,7 @@ // #import "OWSSyncGroupsMessage.h" -#import "NSDate+millisecondTimeStamp.h" +#import "NSDate+OWS.h" #import "OWSGroupsOutputStream.h" #import "OWSSignalServiceProtos.pb.h" #import "TSAttachment.h" diff --git a/SignalServiceKit/src/Messages/DeviceSyncing/OWSSyncGroupsRequestMessage.m b/SignalServiceKit/src/Messages/DeviceSyncing/OWSSyncGroupsRequestMessage.m index ba6462b77..5766a784f 100644 --- a/SignalServiceKit/src/Messages/DeviceSyncing/OWSSyncGroupsRequestMessage.m +++ b/SignalServiceKit/src/Messages/DeviceSyncing/OWSSyncGroupsRequestMessage.m @@ -3,7 +3,7 @@ // #import "OWSSyncGroupsRequestMessage.h" -#import "NSDate+millisecondTimeStamp.h" +#import "NSDate+OWS.h" #import "OWSSignalServiceProtos.pb.h" NS_ASSUME_NONNULL_BEGIN diff --git a/SignalServiceKit/src/Messages/Interactions/OWSDisappearingMessagesConfigurationMessage.m b/SignalServiceKit/src/Messages/Interactions/OWSDisappearingMessagesConfigurationMessage.m index ffe7fbfe0..d537488d8 100644 --- a/SignalServiceKit/src/Messages/Interactions/OWSDisappearingMessagesConfigurationMessage.m +++ b/SignalServiceKit/src/Messages/Interactions/OWSDisappearingMessagesConfigurationMessage.m @@ -1,8 +1,9 @@ -// Created by Michael Kirk on 9/25/16. -// Copyright © 2016 Open Whisper Systems. All rights reserved. +// +// Copyright (c) 2017 Open Whisper Systems. All rights reserved. +// #import "OWSDisappearingMessagesConfigurationMessage.h" -#import "NSDate+millisecondTimeStamp.h" +#import "NSDate+OWS.h" #import "OWSDisappearingMessagesConfiguration.h" #import "OWSSignalServiceProtos.pb.h" diff --git a/SignalServiceKit/src/Messages/Interactions/OWSDynamicOutgoingMessage.h b/SignalServiceKit/src/Messages/Interactions/OWSDynamicOutgoingMessage.h new file mode 100644 index 000000000..eba50aa55 --- /dev/null +++ b/SignalServiceKit/src/Messages/Interactions/OWSDynamicOutgoingMessage.h @@ -0,0 +1,23 @@ +// +// Copyright (c) 2017 Open Whisper Systems. All rights reserved. +// + +#import "TSOutgoingMessage.h" + +NS_ASSUME_NONNULL_BEGIN + +@class OWSSignalServiceProtosDataMessageBuilder; +@class SignalRecipient; + +typedef NSData *_Nonnull (^DynamicOutgoingMessageBlock)(SignalRecipient *); + +@interface OWSDynamicOutgoingMessage : TSOutgoingMessage + +- (instancetype)initWithPlainTextDataBlock:(DynamicOutgoingMessageBlock)block thread:(nullable TSThread *)thread; +- (instancetype)initWithPlainTextDataBlock:(DynamicOutgoingMessageBlock)block + timestamp:(uint64_t)timestamp + thread:(nullable TSThread *)thread; + +@end + +NS_ASSUME_NONNULL_END diff --git a/SignalServiceKit/src/Messages/Interactions/OWSDynamicOutgoingMessage.m b/SignalServiceKit/src/Messages/Interactions/OWSDynamicOutgoingMessage.m new file mode 100644 index 000000000..f6346d0b9 --- /dev/null +++ b/SignalServiceKit/src/Messages/Interactions/OWSDynamicOutgoingMessage.m @@ -0,0 +1,55 @@ +// +// Copyright (c) 2017 Open Whisper Systems. All rights reserved. +// + +#import "OWSDynamicOutgoingMessage.h" +#import "NSDate+OWS.h" +#import "OWSSignalServiceProtos.pb.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface OWSDynamicOutgoingMessage () + +@property (nonatomic, readonly) DynamicOutgoingMessageBlock block; + +@end + +#pragma mark - + +@implementation OWSDynamicOutgoingMessage + +- (instancetype)initWithPlainTextDataBlock:(DynamicOutgoingMessageBlock)block thread:(nullable TSThread *)thread +{ + return [self initWithPlainTextDataBlock:block timestamp:[NSDate ows_millisecondTimeStamp] thread:thread]; +} + +- (instancetype)initWithPlainTextDataBlock:(DynamicOutgoingMessageBlock)block + timestamp:(uint64_t)timestamp + thread:(nullable TSThread *)thread +{ + self = [super initWithTimestamp:timestamp inThread:thread]; + + if (self) { + _block = block; + } + + return self; +} + +- (void)saveWithTransaction:(YapDatabaseReadWriteTransaction *)transaction +{ + // override superclass with no-op. + // + // There's no need to save this message, since it's not displayed to the user. +} + +- (NSData *)buildPlainTextData:(SignalRecipient *)recipient +{ + NSData *plainTextData = self.block(recipient); + OWSAssert(plainTextData); + return plainTextData; +} + +@end + +NS_ASSUME_NONNULL_END diff --git a/SignalServiceKit/src/Messages/Interactions/TSErrorMessage.m b/SignalServiceKit/src/Messages/Interactions/TSErrorMessage.m index 6b84dda1f..2e8fac670 100644 --- a/SignalServiceKit/src/Messages/Interactions/TSErrorMessage.m +++ b/SignalServiceKit/src/Messages/Interactions/TSErrorMessage.m @@ -4,7 +4,7 @@ #import "TSErrorMessage.h" #import "ContactsManagerProtocol.h" -#import "NSDate+millisecondTimeStamp.h" +#import "NSDate+OWS.h" #import "OWSMessageManager.h" #import "TSContactThread.h" #import "TSErrorMessage_privateConstructor.h" diff --git a/SignalServiceKit/src/Messages/Interactions/TSInfoMessage.m b/SignalServiceKit/src/Messages/Interactions/TSInfoMessage.m index 48d43b625..b479f1020 100644 --- a/SignalServiceKit/src/Messages/Interactions/TSInfoMessage.m +++ b/SignalServiceKit/src/Messages/Interactions/TSInfoMessage.m @@ -3,7 +3,7 @@ // #import "TSInfoMessage.h" -#import "NSDate+millisecondTimeStamp.h" +#import "NSDate+OWS.h" #import NS_ASSUME_NONNULL_BEGIN diff --git a/SignalServiceKit/src/Messages/Interactions/TSInteraction.m b/SignalServiceKit/src/Messages/Interactions/TSInteraction.m index 6084622da..032f61aaa 100644 --- a/SignalServiceKit/src/Messages/Interactions/TSInteraction.m +++ b/SignalServiceKit/src/Messages/Interactions/TSInteraction.m @@ -3,7 +3,7 @@ // #import "TSInteraction.h" -#import "NSDate+millisecondTimeStamp.h" +#import "NSDate+OWS.h" #import "TSDatabaseSecondaryIndexes.h" #import "TSStorageManager+messageIDs.h" #import "TSThread.h" diff --git a/SignalServiceKit/src/Messages/Interactions/TSMessage.m b/SignalServiceKit/src/Messages/Interactions/TSMessage.m index 10433e6b1..4482ed42b 100644 --- a/SignalServiceKit/src/Messages/Interactions/TSMessage.m +++ b/SignalServiceKit/src/Messages/Interactions/TSMessage.m @@ -3,7 +3,7 @@ // #import "TSMessage.h" -#import "NSDate+millisecondTimeStamp.h" +#import "NSDate+OWS.h" #import "TSAttachment.h" #import "TSAttachmentPointer.h" #import "TSThread.h" diff --git a/SignalServiceKit/src/Messages/Interactions/TSOutgoingMessage.m b/SignalServiceKit/src/Messages/Interactions/TSOutgoingMessage.m index 86b540b8c..e1d4022b4 100644 --- a/SignalServiceKit/src/Messages/Interactions/TSOutgoingMessage.m +++ b/SignalServiceKit/src/Messages/Interactions/TSOutgoingMessage.m @@ -3,7 +3,7 @@ // #import "TSOutgoingMessage.h" -#import "NSDate+millisecondTimeStamp.h" +#import "NSDate+OWS.h" #import "OWSOutgoingSyncMessage.h" #import "OWSSignalServiceProtos.pb.h" #import "ProfileManagerProtocol.h" diff --git a/SignalServiceKit/src/Messages/OWSDisappearingMessagesFinder.m b/SignalServiceKit/src/Messages/OWSDisappearingMessagesFinder.m index 2c65b097f..67ae4c111 100644 --- a/SignalServiceKit/src/Messages/OWSDisappearingMessagesFinder.m +++ b/SignalServiceKit/src/Messages/OWSDisappearingMessagesFinder.m @@ -3,7 +3,7 @@ // #import "OWSDisappearingMessagesFinder.h" -#import "NSDate+millisecondTimeStamp.h" +#import "NSDate+OWS.h" #import "TSMessage.h" #import "TSOutgoingMessage.h" #import "TSStorageManager.h" diff --git a/SignalServiceKit/src/Messages/OWSDisappearingMessagesJob.m b/SignalServiceKit/src/Messages/OWSDisappearingMessagesJob.m index a3cb33ccf..2f8c1d1b9 100644 --- a/SignalServiceKit/src/Messages/OWSDisappearingMessagesJob.m +++ b/SignalServiceKit/src/Messages/OWSDisappearingMessagesJob.m @@ -5,7 +5,6 @@ #import "OWSDisappearingMessagesJob.h" #import "ContactsManagerProtocol.h" #import "NSDate+OWS.h" -#import "NSDate+millisecondTimeStamp.h" #import "NSTimer+OWS.h" #import "OWSDisappearingConfigurationUpdateInfoMessage.h" #import "OWSDisappearingMessagesConfiguration.h" diff --git a/SignalServiceKit/src/Messages/OWSIdentityManager.m b/SignalServiceKit/src/Messages/OWSIdentityManager.m index dc0844e33..d6961d43a 100644 --- a/SignalServiceKit/src/Messages/OWSIdentityManager.m +++ b/SignalServiceKit/src/Messages/OWSIdentityManager.m @@ -3,7 +3,7 @@ // #import "OWSIdentityManager.h" -#import "NSDate+millisecondTimeStamp.h" +#import "NSDate+OWS.h" #import "NSNotificationCenter+OWS.h" #import "NotificationsProtocol.h" #import "OWSError.h" diff --git a/SignalServiceKit/src/Messages/OWSMessageManager.m b/SignalServiceKit/src/Messages/OWSMessageManager.m index bd8a47249..9cba78d03 100644 --- a/SignalServiceKit/src/Messages/OWSMessageManager.m +++ b/SignalServiceKit/src/Messages/OWSMessageManager.m @@ -6,7 +6,7 @@ #import "ContactsManagerProtocol.h" #import "Cryptography.h" #import "MimeTypeUtil.h" -#import "NSDate+millisecondTimeStamp.h" +#import "NSDate+OWS.h" #import "NotificationsProtocol.h" #import "OWSAttachmentsProcessor.h" #import "OWSBlockingManager.h" diff --git a/SignalServiceKit/src/Messages/OWSOutgoingCallMessage.m b/SignalServiceKit/src/Messages/OWSOutgoingCallMessage.m index 153558dca..f91a7d797 100644 --- a/SignalServiceKit/src/Messages/OWSOutgoingCallMessage.m +++ b/SignalServiceKit/src/Messages/OWSOutgoingCallMessage.m @@ -3,7 +3,7 @@ // #import "OWSOutgoingCallMessage.h" -#import "NSDate+millisecondTimeStamp.h" +#import "NSDate+OWS.h" #import "OWSCallAnswerMessage.h" #import "OWSCallBusyMessage.h" #import "OWSCallHangupMessage.h" diff --git a/SignalServiceKit/src/Messages/OWSOutgoingNullMessage.m b/SignalServiceKit/src/Messages/OWSOutgoingNullMessage.m index 45f8044ac..f80bf7060 100644 --- a/SignalServiceKit/src/Messages/OWSOutgoingNullMessage.m +++ b/SignalServiceKit/src/Messages/OWSOutgoingNullMessage.m @@ -4,10 +4,10 @@ #import "OWSOutgoingNullMessage.h" #import "Cryptography.h" -#import "NSDate+millisecondTimeStamp.h" -#import "TSContactThread.h" +#import "NSDate+OWS.h" #import "OWSSignalServiceProtos.pb.h" #import "OWSVerificationStateSyncMessage.h" +#import "TSContactThread.h" NS_ASSUME_NONNULL_BEGIN diff --git a/SignalServiceKit/src/Util/NSDate+OWS.h b/SignalServiceKit/src/Util/NSDate+OWS.h index cba1a0ded..104c20892 100755 --- a/SignalServiceKit/src/Util/NSDate+OWS.h +++ b/SignalServiceKit/src/Util/NSDate+OWS.h @@ -11,4 +11,19 @@ NS_ASSUME_NONNULL_BEGIN #define kWeekInterval (7 * kDayInterval) #define kMonthInterval (30 * kDayInterval) +#define kSecondInMs 1000 +#define kMinuteInMs (kSecondInMs * 60) +#define kHourInMs (kMinuteInMs * 60) +#define kDayInMs (kHourInMs * 24) +#define kWeekInMs (kDayInMs * 7) +#define kMonthInMs (kDayInMs * 30) + +@interface NSDate (millisecondTimeStamp) + ++ (uint64_t)ows_millisecondTimeStamp; ++ (NSDate *)ows_dateWithMillisecondsSince1970:(uint64_t)milliseconds; ++ (uint64_t)ows_millisecondsSince1970ForDate:(NSDate *)date; + +@end + NS_ASSUME_NONNULL_END diff --git a/SignalServiceKit/src/Util/NSDate+millisecondTimeStamp.mm b/SignalServiceKit/src/Util/NSDate+OWS.mm similarity index 53% rename from SignalServiceKit/src/Util/NSDate+millisecondTimeStamp.mm rename to SignalServiceKit/src/Util/NSDate+OWS.mm index 6814990ec..986a21bac 100644 --- a/SignalServiceKit/src/Util/NSDate+millisecondTimeStamp.mm +++ b/SignalServiceKit/src/Util/NSDate+OWS.mm @@ -1,14 +1,16 @@ -// Created by Frederic Jacobs on 25/11/14. -// Copyright (c) 2014 Open Whisper Systems. All rights reserved. +// +// Copyright (c) 2017 Open Whisper Systems. All rights reserved. +// +#import "NSDate+OWS.h" #import -#import "NSDate+millisecondTimeStamp.h" @implementation NSDate (millisecondTimeStamp) -+ (uint64_t)ows_millisecondTimeStamp { - uint64_t milliseconds = - (uint64_t)(std::chrono::system_clock::now().time_since_epoch() / std::chrono::milliseconds(1)); ++ (uint64_t)ows_millisecondTimeStamp +{ + uint64_t milliseconds + = (uint64_t)(std::chrono::system_clock::now().time_since_epoch() / std::chrono::milliseconds(1)); return milliseconds; } diff --git a/SignalServiceKit/src/Util/NSDate+millisecondTimeStamp.h b/SignalServiceKit/src/Util/NSDate+millisecondTimeStamp.h deleted file mode 100644 index 0dac0ced9..000000000 --- a/SignalServiceKit/src/Util/NSDate+millisecondTimeStamp.h +++ /dev/null @@ -1,11 +0,0 @@ -// Created by Frederic Jacobs on 25/11/14. -// Copyright (c) 2014 Open Whisper Systems. All rights reserved. - - -@interface NSDate (millisecondTimeStamp) - -+ (uint64_t)ows_millisecondTimeStamp; -+ (NSDate *)ows_dateWithMillisecondsSince1970:(uint64_t)milliseconds; -+ (uint64_t)ows_millisecondsSince1970ForDate:(NSDate *)date; - -@end