From a7546aee63418d9139ae8926d9cf33bfa253f390 Mon Sep 17 00:00:00 2001 From: Matthew Chen Date: Fri, 15 Sep 2017 15:05:51 -0400 Subject: [PATCH] Modify read receipt photos to support sending read receipts to both linked devices and senders. // FREEBIE --- .../protobuf/OWSSignalServiceProtos.proto | 5 +- .../src/Messages/OWSSignalServiceProtos.pb.h | 10 ++++ .../src/Messages/OWSSignalServiceProtos.pb.m | 49 +++++++++++++++++++ 3 files changed, 62 insertions(+), 2 deletions(-) diff --git a/SignalServiceKit/protobuf/OWSSignalServiceProtos.proto b/SignalServiceKit/protobuf/OWSSignalServiceProtos.proto index 13112b352..4bea8b583 100644 --- a/SignalServiceKit/protobuf/OWSSignalServiceProtos.proto +++ b/SignalServiceKit/protobuf/OWSSignalServiceProtos.proto @@ -44,8 +44,9 @@ message ReceiptMessage { READ = 1; } - optional Type type = 1; - repeated uint64 timestamp = 2; + optional Type type = 1; + repeated uint64 timestamp = 2; + optional bytes profileKey = 3; } message CallMessage { diff --git a/SignalServiceKit/src/Messages/OWSSignalServiceProtos.pb.h b/SignalServiceKit/src/Messages/OWSSignalServiceProtos.pb.h index f72a555e5..a46ffd7f3 100644 --- a/SignalServiceKit/src/Messages/OWSSignalServiceProtos.pb.h +++ b/SignalServiceKit/src/Messages/OWSSignalServiceProtos.pb.h @@ -384,15 +384,20 @@ NSString *NSStringFromOWSSignalServiceProtosGroupContextType(OWSSignalServicePro #define ReceiptMessage_type @"type" #define ReceiptMessage_timestamp @"timestamp" +#define ReceiptMessage_profileKey @"profileKey" @interface OWSSignalServiceProtosReceiptMessage : PBGeneratedMessage { @private + BOOL hasProfileKey_:1; BOOL hasType_:1; + NSData* profileKey; OWSSignalServiceProtosReceiptMessageType type; PBAppendableArray * timestampArray; } - (BOOL) hasType; +- (BOOL) hasProfileKey; @property (readonly) OWSSignalServiceProtosReceiptMessageType type; @property (readonly, strong) PBArray * timestamp; +@property (readonly, strong) NSData* profileKey; - (UInt64)timestampAtIndex:(NSUInteger)index; + (instancetype) defaultInstance; @@ -441,6 +446,11 @@ NSString *NSStringFromOWSSignalServiceProtosGroupContextType(OWSSignalServicePro - (OWSSignalServiceProtosReceiptMessageBuilder *)setTimestampArray:(NSArray *)array; - (OWSSignalServiceProtosReceiptMessageBuilder *)setTimestampValues:(const UInt64 *)values count:(NSUInteger)count; - (OWSSignalServiceProtosReceiptMessageBuilder *)clearTimestamp; + +- (BOOL) hasProfileKey; +- (NSData*) profileKey; +- (OWSSignalServiceProtosReceiptMessageBuilder*) setProfileKey:(NSData*) value; +- (OWSSignalServiceProtosReceiptMessageBuilder*) clearProfileKey; @end #define CallMessage_offer @"offer" diff --git a/SignalServiceKit/src/Messages/OWSSignalServiceProtos.pb.m b/SignalServiceKit/src/Messages/OWSSignalServiceProtos.pb.m index b176a1ffc..2ef1cc1c5 100644 --- a/SignalServiceKit/src/Messages/OWSSignalServiceProtos.pb.m +++ b/SignalServiceKit/src/Messages/OWSSignalServiceProtos.pb.m @@ -1080,6 +1080,7 @@ static OWSSignalServiceProtosContent* defaultOWSSignalServiceProtosContentInstan @interface OWSSignalServiceProtosReceiptMessage () @property OWSSignalServiceProtosReceiptMessageType type; @property (strong) PBAppendableArray * timestampArray; +@property (strong) NSData* profileKey; @end @implementation OWSSignalServiceProtosReceiptMessage @@ -1093,9 +1094,17 @@ static OWSSignalServiceProtosContent* defaultOWSSignalServiceProtosContentInstan @synthesize type; @synthesize timestampArray; @dynamic timestamp; +- (BOOL) hasProfileKey { + return !!hasProfileKey_; +} +- (void) setHasProfileKey:(BOOL) _value_ { + hasProfileKey_ = !!_value_; +} +@synthesize profileKey; - (instancetype) init { if ((self = [super init])) { self.type = OWSSignalServiceProtosReceiptMessageTypeDelivery; + self.profileKey = [NSData data]; } return self; } @@ -1131,6 +1140,9 @@ static OWSSignalServiceProtosReceiptMessage* defaultOWSSignalServiceProtosReceip [output writeUInt64:2 value:values[i]]; } } + if (self.hasProfileKey) { + [output writeData:3 value:self.profileKey]; + } [self.unknownFields writeToCodedOutputStream:output]; } - (SInt32) serializedSize { @@ -1153,6 +1165,9 @@ static OWSSignalServiceProtosReceiptMessage* defaultOWSSignalServiceProtosReceip size_ += dataSize; size_ += (SInt32)(1 * count); } + if (self.hasProfileKey) { + size_ += computeDataSize(3, self.profileKey); + } size_ += self.unknownFields.serializedSize; memoizedSerializedSize = size_; return size_; @@ -1194,6 +1209,9 @@ static OWSSignalServiceProtosReceiptMessage* defaultOWSSignalServiceProtosReceip [self.timestampArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { [output appendFormat:@"%@%@: %@\n", indent, @"timestamp", obj]; }]; + if (self.hasProfileKey) { + [output appendFormat:@"%@%@: %@\n", indent, @"profileKey", self.profileKey]; + } [self.unknownFields writeDescriptionTo:output withIndent:indent]; } - (void) storeInDictionary:(NSMutableDictionary *)dictionary { @@ -1206,6 +1224,9 @@ static OWSSignalServiceProtosReceiptMessage* defaultOWSSignalServiceProtosReceip [timestampArrayArray addObject: @([self.timestampArray uint64AtIndex:i])]; } [dictionary setObject: timestampArrayArray forKey: @"timestamp"]; + if (self.hasProfileKey) { + [dictionary setObject: self.profileKey forKey: @"profileKey"]; + } [self.unknownFields storeInDictionary:dictionary]; } - (BOOL) isEqual:(id)other { @@ -1220,6 +1241,8 @@ static OWSSignalServiceProtosReceiptMessage* defaultOWSSignalServiceProtosReceip self.hasType == otherMessage.hasType && (!self.hasType || self.type == otherMessage.type) && [self.timestampArray isEqualToArray:otherMessage.timestampArray] && + self.hasProfileKey == otherMessage.hasProfileKey && + (!self.hasProfileKey || [self.profileKey isEqual:otherMessage.profileKey]) && (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields])); } - (NSUInteger) hash { @@ -1230,6 +1253,9 @@ static OWSSignalServiceProtosReceiptMessage* defaultOWSSignalServiceProtosReceip [self.timestampArray enumerateObjectsUsingBlock:^(NSNumber *obj, NSUInteger idx, BOOL *stop) { hashCode = hashCode * 31 + [obj longValue]; }]; + if (self.hasProfileKey) { + hashCode = hashCode * 31 + [self.profileKey hash]; + } hashCode = hashCode * 31 + [self.unknownFields hash]; return hashCode; } @@ -1303,6 +1329,9 @@ NSString *NSStringFromOWSSignalServiceProtosReceiptMessageType(OWSSignalServiceP [resultReceiptMessage.timestampArray appendArray:other.timestampArray]; } } + if (other.hasProfileKey) { + [self setProfileKey:other.profileKey]; + } [self mergeUnknownFields:other.unknownFields]; return self; } @@ -1337,6 +1366,10 @@ NSString *NSStringFromOWSSignalServiceProtosReceiptMessageType(OWSSignalServiceP [self addTimestamp:[input readUInt64]]; break; } + case 26: { + [self setProfileKey:[input readData]]; + break; + } } } } @@ -1381,6 +1414,22 @@ NSString *NSStringFromOWSSignalServiceProtosReceiptMessageType(OWSSignalServiceP resultReceiptMessage.timestampArray = nil; return self; } +- (BOOL) hasProfileKey { + return resultReceiptMessage.hasProfileKey; +} +- (NSData*) profileKey { + return resultReceiptMessage.profileKey; +} +- (OWSSignalServiceProtosReceiptMessageBuilder*) setProfileKey:(NSData*) value { + resultReceiptMessage.hasProfileKey = YES; + resultReceiptMessage.profileKey = value; + return self; +} +- (OWSSignalServiceProtosReceiptMessageBuilder*) clearProfileKey { + resultReceiptMessage.hasProfileKey = NO; + resultReceiptMessage.profileKey = [NSData data]; + return self; +} @end @interface OWSSignalServiceProtosCallMessage ()