Code generate Swift wrappers for protocol buffers.

This commit is contained in:
Matthew Chen 2018-08-01 18:00:58 -04:00
parent ab31e5a07f
commit d3adb80242
16 changed files with 326 additions and 16305 deletions

View File

@ -616,6 +616,7 @@ public func serializedData() throws -> Data {
# Setters # Setters
for field in self.fields(): for field in self.fields():
if field.rules == 'repeated': if field.rules == 'repeated':
# Add
accessor_name = field.name_swift accessor_name = field.name_swift
accessor_name = 'add' + accessor_name[0].upper() + accessor_name[1:] accessor_name = 'add' + accessor_name[0].upper() + accessor_name[1:]
writer.add('@objc public func %s(_ valueParam: %s) {' % ( accessor_name, self.base_swift_type_for_field(field), )) writer.add('@objc public func %s(_ valueParam: %s) {' % ( accessor_name, self.base_swift_type_for_field(field), ))
@ -633,6 +634,37 @@ public func serializedData() throws -> Data {
writer.pop_indent() writer.pop_indent()
writer.add('}') writer.add('}')
writer.newline() writer.newline()
# Set
accessor_name = field.name_swift
accessor_name = 'set' + accessor_name[0].upper() + accessor_name[1:]
writer.add('@objc public func %s(_ wrappedItems: [%s]) {' % ( accessor_name, self.base_swift_type_for_field(field), ))
writer.push_indent()
list_wrapped_swift_name = None
if self.is_field_a_proto(field):
message_context = self.context_for_proto_type(field)
list_wrapped_swift_name = message_context.derive_wrapped_swift_name()
else:
# TODO: Assert not an enum.
list_wrapped_swift_name = self.base_swift_type_for_field(field)
writer.add('var unwrappedItems = [%s]()' % list_wrapped_swift_name)
writer.add('for wrappedItem in wrappedItems {')
writer.push_indent()
if self.is_field_an_enum(field):
enum_context = self.context_for_proto_type(field)
writer.add('unwrappedItems.append(%sUnwrap(wrappedItem))' % enum_context.swift_name )
elif self.is_field_a_proto(field):
writer.add('unwrappedItems.append(wrappedItem.proto)')
else:
writer.add('unwrappedItems.append(wrappedItem)')
writer.pop_indent()
writer.add('}')
writer.add('proto.%s = unwrappedItems' % ( field.name_swift, ) )
writer.pop_indent()
writer.add('}')
writer.newline()
else: else:
accessor_name = field.name_swift accessor_name = field.name_swift
accessor_name = 'set' + accessor_name[0].upper() + accessor_name[1:] accessor_name = 'set' + accessor_name[0].upper() + accessor_name[1:]

View File

@ -32,14 +32,19 @@ NS_ASSUME_NONNULL_BEGIN
return self; return self;
} }
- (SSKProtoSyncMessageBuilder *)syncMessageBuilder - (nullable SSKProtoSyncMessageBuilder *)syncMessageBuilder
{ {
SSKProtoSyncMessageBlockedBuilder *blockedPhoneNumbersBuilder = SSKProtoSyncMessageBlockedBuilder *blockedBuilder = [SSKProtoSyncMessageBlockedBuilder new];
[SSKProtoSyncMessageBlockedBuilder new]; [blockedBuilder setNumbers:_phoneNumbers];
[blockedPhoneNumbersBuilder setNumbersArray:_phoneNumbers]; NSError *error;
SSKProtoSyncMessageBuilder *syncMessageBuilder = [SSKProtoSyncMessageBuilder new]; SSKProtoSyncMessageBlocked *_Nullable blockedProto = [blockedBuilder buildAndReturnError:&error];
[syncMessageBuilder setBlocked:[blockedPhoneNumbersBuilder build]]; if (error || !blockedProto) {
OWSFail(@"%@ could not build protobuf: %@", self.logTag, error);
return nil;
}
SSKProtoSyncMessageBuilder *syncMessageBuilder = [SSKProtoSyncMessageBuilder new];
[syncMessageBuilder setBlocked:blockedProto];
return syncMessageBuilder; return syncMessageBuilder;
} }

View File

@ -43,7 +43,15 @@ disappearingMessagesConfiguration:(nullable OWSDisappearingMessagesConfiguration
verifiedBuilder.destination = recipientIdentity.recipientId; verifiedBuilder.destination = recipientIdentity.recipientId;
verifiedBuilder.identityKey = [recipientIdentity.identityKey prependKeyType]; verifiedBuilder.identityKey = [recipientIdentity.identityKey prependKeyType];
verifiedBuilder.state = OWSVerificationStateToProtoState(recipientIdentity.verificationState); verifiedBuilder.state = OWSVerificationStateToProtoState(recipientIdentity.verificationState);
contactBuilder.verifiedBuilder = verifiedBuilder;
NSError *error;
SSKProtoVerified *_Nullable verified = [verifiedBuilder buildAndReturnError:&error];
if (error || !verified) {
OWSFail(@"%@ could not build protobuf: %@", self.logTag, error);
return;
}
contactBuilder.verified = verified;
} }
UIImage *_Nullable rawAvatar = [contactsManager avatarImageForCNContactId:signalAccount.contact.cnContactId]; UIImage *_Nullable rawAvatar = [contactsManager avatarImageForCNContactId:signalAccount.contact.cnContactId];
@ -53,10 +61,16 @@ disappearingMessagesConfiguration:(nullable OWSDisappearingMessagesConfiguration
if (avatarPng) { if (avatarPng) {
SSKProtoContactDetailsAvatarBuilder *avatarBuilder = SSKProtoContactDetailsAvatarBuilder *avatarBuilder =
[SSKProtoContactDetailsAvatarBuilder new]; [SSKProtoContactDetailsAvatarBuilder new];
[avatarBuilder setContentType:OWSMimeTypeImagePng]; [avatarBuilder setContentType:OWSMimeTypeImagePng];
[avatarBuilder setLength:(uint32_t)avatarPng.length]; [avatarBuilder setLength:(uint32_t)avatarPng.length];
[contactBuilder setAvatarBuilder:avatarBuilder];
NSError *error;
SSKProtoContactDetailsAvatar *_Nullable avatar = [avatarBuilder buildAndReturnError:&error];
if (error || !avatar) {
OWSFail(@"%@ could not build protobuf: %@", self.logTag, error);
return;
}
[contactBuilder setAvatar:avatar];
} }
} }
@ -78,7 +92,17 @@ disappearingMessagesConfiguration:(nullable OWSDisappearingMessagesConfiguration
[contactBuilder setBlocked:YES]; [contactBuilder setBlocked:YES];
} }
NSData *contactData = [[contactBuilder build] data]; NSError *error;
SSKProtoContactDetails *_Nullable contactProto = [contactBuilder buildAndReturnError:&error];
if (error || !contactProto) {
OWSFail(@"%@ could not build protobuf: %@", self.logTag, error);
return;
}
NSData *_Nullable contactData = [contactProto serializedDataAndReturnError:&error];
if (error || !contactData) {
OWSFail(@"%@ could not serialize protobuf: %@", self.logTag, error);
return;
}
uint32_t contactDataLength = (uint32_t)contactData.length; uint32_t contactDataLength = (uint32_t)contactData.length;
[self.delegateStream writeRawVarint32:contactDataLength]; [self.delegateStream writeRawVarint32:contactDataLength];

View File

@ -33,7 +33,7 @@ NS_ASSUME_NONNULL_BEGIN
return [super initWithCoder:coder]; return [super initWithCoder:coder];
} }
- (SSKProtoSyncMessageBuilder *)syncMessageBuilder - (nullable SSKProtoSyncMessageBuilder *)syncMessageBuilder
{ {
SSKProtoSyncMessageBuilder *syncMessageBuilder = [SSKProtoSyncMessageBuilder new]; SSKProtoSyncMessageBuilder *syncMessageBuilder = [SSKProtoSyncMessageBuilder new];
for (OWSLinkedDeviceReadReceipt *readReceipt in self.readReceipts) { for (OWSLinkedDeviceReadReceipt *readReceipt in self.readReceipts) {
@ -41,9 +41,15 @@ NS_ASSUME_NONNULL_BEGIN
[SSKProtoSyncMessageReadBuilder new]; [SSKProtoSyncMessageReadBuilder new];
[readProtoBuilder setSender:readReceipt.senderId]; [readProtoBuilder setSender:readReceipt.senderId];
[readProtoBuilder setTimestamp:readReceipt.messageIdTimestamp]; [readProtoBuilder setTimestamp:readReceipt.messageIdTimestamp];
[syncMessageBuilder addRead:[readProtoBuilder build]];
}
NSError *error;
SSKProtoSyncMessageRead *_Nullable readProto = [readProtoBuilder buildAndReturnError:&error];
if (error || !readProto) {
OWSFail(@"%@ could not build protobuf: %@", self.logTag, error);
return nil;
}
[syncMessageBuilder addRead:readProto];
}
return syncMessageBuilder; return syncMessageBuilder;
} }

View File

@ -54,7 +54,7 @@ NS_ASSUME_NONNULL_BEGIN
return [super initWithCoder:coder]; return [super initWithCoder:coder];
} }
- (SSKProtoSyncMessageBuilder *)syncMessageBuilder - (nullable SSKProtoSyncMessageBuilder *)syncMessageBuilder
{ {
OWSAssert(self.identityKey.length == kIdentityKeyLength); OWSAssert(self.identityKey.length == kIdentityKeyLength);
OWSAssert(self.verificationForRecipientId.length > 0); OWSAssert(self.verificationForRecipientId.length > 0);
@ -63,8 +63,6 @@ NS_ASSUME_NONNULL_BEGIN
// will figure that out on it's own. // will figure that out on it's own.
OWSAssert(self.verificationState != OWSVerificationStateNoLongerVerified); OWSAssert(self.verificationState != OWSVerificationStateNoLongerVerified);
SSKProtoSyncMessageBuilder *syncMessageBuilder = [SSKProtoSyncMessageBuilder new];
SSKProtoVerifiedBuilder *verifiedBuilder = [SSKProtoVerifiedBuilder new]; SSKProtoVerifiedBuilder *verifiedBuilder = [SSKProtoVerifiedBuilder new];
verifiedBuilder.destination = self.verificationForRecipientId; verifiedBuilder.destination = self.verificationForRecipientId;
verifiedBuilder.identityKey = self.identityKey; verifiedBuilder.identityKey = self.identityKey;
@ -78,9 +76,16 @@ NS_ASSUME_NONNULL_BEGIN
// padded by the superclass while being sent. The end result is we send a NullMessage of a non-distinct size, and a // padded by the superclass while being sent. The end result is we send a NullMessage of a non-distinct size, and a
// verification sync which is ~1-512 bytes larger then that. // verification sync which is ~1-512 bytes larger then that.
verifiedBuilder.nullMessage = [Cryptography generateRandomBytes:self.paddingBytesLength]; verifiedBuilder.nullMessage = [Cryptography generateRandomBytes:self.paddingBytesLength];
syncMessageBuilder.verifiedBuilder = verifiedBuilder; NSError *error;
SSKProtoVerified *_Nullable verifiedProto = [verifiedBuilder buildAndReturnError:&error];
if (error || !verifiedProto) {
OWSFail(@"%@ could not build protobuf: %@", self.logTag, error);
return nil;
}
SSKProtoSyncMessageBuilder *syncMessageBuilder = [SSKProtoSyncMessageBuilder new];
[syncMessageBuilder setVerified:verifiedProto];
return syncMessageBuilder; return syncMessageBuilder;
} }

View File

@ -2,11 +2,12 @@
// Copyright (c) 2018 Open Whisper Systems. All rights reserved. // Copyright (c) 2018 Open Whisper Systems. All rights reserved.
// //
#import "SignalServiceKit-Swift.h"
#import "TSAttachment.h" #import "TSAttachment.h"
NS_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_BEGIN
@class SSKProtoAttachmentPointer;
typedef NS_ENUM(NSUInteger, TSAttachmentPointerState) { typedef NS_ENUM(NSUInteger, TSAttachmentPointerState) {
TSAttachmentPointerStateEnqueued = 0, TSAttachmentPointerStateEnqueued = 0,
TSAttachmentPointerStateDownloading = 1, TSAttachmentPointerStateDownloading = 1,

View File

@ -53,19 +53,23 @@ NS_ASSUME_NONNULL_BEGIN
return [super initWithCoder:coder]; return [super initWithCoder:coder];
} }
- (SSKProtoSyncMessageBuilder *)syncMessageBuilder - (nullable SSKProtoSyncMessageBuilder *)syncMessageBuilder
{ {
SSKProtoSyncMessageBuilder *syncMessageBuilder = [SSKProtoSyncMessageBuilder new];
SSKProtoSyncMessageSentBuilder *sentBuilder = [SSKProtoSyncMessageSentBuilder new]; SSKProtoSyncMessageSentBuilder *sentBuilder = [SSKProtoSyncMessageSentBuilder new];
[sentBuilder setTimestamp:self.message.timestamp]; [sentBuilder setTimestamp:self.message.timestamp];
[sentBuilder setDestination:self.sentRecipientId]; [sentBuilder setDestination:self.sentRecipientId];
[sentBuilder setMessage:[self.message buildDataMessage:self.sentRecipientId]]; [sentBuilder setMessage:[self.message buildDataMessage:self.sentRecipientId]];
[sentBuilder setExpirationStartTimestamp:self.message.timestamp]; [sentBuilder setExpirationStartTimestamp:self.message.timestamp];
[syncMessageBuilder setSentBuilder:sentBuilder]; NSError *error;
SSKProtoSyncMessageSent *_Nullable sentProto = [sentBuilder buildAndReturnError:&error];
if (error || !sentProto) {
OWSFail(@"%@ could not build protobuf: %@", self.logTag, error);
return nil;
}
SSKProtoSyncMessageBuilder *syncMessageBuilder = [SSKProtoSyncMessageBuilder new];
[syncMessageBuilder setSent:sentProto];
return syncMessageBuilder; return syncMessageBuilder;
} }

View File

@ -48,28 +48,57 @@ NS_ASSUME_NONNULL_BEGIN
} }
// This method should not be overridden, since we want to add random padding to *every* sync message // This method should not be overridden, since we want to add random padding to *every* sync message
- (SSKProtoSyncMessage *)buildSyncMessage - (nullable SSKProtoSyncMessage *)buildSyncMessage
{ {
SSKProtoSyncMessageBuilder *builder = [self syncMessageBuilder]; SSKProtoSyncMessageBuilder *_Nullable builder = [self syncMessageBuilder];
if (!builder) {
return nil;
}
// Add a random 1-512 bytes to obscure sync message type // Add a random 1-512 bytes to obscure sync message type
size_t paddingBytesLength = arc4random_uniform(512) + 1; size_t paddingBytesLength = arc4random_uniform(512) + 1;
builder.padding = [Cryptography generateRandomBytes:paddingBytesLength]; builder.padding = [Cryptography generateRandomBytes:paddingBytesLength];
return [builder build]; NSError *error;
SSKProtoSyncMessage *_Nullable proto = [builder buildAndReturnError:&error];
if (error || !proto) {
OWSFail(@"%@ could not build protobuf: %@", self.logTag, error);
return nil;
}
return proto;
} }
- (SSKProtoSyncMessageBuilder *)syncMessageBuilder - (nullable SSKProtoSyncMessageBuilder *)syncMessageBuilder
{ {
OWSFail(@"Abstract method should be overridden in subclass."); OWS_ABSTRACT_METHOD();
return [SSKProtoSyncMessageBuilder new]; return [SSKProtoSyncMessageBuilder new];
} }
- (nullable NSData *)buildPlainTextData:(SignalRecipient *)recipient - (nullable NSData *)buildPlainTextData:(SignalRecipient *)recipient
{ {
SSKProtoSyncMessage *_Nullable syncMessage = [self buildSyncMessage];
if (!syncMessage) {
return nil;
}
SSKProtoContentBuilder *contentBuilder = [SSKProtoContentBuilder new]; SSKProtoContentBuilder *contentBuilder = [SSKProtoContentBuilder new];
[contentBuilder setSyncMessage:[self buildSyncMessage]]; [contentBuilder setSyncMessage:syncMessage];
return [[contentBuilder build] data];
NSError *error;
SSKProtoContent *_Nullable contentProto = [contentBuilder buildAndReturnError:&error];
if (error || !contentProto) {
OWSFail(@"%@ could not build protobuf: %@", self.logTag, error);
return nil;
}
NSData *_Nullable data = [contentProto serializedDataAndReturnError:&error];
if (error || !data) {
OWSFail(@"%@ could not serialize protobuf: %@", self.logTag, error);
return nil;
}
return data;
} }
@end @end

View File

@ -32,17 +32,21 @@ NS_ASSUME_NONNULL_BEGIN
return [super initWithCoder:coder]; return [super initWithCoder:coder];
} }
- (SSKProtoSyncMessageBuilder *)syncMessageBuilder - (nullable SSKProtoSyncMessageBuilder *)syncMessageBuilder
{ {
SSKProtoSyncMessageConfigurationBuilder *configurationBuilder = SSKProtoSyncMessageConfigurationBuilder *configurationBuilder =
[SSKProtoSyncMessageConfigurationBuilder new]; [SSKProtoSyncMessageConfigurationBuilder new];
configurationBuilder.readReceipts = self.areReadReceiptsEnabled; configurationBuilder.readReceipts = self.areReadReceiptsEnabled;
NSError *error;
SSKProtoSyncMessageConfiguration *_Nullable configurationProto = [configurationBuilder buildAndReturnError:&error];
if (error || !configurationProto) {
OWSFail(@"%@ could not build protobuf: %@", self.logTag, error);
return nil;
}
SSKProtoSyncMessageBuilder *builder = [SSKProtoSyncMessageBuilder new]; SSKProtoSyncMessageBuilder *builder = [SSKProtoSyncMessageBuilder new];
builder.configuration = configurationProto;
builder.configurationBuilder = configurationBuilder;
return builder; return builder;
} }

View File

@ -49,7 +49,7 @@ NS_ASSUME_NONNULL_BEGIN
return [super initWithCoder:coder]; return [super initWithCoder:coder];
} }
- (SSKProtoSyncMessageBuilder *)syncMessageBuilder - (nullable SSKProtoSyncMessageBuilder *)syncMessageBuilder
{ {
if (self.attachmentIds.count != 1) { if (self.attachmentIds.count != 1) {
DDLogError(@"expected sync contact message to have exactly one attachment, but found %lu", DDLogError(@"expected sync contact message to have exactly one attachment, but found %lu",
@ -61,12 +61,16 @@ NS_ASSUME_NONNULL_BEGIN
SSKProtoSyncMessageContactsBuilder *contactsBuilder = SSKProtoSyncMessageContactsBuilder *contactsBuilder =
[SSKProtoSyncMessageContactsBuilder new]; [SSKProtoSyncMessageContactsBuilder new];
[contactsBuilder setBlob:attachmentProto]; [contactsBuilder setBlob:attachmentProto];
[contactsBuilder setIsComplete:YES]; [contactsBuilder setIsComplete:YES];
SSKProtoSyncMessageBuilder *syncMessageBuilder = [SSKProtoSyncMessageBuilder new]; NSError *error;
[syncMessageBuilder setContactsBuilder:contactsBuilder]; SSKProtoSyncMessageContacts *_Nullable contactsProto = [contactsBuilder buildAndReturnError:&error];
if (error || !contactsProto) {
OWSFail(@"%@ could not build protobuf: %@", self.logTag, error);
return nil;
}
[syncMessageBuilder setContacts:contactsProto];
return syncMessageBuilder; return syncMessageBuilder;
} }

View File

@ -26,7 +26,7 @@ NS_ASSUME_NONNULL_BEGIN
return [super initWithCoder:coder]; return [super initWithCoder:coder];
} }
- (SSKProtoSyncMessageBuilder *)syncMessageBuilder - (nullable SSKProtoSyncMessageBuilder *)syncMessageBuilder
{ {
if (self.attachmentIds.count != 1) { if (self.attachmentIds.count != 1) {
@ -37,11 +37,17 @@ NS_ASSUME_NONNULL_BEGIN
SSKProtoSyncMessageGroupsBuilder *groupsBuilder = SSKProtoSyncMessageGroupsBuilder *groupsBuilder =
[SSKProtoSyncMessageGroupsBuilder new]; [SSKProtoSyncMessageGroupsBuilder new];
[groupsBuilder setBlob:attachmentProto]; [groupsBuilder setBlob:attachmentProto];
NSError *error;
SSKProtoSyncMessageGroups *_Nullable groupsProto = [groupsBuilder buildAndReturnError:&error];
if (error || !groupsProto) {
OWSFail(@"%@ could not build protobuf: %@", self.logTag, error);
return nil;
}
SSKProtoSyncMessageBuilder *syncMessageBuilder = [SSKProtoSyncMessageBuilder new]; SSKProtoSyncMessageBuilder *syncMessageBuilder = [SSKProtoSyncMessageBuilder new];
[syncMessageBuilder setGroupsBuilder:groupsBuilder]; [syncMessageBuilder setGroups:groupsProto];
return syncMessageBuilder; return syncMessageBuilder;
} }

View File

@ -796,7 +796,14 @@ NSString *NSStringForContactAddressType(OWSContactAddressType value)
contactBuilder.organization = contactName.organizationName.ows_stripped; contactBuilder.organization = contactName.organizationName.ows_stripped;
} }
nameBuilder.displayName = contactName.displayName; nameBuilder.displayName = contactName.displayName;
[contactBuilder setNameBuilder:nameBuilder];
NSError *error;
SSKProtoDataMessageContactName *_Nullable nameProto = [nameBuilder buildAndReturnError:&error];
if (error || !nameProto) {
OWSFail(@"%@ could not build protobuf: %@", self.logTag, error);
return nil;
}
[contactBuilder setName:nameProto];
for (OWSContactPhoneNumber *phoneNumber in contact.phoneNumbers) { for (OWSContactPhoneNumber *phoneNumber in contact.phoneNumbers) {
SSKProtoDataMessageContactPhoneBuilder *phoneBuilder = SSKProtoDataMessageContactPhoneBuilder *phoneBuilder =
@ -819,7 +826,12 @@ NSString *NSStringForContactAddressType(OWSContactAddressType value)
phoneBuilder.type = SSKProtoDataMessageContactPhoneTypeCustom; phoneBuilder.type = SSKProtoDataMessageContactPhoneTypeCustom;
break; break;
} }
[contactBuilder addNumber:phoneBuilder.build]; SSKProtoDataMessageContactPhone *_Nullable numberProto = [phoneBuilder buildAndReturnError:&error];
if (error || !numberProto) {
OWSFail(@"%@ could not build protobuf: %@", self.logTag, error);
return nil;
}
[contactBuilder addNumber:numberProto];
} }
for (OWSContactEmail *email in contact.emails) { for (OWSContactEmail *email in contact.emails) {
@ -843,7 +855,12 @@ NSString *NSStringForContactAddressType(OWSContactAddressType value)
emailBuilder.type = SSKProtoDataMessageContactEmailTypeCustom; emailBuilder.type = SSKProtoDataMessageContactEmailTypeCustom;
break; break;
} }
[contactBuilder addEmail:emailBuilder.build]; SSKProtoDataMessageContactEmail *_Nullable emailProto = [emailBuilder buildAndReturnError:&error];
if (error || !emailProto) {
OWSFail(@"%@ could not build protobuf: %@", self.logTag, error);
return nil;
}
[contactBuilder addEmail:emailProto];
} }
for (OWSContactAddress *address in contact.addresses) { for (OWSContactAddress *address in contact.addresses) {
@ -873,7 +890,12 @@ NSString *NSStringForContactAddressType(OWSContactAddressType value)
if (address.country.ows_stripped.length > 0) { if (address.country.ows_stripped.length > 0) {
addressBuilder.country = address.country.ows_stripped; addressBuilder.country = address.country.ows_stripped;
} }
[contactBuilder addAddress:addressBuilder.build]; SSKProtoDataMessageContactPostalAddress *_Nullable addressProto = [addressBuilder buildAndReturnError:&error];
if (error || !addressProto) {
OWSFail(@"%@ could not build protobuf: %@", self.logTag, error);
return nil;
}
[contactBuilder addAddress:addressProto];
} }
if (contact.avatarAttachmentId != nil) { if (contact.avatarAttachmentId != nil) {
@ -881,10 +903,19 @@ NSString *NSStringForContactAddressType(OWSContactAddressType value)
[SSKProtoDataMessageContactAvatarBuilder new]; [SSKProtoDataMessageContactAvatarBuilder new];
avatarBuilder.avatar = avatarBuilder.avatar =
[TSAttachmentStream buildProtoForAttachmentId:contact.avatarAttachmentId]; [TSAttachmentStream buildProtoForAttachmentId:contact.avatarAttachmentId];
contactBuilder.avatar = [avatarBuilder build]; SSKProtoDataMessageContactAvatar *_Nullable avatarProto = [avatarBuilder buildAndReturnError:&error];
if (error || !avatarProto) {
OWSFail(@"%@ could not build protobuf: %@", self.logTag, error);
return nil;
}
contactBuilder.avatar = avatarProto;
} }
SSKProtoDataMessageContact *contactProto = [contactBuilder build]; SSKProtoDataMessageContact *_Nullable contactProto = [contactBuilder buildAndReturnError:&error];
if (error || !contactProto) {
OWSFail(@"%@ could not build protobuf: %@", self.logTag, error);
return nil;
}
if (contactProto.number.count < 1 && contactProto.email.count < 1 && contactProto.address.count < 1) { if (contactProto.number.count < 1 && contactProto.email.count < 1 && contactProto.address.count < 1) {
OWSProdLogAndFail(@"%@ contact has neither phone, email or address.", self.logTag); OWSProdLogAndFail(@"%@ contact has neither phone, email or address.", self.logTag);
return nil; return nil;

View File

@ -134,14 +134,14 @@ NS_ASSUME_NONNULL_BEGIN
[builder setCallMessage:[self buildCallMessage:recipient.recipientId]]; [builder setCallMessage:[self buildCallMessage:recipient.recipientId]];
NSError *error; NSError *error;
SSKProtoCallMessage *_Nullable result = [builder buildAndReturnError:&error]; SSKProtoContent *_Nullable result = [builder buildAndReturnError:&error];
if (error || !result) { if (error || !result) {
OWSFail(@"%@ could not build protobuf: %@", self.logTag, error); OWSFail(@"%@ could not build protobuf: %@", self.logTag, error);
return nil; return nil;
} }
NSData *_Nullable data = [result serializedDataAndReturnError:&error]; NSData *_Nullable data = [result serializedDataAndReturnError:&error];
if (error || !result) { if (error || !data) {
OWSFail(@"%@ could not build protobuf: %@", self.logTag, error); OWSFail(@"%@ could not serialize protobuf: %@", self.logTag, error);
return nil; return nil;
} }
return data; return data;
@ -152,25 +152,45 @@ NS_ASSUME_NONNULL_BEGIN
SSKProtoCallMessageBuilder *builder = [SSKProtoCallMessageBuilder new]; SSKProtoCallMessageBuilder *builder = [SSKProtoCallMessageBuilder new];
if (self.offerMessage) { if (self.offerMessage) {
[builder setOffer:[self.offerMessage asProtobuf]]; SSKProtoCallMessageOffer *_Nullable proto = [self.offerMessage asProtobuf];
if (!proto) {
return nil;
}
[builder setOffer:proto];
} }
if (self.answerMessage) { if (self.answerMessage) {
[builder setAnswer:[self.answerMessage asProtobuf]]; SSKProtoCallMessageAnswer *_Nullable proto = [self.answerMessage asProtobuf];
if (!proto) {
return nil;
}
[builder setAnswer:proto];
} }
if (self.iceUpdateMessages) { if (self.iceUpdateMessages) {
for (OWSCallIceUpdateMessage *iceUpdateMessage in self.iceUpdateMessages) { for (OWSCallIceUpdateMessage *iceUpdateMessage in self.iceUpdateMessages) {
[builder addIceUpdate:[iceUpdateMessage asProtobuf]]; SSKProtoCallMessageIceUpdate *_Nullable proto = [iceUpdateMessage asProtobuf];
if (!proto) {
return nil;
}
[builder addIceUpdate:proto];
} }
} }
if (self.hangupMessage) { if (self.hangupMessage) {
[builder setHangup:[self.hangupMessage asProtobuf]]; SSKProtoCallMessageHangup *_Nullable proto = [self.hangupMessage asProtobuf];
if (!proto) {
return nil;
}
[builder setHangup:proto];
} }
if (self.busyMessage) { if (self.busyMessage) {
[builder setBusy:[self.busyMessage asProtobuf]]; SSKProtoCallMessageBusy *_Nullable proto = [self.busyMessage asProtobuf];
if (!proto) {
return nil;
}
[builder setBusy:proto];
} }
[builder addLocalProfileKeyIfNecessary:self.thread recipientId:recipientId]; [builder addLocalProfileKeyIfNecessary:self.thread recipientId:recipientId];

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -672,6 +672,14 @@ public enum SSKProtoError: Error {
proto.iceUpdate = items proto.iceUpdate = items
} }
@objc public func setIceUpdate(_ wrappedItems: [SSKProtoCallMessageIceUpdate]) {
var unwrappedItems = [SignalServiceProtos_CallMessage.IceUpdate]()
for wrappedItem in wrappedItems {
unwrappedItems.append(wrappedItem.proto)
}
proto.iceUpdate = unwrappedItems
}
@objc public func setHangup(_ valueParam: SSKProtoCallMessageHangup) { @objc public func setHangup(_ valueParam: SSKProtoCallMessageHangup) {
proto.hangup = valueParam.proto proto.hangup = valueParam.proto
} }
@ -918,6 +926,14 @@ public enum SSKProtoError: Error {
proto.attachments = items proto.attachments = items
} }
@objc public func setAttachments(_ wrappedItems: [SSKProtoDataMessageQuoteQuotedAttachment]) {
var unwrappedItems = [SignalServiceProtos_DataMessage.Quote.QuotedAttachment]()
for wrappedItem in wrappedItems {
unwrappedItems.append(wrappedItem.proto)
}
proto.attachments = unwrappedItems
}
@objc public func build() throws -> SSKProtoDataMessageQuote { @objc public func build() throws -> SSKProtoDataMessageQuote {
let wrapper = try SSKProtoDataMessageQuote.parseProto(proto) let wrapper = try SSKProtoDataMessageQuote.parseProto(proto)
return wrapper return wrapper
@ -1619,18 +1635,42 @@ public enum SSKProtoError: Error {
proto.number = items proto.number = items
} }
@objc public func setNumber(_ wrappedItems: [SSKProtoDataMessageContactPhone]) {
var unwrappedItems = [SignalServiceProtos_DataMessage.Contact.Phone]()
for wrappedItem in wrappedItems {
unwrappedItems.append(wrappedItem.proto)
}
proto.number = unwrappedItems
}
@objc public func addEmail(_ valueParam: SSKProtoDataMessageContactEmail) { @objc public func addEmail(_ valueParam: SSKProtoDataMessageContactEmail) {
var items = proto.email var items = proto.email
items.append(valueParam.proto) items.append(valueParam.proto)
proto.email = items proto.email = items
} }
@objc public func setEmail(_ wrappedItems: [SSKProtoDataMessageContactEmail]) {
var unwrappedItems = [SignalServiceProtos_DataMessage.Contact.Email]()
for wrappedItem in wrappedItems {
unwrappedItems.append(wrappedItem.proto)
}
proto.email = unwrappedItems
}
@objc public func addAddress(_ valueParam: SSKProtoDataMessageContactPostalAddress) { @objc public func addAddress(_ valueParam: SSKProtoDataMessageContactPostalAddress) {
var items = proto.address var items = proto.address
items.append(valueParam.proto) items.append(valueParam.proto)
proto.address = items proto.address = items
} }
@objc public func setAddress(_ wrappedItems: [SSKProtoDataMessageContactPostalAddress]) {
var unwrappedItems = [SignalServiceProtos_DataMessage.Contact.PostalAddress]()
for wrappedItem in wrappedItems {
unwrappedItems.append(wrappedItem.proto)
}
proto.address = unwrappedItems
}
@objc public func setAvatar(_ valueParam: SSKProtoDataMessageContactAvatar) { @objc public func setAvatar(_ valueParam: SSKProtoDataMessageContactAvatar) {
proto.avatar = valueParam.proto proto.avatar = valueParam.proto
} }
@ -1776,6 +1816,14 @@ public enum SSKProtoError: Error {
proto.attachments = items proto.attachments = items
} }
@objc public func setAttachments(_ wrappedItems: [SSKProtoAttachmentPointer]) {
var unwrappedItems = [SignalServiceProtos_AttachmentPointer]()
for wrappedItem in wrappedItems {
unwrappedItems.append(wrappedItem.proto)
}
proto.attachments = unwrappedItems
}
@objc public func setGroup(_ valueParam: SSKProtoGroupContext) { @objc public func setGroup(_ valueParam: SSKProtoGroupContext) {
proto.group = valueParam.proto proto.group = valueParam.proto
} }
@ -1806,6 +1854,14 @@ public enum SSKProtoError: Error {
proto.contact = items proto.contact = items
} }
@objc public func setContact(_ wrappedItems: [SSKProtoDataMessageContact]) {
var unwrappedItems = [SignalServiceProtos_DataMessage.Contact]()
for wrappedItem in wrappedItems {
unwrappedItems.append(wrappedItem.proto)
}
proto.contact = unwrappedItems
}
@objc public func build() throws -> SSKProtoDataMessage { @objc public func build() throws -> SSKProtoDataMessage {
let wrapper = try SSKProtoDataMessage.parseProto(proto) let wrapper = try SSKProtoDataMessage.parseProto(proto)
return wrapper return wrapper
@ -2019,6 +2075,14 @@ public enum SSKProtoError: Error {
proto.timestamp = items proto.timestamp = items
} }
@objc public func setTimestamp(_ wrappedItems: [UInt64]) {
var unwrappedItems = [UInt64]()
for wrappedItem in wrappedItems {
unwrappedItems.append(wrappedItem)
}
proto.timestamp = unwrappedItems
}
@objc public func build() throws -> SSKProtoReceiptMessage { @objc public func build() throws -> SSKProtoReceiptMessage {
let wrapper = try SSKProtoReceiptMessage.parseProto(proto) let wrapper = try SSKProtoReceiptMessage.parseProto(proto)
return wrapper return wrapper
@ -2425,6 +2489,14 @@ public enum SSKProtoError: Error {
proto.numbers = items proto.numbers = items
} }
@objc public func setNumbers(_ wrappedItems: [String]) {
var unwrappedItems = [String]()
for wrappedItem in wrappedItems {
unwrappedItems.append(wrappedItem)
}
proto.numbers = unwrappedItems
}
@objc public func build() throws -> SSKProtoSyncMessageBlocked { @objc public func build() throws -> SSKProtoSyncMessageBlocked {
let wrapper = try SSKProtoSyncMessageBlocked.parseProto(proto) let wrapper = try SSKProtoSyncMessageBlocked.parseProto(proto)
return wrapper return wrapper
@ -2709,6 +2781,14 @@ public enum SSKProtoError: Error {
proto.read = items proto.read = items
} }
@objc public func setRead(_ wrappedItems: [SSKProtoSyncMessageRead]) {
var unwrappedItems = [SignalServiceProtos_SyncMessage.Read]()
for wrappedItem in wrappedItems {
unwrappedItems.append(wrappedItem.proto)
}
proto.read = unwrappedItems
}
@objc public func setBlocked(_ valueParam: SSKProtoSyncMessageBlocked) { @objc public func setBlocked(_ valueParam: SSKProtoSyncMessageBlocked) {
proto.blocked = valueParam.proto proto.blocked = valueParam.proto
} }
@ -3091,6 +3171,14 @@ public enum SSKProtoError: Error {
proto.members = items proto.members = items
} }
@objc public func setMembers(_ wrappedItems: [String]) {
var unwrappedItems = [String]()
for wrappedItem in wrappedItems {
unwrappedItems.append(wrappedItem)
}
proto.members = unwrappedItems
}
@objc public func setAvatar(_ valueParam: SSKProtoAttachmentPointer) { @objc public func setAvatar(_ valueParam: SSKProtoAttachmentPointer) {
proto.avatar = valueParam.proto proto.avatar = valueParam.proto
} }
@ -3481,6 +3569,14 @@ public enum SSKProtoError: Error {
proto.members = items proto.members = items
} }
@objc public func setMembers(_ wrappedItems: [String]) {
var unwrappedItems = [String]()
for wrappedItem in wrappedItems {
unwrappedItems.append(wrappedItem)
}
proto.members = unwrappedItems
}
@objc public func setAvatar(_ valueParam: SSKProtoGroupDetailsAvatar) { @objc public func setAvatar(_ valueParam: SSKProtoGroupDetailsAvatar) {
proto.avatar = valueParam.proto proto.avatar = valueParam.proto
} }