diff --git a/Podfile.lock b/Podfile.lock index 3bb4b98fa..fb716fd9a 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -187,7 +187,7 @@ EXTERNAL SOURCES: CHECKOUT OPTIONS: AxolotlKit: - :commit: 1fbdd114afe5ca981324892f22242d3a7a47794d + :commit: 0c9dc8cc0f02fd616fa8e5a4f4184e452de93f1e :git: https://github.com/signalapp/SignalProtocolKit.git Curve25519Kit: :commit: ced146699622ebd3d282bbfce3d492db4456e9aa diff --git a/Pods b/Pods index 73bf1779e..d16f91410 160000 --- a/Pods +++ b/Pods @@ -1 +1 @@ -Subproject commit 73bf1779e0298cbc28c0b93d908bae0aa1f44bbc +Subproject commit d16f91410fa1d9859a910b6f2b6e2369fb6d0377 diff --git a/Scripts/ProtoWrappers.py b/Scripts/ProtoWrappers.py index 1eac49ad1..e1c4e6875 100755 --- a/Scripts/ProtoWrappers.py +++ b/Scripts/ProtoWrappers.py @@ -302,7 +302,6 @@ import Foundation writer.extend((''' public enum %s: Error { case invalidProtobuf(description: String) - case unsafeProtobuf(description: String) } ''' % writer.invalid_protobuf_error_name).strip()) writer.newline() @@ -649,6 +648,54 @@ public func serializedData() throws -> Data { writer.add('@objc public override init() {}') writer.newline() + # Required-Field Initializer + required_fields = [field for field in self.fields() if field.is_required] + if len(required_fields) > 0: + required_init_params = [] + for field in required_fields: + if field.rules == 'repeated': + param_type = '[' + self.base_swift_type_for_field(field) + ']' + else: + param_type = self.base_swift_type_for_field(field) + required_init_params.append('%s: %s' % ( field.name_swift, param_type) ) + writer.add('// Initializer for required fields') + writer.add('@objc public init(%s) {' % ', '.join(required_init_params)) + writer.push_indent() + writer.add('super.init()') + writer.newline() + for field in required_fields: + accessor_name = field.name_swift + accessor_name = 'set' + accessor_name[0].upper() + accessor_name[1:] + writer.add('%s(%s)' % ( accessor_name, field.name_swift, ) ) + writer.pop_indent() + writer.add('}') + writer.newline() + + # # All-Field Initializer + # if len(required_fields) < len(self.fields()): + # init_params = [] + # for field in self.fields(): + # if field.is_required: + # if field.rules == 'repeated': + # param_type = '[' + self.base_swift_type_for_field(field) + ']' + # else: + # param_type = self.base_swift_type_for_field(field) + # else: + # param_type = field.type_swift + # init_params.append('%s: %s' % ( field.name_swift, param_type) ) + # writer.add('// Initializer for required fields') + # writer.add('@objc public init(%s) {' % ', '.join(init_params)) + # writer.push_indent() + # writer.add('super.init()') + # writer.newline() + # for field in self.fields(): + # accessor_name = field.name_swift + # accessor_name = 'set' + accessor_name[0].upper() + accessor_name[1:] + # writer.add('%s(%s)' % ( accessor_name, field.name_swift, ) ) + # writer.pop_indent() + # writer.add('}') + # writer.newline() + # Setters for field in self.fields(): if field.rules == 'repeated': diff --git a/Signal/src/Generated/WebRTCProto.swift b/Signal/src/Generated/WebRTCProto.swift index 84fb4a06e..6f07fc87c 100644 --- a/Signal/src/Generated/WebRTCProto.swift +++ b/Signal/src/Generated/WebRTCProto.swift @@ -8,7 +8,6 @@ import Foundation public enum WebRTCProtoError: Error { case invalidProtobuf(description: String) - case unsafeProtobuf(description: String) } // MARK: - WebRTCProtoConnected @@ -23,6 +22,13 @@ public enum WebRTCProtoError: Error { @objc public override init() {} + // Initializer for required fields + @objc public init(id: UInt64) { + super.init() + + setId(id) + } + @objc public func setId(_ valueParam: UInt64) { proto.id = valueParam } @@ -102,6 +108,13 @@ public enum WebRTCProtoError: Error { @objc public override init() {} + // Initializer for required fields + @objc public init(id: UInt64) { + super.init() + + setId(id) + } + @objc public func setId(_ valueParam: UInt64) { proto.id = valueParam } @@ -181,6 +194,13 @@ public enum WebRTCProtoError: Error { @objc public override init() {} + // Initializer for required fields + @objc public init(id: UInt64) { + super.init() + + setId(id) + } + @objc public func setId(_ valueParam: UInt64) { proto.id = valueParam } @@ -348,17 +368,17 @@ public enum WebRTCProtoError: Error { } fileprivate class func parseProto(_ proto: WebRTCProtos_Data) throws -> WebRTCProtoData { - var connected: WebRTCProtoConnected? = nil + var connected: WebRTCProtoConnected? if proto.hasConnected { connected = try WebRTCProtoConnected.parseProto(proto.connected) } - var hangup: WebRTCProtoHangup? = nil + var hangup: WebRTCProtoHangup? if proto.hasHangup { hangup = try WebRTCProtoHangup.parseProto(proto.hangup) } - var videoStreamingStatus: WebRTCProtoVideoStreamingStatus? = nil + var videoStreamingStatus: WebRTCProtoVideoStreamingStatus? if proto.hasVideoStreamingStatus { videoStreamingStatus = try WebRTCProtoVideoStreamingStatus.parseProto(proto.videoStreamingStatus) } diff --git a/Signal/src/Jobs/MessageFetcherJob.swift b/Signal/src/Jobs/MessageFetcherJob.swift index b364970ab..cdf484229 100644 --- a/Signal/src/Jobs/MessageFetcherJob.swift +++ b/Signal/src/Jobs/MessageFetcherJob.swift @@ -122,24 +122,29 @@ public class MessageFetcherJob: NSObject { do { let params = ParamParser(dictionary: messageDict) - let builder = SSKProtoEnvelope.SSKProtoEnvelopeBuilder() - let typeInt: Int32 = try params.required(key: "type") guard let type: SSKProtoEnvelope.SSKProtoEnvelopeType = SSKProtoEnvelope.SSKProtoEnvelopeType(rawValue: typeInt) else { - Logger.error("\(self.logTag) `typeInt` was invalid: \(typeInt)") + Logger.error("\(self.logTag) `type` was invalid: \(typeInt)") throw ParamParser.ParseError.invalidFormat("type") } - builder.setType(type) - if let timestamp: UInt64 = try params.required(key: "timestamp") { - builder.setTimestamp(timestamp) + guard let source: String = try params.required(key: "source") else { + Logger.error("\(self.logTag) `source` was invalid: \(typeInt)") + throw ParamParser.ParseError.invalidFormat("source") } - if let source: String = try params.required(key: "source") { - builder.setSource(source) + + guard let timestamp: UInt64 = try params.required(key: "timestamp") else { + Logger.error("\(self.logTag) `timestamp` was invalid: \(typeInt)") + throw ParamParser.ParseError.invalidFormat("timestamp") } - if let sourceDevice: UInt32 = try params.required(key: "sourceDevice") { - builder.setSourceDevice(sourceDevice) + + guard let sourceDevice: UInt32 = try params.required(key: "sourceDevice") else { + Logger.error("\(self.logTag) `sourceDevice` was invalid: \(typeInt)") + throw ParamParser.ParseError.invalidFormat("sourceDevice") } + + let builder = SSKProtoEnvelope.SSKProtoEnvelopeBuilder(type: type, source: source, sourceDevice: sourceDevice, timestamp: timestamp) + if let legacyMessage = try params.optionalBase64EncodedData(key: "message") { builder.setLegacyMessage(legacyMessage) } diff --git a/Signal/src/ViewControllers/DebugUI/DebugUIMessages.m b/Signal/src/ViewControllers/DebugUI/DebugUIMessages.m index c724919fd..4f42f994d 100644 --- a/Signal/src/ViewControllers/DebugUI/DebugUIMessages.m +++ b/Signal/src/ViewControllers/DebugUI/DebugUIMessages.m @@ -3396,11 +3396,11 @@ typedef OWSContact * (^OWSContactBlock)(YapDatabaseReadWriteTransaction *transac } }(); - SSKProtoEnvelopeBuilder *envelopeBuilder = [SSKProtoEnvelopeBuilder new]; - envelopeBuilder.type = SSKProtoEnvelopeTypeCiphertext; - envelopeBuilder.source = source; - envelopeBuilder.sourceDevice = 1; - envelopeBuilder.timestamp = timestamp; + SSKProtoEnvelopeBuilder *envelopeBuilder = + [[SSKProtoEnvelopeBuilder alloc] initWithType:SSKProtoEnvelopeTypeCiphertext + source:source + sourceDevice:1 + timestamp:timestamp]; NSError *error; SSKProtoEnvelope *_Nullable envelope = [envelopeBuilder buildAndReturnError:&error]; if (error || !envelope) { @@ -3894,9 +3894,9 @@ typedef OWSContact * (^OWSContactBlock)(YapDatabaseReadWriteTransaction *transac if ([thread isKindOfClass:[TSGroupThread class]]) { TSGroupThread *groupThread = (TSGroupThread *)thread; - SSKProtoGroupContextBuilder *groupBuilder = [SSKProtoGroupContextBuilder new]; - [groupBuilder setType:SSKProtoGroupContextTypeDeliver]; - [groupBuilder setId:groupThread.groupModel.groupId]; + SSKProtoGroupContextBuilder *groupBuilder = + [[SSKProtoGroupContextBuilder alloc] initWithId:groupThread.groupModel.groupId + type:SSKProtoGroupContextTypeDeliver]; [dataMessageBuilder setGroup:groupBuilder.buildIgnoringErrors]; } @@ -3919,11 +3919,10 @@ typedef OWSContact * (^OWSContactBlock)(YapDatabaseReadWriteTransaction *transac SSKProtoEnvelopeType envelopeType = SSKProtoEnvelopeTypeCiphertext; NSData *content = plaintextData; - SSKProtoEnvelopeBuilder *envelopeBuilder = [SSKProtoEnvelopeBuilder new]; - envelopeBuilder.type = envelopeType; - envelopeBuilder.source = source; - envelopeBuilder.sourceDevice = sourceDevice; - envelopeBuilder.timestamp = timestamp; + SSKProtoEnvelopeBuilder *envelopeBuilder = [[SSKProtoEnvelopeBuilder alloc] initWithType:envelopeType + source:source + sourceDevice:sourceDevice + timestamp:timestamp]; envelopeBuilder.content = content; NSError *error; NSData *_Nullable envelopeData = [envelopeBuilder buildSerializedDataAndReturnError:&error]; diff --git a/Signal/src/call/CallService.swift b/Signal/src/call/CallService.swift index ac1656efb..8db40dfd3 100644 --- a/Signal/src/call/CallService.swift +++ b/Signal/src/call/CallService.swift @@ -409,11 +409,9 @@ private class SignalCallData: NSObject { return peerConnectionClient.setLocalSessionDescription(sessionDescription).then { do { - let offerBuilder = SSKProtoCallMessageOffer.SSKProtoCallMessageOfferBuilder() - offerBuilder.setId(call.signalingId) - offerBuilder.setSessionDescription(sessionDescription.sdp) - let offer = try offerBuilder.build() - let callMessage = OWSOutgoingCallMessage(thread: call.thread, offerMessage: offer) + let offerBuilder = SSKProtoCallMessageOffer.SSKProtoCallMessageOfferBuilder(id: call.signalingId, + sessionDescription: sessionDescription.sdp) + let callMessage = OWSOutgoingCallMessage(thread: call.thread, offerMessage: try offerBuilder.build()) return self.messageSender.sendPromise(message: callMessage) } catch { owsFail("Couldn't build proto in \(#function)") @@ -547,11 +545,8 @@ private class SignalCallData: NSObject { SwiftAssertIsOnMainThread(#function) do { - let busyBuilder = SSKProtoCallMessageBusy.SSKProtoCallMessageBusyBuilder() - busyBuilder.setId(call.signalingId) - let busyMessage = try busyBuilder.build() - - let callMessage = OWSOutgoingCallMessage(thread: call.thread, busyMessage: busyMessage) + let busyBuilder = SSKProtoCallMessageBusy.SSKProtoCallMessageBusyBuilder(id: call.signalingId) + let callMessage = OWSOutgoingCallMessage(thread: call.thread, busyMessage: try busyBuilder.build()) let sendPromise = messageSender.sendPromise(message: callMessage) sendPromise.retainUntilComplete() @@ -720,11 +715,9 @@ private class SignalCallData: NSObject { } do { - let answerBuilder = SSKProtoCallMessageAnswer.SSKProtoCallMessageAnswerBuilder() - answerBuilder.setId(newCall.signalingId) - answerBuilder.setSessionDescription(negotiatedSessionDescription.sdp) - let answer = try answerBuilder.build() - let callAnswerMessage = OWSOutgoingCallMessage(thread: thread, answerMessage: answer) + let answerBuilder = SSKProtoCallMessageAnswer.SSKProtoCallMessageAnswerBuilder(id: newCall.signalingId, + sessionDescription: negotiatedSessionDescription.sdp) + let callAnswerMessage = OWSOutgoingCallMessage(thread: thread, answerMessage: try answerBuilder.build()) return self.messageSender.sendPromise(message: callAnswerMessage) } catch { @@ -866,14 +859,11 @@ private class SignalCallData: NSObject { * include network accessibility information from the perspective of each client. Once compatible ICEUpdates have been * exchanged, the clients can connect. */ - let iceUpdateBuilder = SSKProtoCallMessageIceUpdate.SSKProtoCallMessageIceUpdateBuilder() - iceUpdateBuilder.setId(call.signalingId) - iceUpdateBuilder.setSdp(iceCandidate.sdp) - iceUpdateBuilder.setSdpMlineIndex(UInt32(iceCandidate.sdpMLineIndex)) - iceUpdateBuilder.setSdpMid(sdpMid) - let iceUpdate = try iceUpdateBuilder.build() - - let callMessage = OWSOutgoingCallMessage(thread: call.thread, iceUpdateMessage: iceUpdate) + let iceUpdateBuilder = SSKProtoCallMessageIceUpdate.SSKProtoCallMessageIceUpdateBuilder(id: call.signalingId, + sdpMid: sdpMid, + sdpMlineIndex: UInt32(iceCandidate.sdpMLineIndex), + sdp: iceCandidate.sdp) + let callMessage = OWSOutgoingCallMessage(thread: call.thread, iceUpdateMessage: try iceUpdateBuilder.build()) let sendPromise = self.messageSender.sendPromise(message: callMessage) sendPromise.retainUntilComplete() } catch { @@ -1049,12 +1039,9 @@ private class SignalCallData: NSObject { var messageData: Data do { - let connectedBuilder = WebRTCProtoConnected.WebRTCProtoConnectedBuilder() - connectedBuilder.setId(call.signalingId) - let connectedProto = try connectedBuilder.build() - + let connectedBuilder = WebRTCProtoConnected.WebRTCProtoConnectedBuilder(id: call.signalingId) let dataBuilder = WebRTCProtoData.WebRTCProtoDataBuilder() - dataBuilder.setConnected(connectedProto) + dataBuilder.setConnected(try connectedBuilder.build()) messageData = try dataBuilder.buildSerializedData() } catch { handleFailedCall(failedCall: call, error: CallError.assertionError(description: "\(self.logTag) couldn't build proto in \(#function)")) @@ -1190,12 +1177,9 @@ private class SignalCallData: NSObject { var messageData: Data do { - let hangupBuilder = WebRTCProtoHangup.WebRTCProtoHangupBuilder() - hangupBuilder.setId(call.signalingId) - let hangupProto = try hangupBuilder.build() - + let hangupBuilder = WebRTCProtoHangup.WebRTCProtoHangupBuilder(id: call.signalingId) let dataBuilder = WebRTCProtoData.WebRTCProtoDataBuilder() - dataBuilder.setHangup(hangupProto) + dataBuilder.setHangup(try hangupBuilder.build()) messageData = try dataBuilder.buildSerializedData() } catch { handleFailedCall(failedCall: call, error: CallError.assertionError(description: "\(self.logTag) couldn't build proto in \(#function)")) @@ -1209,11 +1193,8 @@ private class SignalCallData: NSObject { // If the call hasn't started yet, we don't have a data channel to communicate the hang up. Use Signal Service Message. do { - let hangupBuilder = SSKProtoCallMessageHangup.SSKProtoCallMessageHangupBuilder() - hangupBuilder.setId(call.signalingId) - let hangupProto = try hangupBuilder.build() - - let callMessage = OWSOutgoingCallMessage(thread: call.thread, hangupMessage: hangupProto) + let hangupBuilder = SSKProtoCallMessageHangup.SSKProtoCallMessageHangupBuilder(id: call.signalingId) + let callMessage = OWSOutgoingCallMessage(thread: call.thread, hangupMessage: try hangupBuilder.build()) let sendPromise = self.messageSender.sendPromise(message: callMessage).then { Logger.debug("\(self.logTag) successfully sent hangup call message to \(call.thread.contactIdentifier())") }.catch { error in @@ -1704,13 +1685,10 @@ private class SignalCallData: NSObject { var messageData: Data do { - let videoStreamingStatusBuilder = WebRTCProtoVideoStreamingStatus.WebRTCProtoVideoStreamingStatusBuilder() - videoStreamingStatusBuilder.setId(call.signalingId) + let videoStreamingStatusBuilder = WebRTCProtoVideoStreamingStatus.WebRTCProtoVideoStreamingStatusBuilder(id: call.signalingId) videoStreamingStatusBuilder.setEnabled(shouldHaveLocalVideoTrack) - let videoStreamingStatusProto = try videoStreamingStatusBuilder.build() - let dataBuilder = WebRTCProtoData.WebRTCProtoDataBuilder() - dataBuilder.setVideoStreamingStatus(videoStreamingStatusProto) + dataBuilder.setVideoStreamingStatus(try videoStreamingStatusBuilder.build()) messageData = try dataBuilder.buildSerializedData() } catch { Logger.error("\(self.logTag) couldn't build proto in \(#function)") diff --git a/Signal/src/util/OWSBackupExportJob.m b/Signal/src/util/OWSBackupExportJob.m index ac31d09f4..c4968fa00 100644 --- a/Signal/src/util/OWSBackupExportJob.m +++ b/Signal/src/util/OWSBackupExportJob.m @@ -126,9 +126,7 @@ NS_ASSUME_NONNULL_BEGIN } SignalIOSProtoBackupSnapshotBackupEntityBuilder *entityBuilder = - [SignalIOSProtoBackupSnapshotBackupEntityBuilder new]; - [entityBuilder setType:entityType]; - [entityBuilder setEntityData:data]; + [[SignalIOSProtoBackupSnapshotBackupEntityBuilder alloc] initWithType:entityType entityData:data]; NSError *error; SignalIOSProtoBackupSnapshotBackupEntity *_Nullable entity = [entityBuilder buildAndReturnError:&error]; diff --git a/SignalServiceKit/src/Devices/OWSProvisioningMessage.m b/SignalServiceKit/src/Devices/OWSProvisioningMessage.m index bbd3787d3..5d690f374 100644 --- a/SignalServiceKit/src/Devices/OWSProvisioningMessage.m +++ b/SignalServiceKit/src/Devices/OWSProvisioningMessage.m @@ -51,14 +51,14 @@ NS_ASSUME_NONNULL_BEGIN - (nullable NSData *)buildEncryptedMessageBody { - ProvisioningProtoProvisionMessageBuilder *messageBuilder = [ProvisioningProtoProvisionMessageBuilder new]; - messageBuilder.identityKeyPublic = self.myPublicKey; - messageBuilder.identityKeyPrivate = self.myPrivateKey; - messageBuilder.number = self.accountIdentifier; - messageBuilder.provisioningCode = self.provisioningCode; - messageBuilder.userAgent = @"OWI"; - messageBuilder.readReceipts = self.areReadReceiptsEnabled; - messageBuilder.profileKey = self.profileKey; + ProvisioningProtoProvisionMessageBuilder *messageBuilder = + [[ProvisioningProtoProvisionMessageBuilder alloc] initWithIdentityKeyPublic:self.myPublicKey + identityKeyPrivate:self.myPrivateKey + number:self.accountIdentifier + provisioningCode:self.provisioningCode + userAgent:@"OWI" + profileKey:self.profileKey + readReceipts:self.areReadReceiptsEnabled]; NSError *error; NSData *_Nullable plainTextProvisionMessage = [messageBuilder buildSerializedDataAndReturnError:&error]; @@ -74,10 +74,10 @@ NS_ASSUME_NONNULL_BEGIN return nil; } - ProvisioningProtoProvisionEnvelopeBuilder *envelopeBuilder = [ProvisioningProtoProvisionEnvelopeBuilder new]; // Note that this is a one-time-use *cipher* public key, not our Signal *identity* public key - envelopeBuilder.publicKey = [cipher.ourPublicKey prependKeyType]; - envelopeBuilder.body = encryptedProvisionMessage; + ProvisioningProtoProvisionEnvelopeBuilder *envelopeBuilder = + [[ProvisioningProtoProvisionEnvelopeBuilder alloc] initWithPublicKey:[cipher.ourPublicKey prependKeyType] + body:encryptedProvisionMessage]; NSData *_Nullable envelopeData = [envelopeBuilder buildSerializedDataAndReturnError:&error]; if (!envelopeData || error) { diff --git a/SignalServiceKit/src/Devices/OWSReadReceiptsForLinkedDevicesMessage.m b/SignalServiceKit/src/Devices/OWSReadReceiptsForLinkedDevicesMessage.m index 5be2702e1..19bdf6eba 100644 --- a/SignalServiceKit/src/Devices/OWSReadReceiptsForLinkedDevicesMessage.m +++ b/SignalServiceKit/src/Devices/OWSReadReceiptsForLinkedDevicesMessage.m @@ -38,9 +38,8 @@ NS_ASSUME_NONNULL_BEGIN SSKProtoSyncMessageBuilder *syncMessageBuilder = [SSKProtoSyncMessageBuilder new]; for (OWSLinkedDeviceReadReceipt *readReceipt in self.readReceipts) { SSKProtoSyncMessageReadBuilder *readProtoBuilder = - [SSKProtoSyncMessageReadBuilder new]; - [readProtoBuilder setSender:readReceipt.senderId]; - [readProtoBuilder setTimestamp:readReceipt.messageIdTimestamp]; + [[SSKProtoSyncMessageReadBuilder alloc] initWithSender:readReceipt.senderId + timestamp:readReceipt.messageIdTimestamp]; NSError *error; SSKProtoSyncMessageRead *_Nullable readProto = [readProtoBuilder buildAndReturnError:&error]; diff --git a/SignalServiceKit/src/Devices/OWSReadReceiptsForSenderMessage.m b/SignalServiceKit/src/Devices/OWSReadReceiptsForSenderMessage.m index 8e06e1c87..767d2de06 100644 --- a/SignalServiceKit/src/Devices/OWSReadReceiptsForSenderMessage.m +++ b/SignalServiceKit/src/Devices/OWSReadReceiptsForSenderMessage.m @@ -79,8 +79,8 @@ NS_ASSUME_NONNULL_BEGIN - (nullable SSKProtoReceiptMessage *)buildReceiptMessage:(NSString *)recipientId { SSKProtoReceiptMessageBuilder *builder = [SSKProtoReceiptMessageBuilder new]; - [builder setType:SSKProtoReceiptMessageTypeRead]; + OWSAssert(self.messageTimestamps.count > 0); for (NSNumber *messageTimestamp in self.messageTimestamps) { [builder addTimestamp:[messageTimestamp unsignedLongLongValue]]; diff --git a/SignalServiceKit/src/Messages/DeviceSyncing/OWSSyncGroupsRequestMessage.m b/SignalServiceKit/src/Messages/DeviceSyncing/OWSSyncGroupsRequestMessage.m index f51b4f040..291a260e3 100644 --- a/SignalServiceKit/src/Messages/DeviceSyncing/OWSSyncGroupsRequestMessage.m +++ b/SignalServiceKit/src/Messages/DeviceSyncing/OWSSyncGroupsRequestMessage.m @@ -59,9 +59,8 @@ NS_ASSUME_NONNULL_BEGIN - (nullable SSKProtoDataMessageBuilder *)dataMessageBuilder { - SSKProtoGroupContextBuilder *groupContextBuilder = [SSKProtoGroupContextBuilder new]; - [groupContextBuilder setType:SSKProtoGroupContextTypeRequestInfo]; - [groupContextBuilder setId:self.groupId]; + SSKProtoGroupContextBuilder *groupContextBuilder = + [[SSKProtoGroupContextBuilder alloc] initWithId:self.groupId type:SSKProtoGroupContextTypeRequestInfo]; NSError *error; SSKProtoGroupContext *_Nullable groupContextProto = [groupContextBuilder buildAndReturnError:&error]; diff --git a/SignalServiceKit/src/Network/WebSockets/TSSocketManager.m b/SignalServiceKit/src/Network/WebSockets/TSSocketManager.m index 6eebdf96f..f527c08f4 100644 --- a/SignalServiceKit/src/Network/WebSockets/TSSocketManager.m +++ b/SignalServiceKit/src/Network/WebSockets/TSSocketManager.m @@ -491,10 +491,10 @@ NSString *const kNSNotification_SocketManagerStateDidChange = @"kNSNotification_ } } - WebSocketProtoWebSocketRequestMessageBuilder *requestBuilder = [WebSocketProtoWebSocketRequestMessageBuilder new]; - [requestBuilder setRequestID:socketMessage.requestId]; - [requestBuilder setVerb:request.HTTPMethod]; - [requestBuilder setPath:requestPath]; + WebSocketProtoWebSocketRequestMessageBuilder *requestBuilder = + [[WebSocketProtoWebSocketRequestMessageBuilder alloc] initWithVerb:request.HTTPMethod + path:requestPath + requestID:socketMessage.requestId]; if (jsonData) { // TODO: Do we need body & headers for requests with no parameters? [requestBuilder setBody:jsonData]; @@ -780,10 +780,8 @@ NSString *const kNSNotification_SocketManagerStateDidChange = @"kNSNotification_ NSError *error; WebSocketProtoWebSocketResponseMessageBuilder *responseBuilder = - [WebSocketProtoWebSocketResponseMessageBuilder new]; - [responseBuilder setStatus:200]; + [[WebSocketProtoWebSocketResponseMessageBuilder alloc] initWithRequestID:request.requestID status:200]; [responseBuilder setMessage:@"OK"]; - [responseBuilder setRequestID:request.requestID]; WebSocketProtoWebSocketResponseMessage *_Nullable response = [responseBuilder buildAndReturnError:&error]; if (!response || error) { OWSFail(@"%@ could not build proto: %@", self.logTag, error); diff --git a/SignalServiceKit/src/Protos/Generated/FingerprintProto.swift b/SignalServiceKit/src/Protos/Generated/FingerprintProto.swift index a77eaf179..fbdbcbe53 100644 --- a/SignalServiceKit/src/Protos/Generated/FingerprintProto.swift +++ b/SignalServiceKit/src/Protos/Generated/FingerprintProto.swift @@ -8,7 +8,6 @@ import Foundation public enum FingerprintProtoError: Error { case invalidProtobuf(description: String) - case unsafeProtobuf(description: String) } // MARK: - FingerprintProtoLogicalFingerprint @@ -23,6 +22,13 @@ public enum FingerprintProtoError: Error { @objc public override init() {} + // Initializer for required fields + @objc public init(identityData: Data) { + super.init() + + setIdentityData(identityData) + } + @objc public func setIdentityData(_ valueParam: Data) { proto.identityData = valueParam } @@ -102,6 +108,15 @@ public enum FingerprintProtoError: Error { @objc public override init() {} + // Initializer for required fields + @objc public init(version: UInt32, localFingerprint: FingerprintProtoLogicalFingerprint, remoteFingerprint: FingerprintProtoLogicalFingerprint) { + super.init() + + setVersion(version) + setLocalFingerprint(localFingerprint) + setRemoteFingerprint(remoteFingerprint) + } + @objc public func setVersion(_ valueParam: UInt32) { proto.version = valueParam } diff --git a/SignalServiceKit/src/Protos/Generated/ProvisioningProto.swift b/SignalServiceKit/src/Protos/Generated/ProvisioningProto.swift index ecee3b145..f0c28b044 100644 --- a/SignalServiceKit/src/Protos/Generated/ProvisioningProto.swift +++ b/SignalServiceKit/src/Protos/Generated/ProvisioningProto.swift @@ -8,7 +8,6 @@ import Foundation public enum ProvisioningProtoError: Error { case invalidProtobuf(description: String) - case unsafeProtobuf(description: String) } // MARK: - ProvisioningProtoProvisionEnvelope @@ -23,6 +22,14 @@ public enum ProvisioningProtoError: Error { @objc public override init() {} + // Initializer for required fields + @objc public init(publicKey: Data, body: Data) { + super.init() + + setPublicKey(publicKey) + setBody(body) + } + @objc public func setPublicKey(_ valueParam: Data) { proto.publicKey = valueParam } @@ -116,6 +123,19 @@ public enum ProvisioningProtoError: Error { @objc public override init() {} + // Initializer for required fields + @objc public init(identityKeyPublic: Data, identityKeyPrivate: Data, number: String, provisioningCode: String, userAgent: String, profileKey: Data, readReceipts: Bool) { + super.init() + + setIdentityKeyPublic(identityKeyPublic) + setIdentityKeyPrivate(identityKeyPrivate) + setNumber(number) + setProvisioningCode(provisioningCode) + setUserAgent(userAgent) + setProfileKey(profileKey) + setReadReceipts(readReceipts) + } + @objc public func setIdentityKeyPublic(_ valueParam: Data) { proto.identityKeyPublic = valueParam } diff --git a/SignalServiceKit/src/Protos/Generated/SSKProto.swift b/SignalServiceKit/src/Protos/Generated/SSKProto.swift index 86b57c84e..9a3ace489 100644 --- a/SignalServiceKit/src/Protos/Generated/SSKProto.swift +++ b/SignalServiceKit/src/Protos/Generated/SSKProto.swift @@ -8,7 +8,6 @@ import Foundation public enum SSKProtoError: Error { case invalidProtobuf(description: String) - case unsafeProtobuf(description: String) } // MARK: - SSKProtoEnvelope @@ -53,6 +52,16 @@ public enum SSKProtoError: Error { @objc public override init() {} + // Initializer for required fields + @objc public init(type: SSKProtoEnvelopeType, source: String, sourceDevice: UInt32, timestamp: UInt64) { + super.init() + + setType(type) + setSource(source) + setSourceDevice(sourceDevice) + setTimestamp(timestamp) + } + @objc public func setType(_ valueParam: SSKProtoEnvelopeType) { proto.type = SSKProtoEnvelopeTypeUnwrap(valueParam) } @@ -366,6 +375,14 @@ public enum SSKProtoError: Error { @objc public override init() {} + // Initializer for required fields + @objc public init(id: UInt64, sessionDescription: String) { + super.init() + + setId(id) + setSessionDescription(sessionDescription) + } + @objc public func setId(_ valueParam: UInt64) { proto.id = valueParam } @@ -459,6 +476,14 @@ public enum SSKProtoError: Error { @objc public override init() {} + // Initializer for required fields + @objc public init(id: UInt64, sessionDescription: String) { + super.init() + + setId(id) + setSessionDescription(sessionDescription) + } + @objc public func setId(_ valueParam: UInt64) { proto.id = valueParam } @@ -552,6 +577,16 @@ public enum SSKProtoError: Error { @objc public override init() {} + // Initializer for required fields + @objc public init(id: UInt64, sdpMid: String, sdpMlineIndex: UInt32, sdp: String) { + super.init() + + setId(id) + setSdpMid(sdpMid) + setSdpMlineIndex(sdpMlineIndex) + setSdp(sdp) + } + @objc public func setId(_ valueParam: UInt64) { proto.id = valueParam } @@ -673,6 +708,13 @@ public enum SSKProtoError: Error { @objc public override init() {} + // Initializer for required fields + @objc public init(id: UInt64) { + super.init() + + setId(id) + } + @objc public func setId(_ valueParam: UInt64) { proto.id = valueParam } @@ -752,6 +794,13 @@ public enum SSKProtoError: Error { @objc public override init() {} + // Initializer for required fields + @objc public init(id: UInt64) { + super.init() + + setId(id) + } + @objc public func setId(_ valueParam: UInt64) { proto.id = valueParam } @@ -1135,6 +1184,14 @@ public enum SSKProtoError: Error { @objc public override init() {} + // Initializer for required fields + @objc public init(id: UInt64, author: String) { + super.init() + + setId(id) + setAuthor(author) + } + @objc public func setId(_ valueParam: UInt64) { proto.id = valueParam } @@ -2463,6 +2520,13 @@ public enum SSKProtoError: Error { @objc public override init() {} + // Initializer for required fields + @objc public init(type: SSKProtoReceiptMessageType) { + super.init() + + setType(type) + } + @objc public func setType(_ valueParam: SSKProtoReceiptMessageType) { proto.type = SSKProtoReceiptMessageTypeUnwrap(valueParam) } @@ -2580,6 +2644,13 @@ public enum SSKProtoError: Error { @objc public override init() {} + // Initializer for required fields + @objc public init(destination: String) { + super.init() + + setDestination(destination) + } + @objc public func setDestination(_ valueParam: String) { proto.destination = valueParam } @@ -2816,6 +2887,13 @@ public enum SSKProtoError: Error { @objc public override init() {} + // Initializer for required fields + @objc public init(blob: SSKProtoAttachmentPointer) { + super.init() + + setBlob(blob) + } + @objc public func setBlob(_ valueParam: SSKProtoAttachmentPointer) { proto.blob = valueParam.proto } @@ -3097,6 +3175,13 @@ public enum SSKProtoError: Error { @objc public override init() {} + // Initializer for required fields + @objc public init(type: SSKProtoSyncMessageRequestType) { + super.init() + + setType(type) + } + @objc public func setType(_ valueParam: SSKProtoSyncMessageRequestType) { proto.type = SSKProtoSyncMessageRequestTypeUnwrap(valueParam) } @@ -3176,6 +3261,14 @@ public enum SSKProtoError: Error { @objc public override init() {} + // Initializer for required fields + @objc public init(sender: String, timestamp: UInt64) { + super.init() + + setSender(sender) + setTimestamp(timestamp) + } + @objc public func setSender(_ valueParam: String) { proto.sender = valueParam } @@ -3579,6 +3672,13 @@ public enum SSKProtoError: Error { @objc public override init() {} + // Initializer for required fields + @objc public init(id: UInt64) { + super.init() + + setId(id) + } + @objc public func setId(_ valueParam: UInt64) { proto.id = valueParam } @@ -3802,6 +3902,14 @@ public enum SSKProtoError: Error { @objc public override init() {} + // Initializer for required fields + @objc public init(id: Data, type: SSKProtoGroupContextType) { + super.init() + + setId(id) + setType(type) + } + @objc public func setId(_ valueParam: Data) { proto.id = valueParam } @@ -4030,6 +4138,13 @@ public enum SSKProtoError: Error { @objc public override init() {} + // Initializer for required fields + @objc public init(number: String) { + super.init() + + setNumber(number) + } + @objc public func setNumber(_ valueParam: String) { proto.number = valueParam } @@ -4297,6 +4412,13 @@ public enum SSKProtoError: Error { @objc public override init() {} + // Initializer for required fields + @objc public init(id: Data) { + super.init() + + setId(id) + } + @objc public func setId(_ valueParam: Data) { proto.id = valueParam } diff --git a/SignalServiceKit/src/Protos/Generated/SignalIOSProto.swift b/SignalServiceKit/src/Protos/Generated/SignalIOSProto.swift index cbc0432f9..36ae558e8 100644 --- a/SignalServiceKit/src/Protos/Generated/SignalIOSProto.swift +++ b/SignalServiceKit/src/Protos/Generated/SignalIOSProto.swift @@ -8,7 +8,6 @@ import Foundation public enum SignalIOSProtoError: Error { case invalidProtobuf(description: String) - case unsafeProtobuf(description: String) } // MARK: - SignalIOSProtoBackupSnapshotBackupEntity @@ -53,6 +52,14 @@ public enum SignalIOSProtoError: Error { @objc public override init() {} + // Initializer for required fields + @objc public init(type: SignalIOSProtoBackupSnapshotBackupEntityType, entityData: Data) { + super.init() + + setType(type) + setEntityData(entityData) + } + @objc public func setType(_ valueParam: SignalIOSProtoBackupSnapshotBackupEntityType) { proto.type = SignalIOSProtoBackupSnapshotBackupEntityTypeUnwrap(valueParam) } diff --git a/SignalServiceKit/src/Protos/Generated/WebSocketProto.swift b/SignalServiceKit/src/Protos/Generated/WebSocketProto.swift index 8b26aeae9..63b09d878 100644 --- a/SignalServiceKit/src/Protos/Generated/WebSocketProto.swift +++ b/SignalServiceKit/src/Protos/Generated/WebSocketProto.swift @@ -8,7 +8,6 @@ import Foundation public enum WebSocketProtoError: Error { case invalidProtobuf(description: String) - case unsafeProtobuf(description: String) } // MARK: - WebSocketProtoWebSocketRequestMessage @@ -23,6 +22,15 @@ public enum WebSocketProtoError: Error { @objc public override init() {} + // Initializer for required fields + @objc public init(verb: String, path: String, requestID: UInt64) { + super.init() + + setVerb(verb) + setPath(path) + setRequestID(requestID) + } + @objc public func setVerb(_ valueParam: String) { proto.verb = valueParam } @@ -158,6 +166,14 @@ public enum WebSocketProtoError: Error { @objc public override init() {} + // Initializer for required fields + @objc public init(requestID: UInt64, status: UInt32) { + super.init() + + setRequestID(requestID) + setStatus(status) + } + @objc public func setRequestID(_ valueParam: UInt64) { proto.requestID = valueParam } @@ -317,6 +333,13 @@ public enum WebSocketProtoError: Error { @objc public override init() {} + // Initializer for required fields + @objc public init(type: WebSocketProtoWebSocketMessageType) { + super.init() + + setType(type) + } + @objc public func setType(_ valueParam: WebSocketProtoWebSocketMessageType) { proto.type = WebSocketProtoWebSocketMessageTypeUnwrap(valueParam) } diff --git a/SignalServiceKit/src/Security/OWSFingerprint.m b/SignalServiceKit/src/Security/OWSFingerprint.m index 4db687566..95f05e5c1 100644 --- a/SignalServiceKit/src/Security/OWSFingerprint.m +++ b/SignalServiceKit/src/Security/OWSFingerprint.m @@ -276,11 +276,6 @@ static uint32_t const OWSFingerprintDefaultHashIterations = 5200; - (nullable UIImage *)image { - FingerprintProtoLogicalFingerprintsBuilder *logicalFingerprintsBuilder = - [FingerprintProtoLogicalFingerprintsBuilder new]; - - logicalFingerprintsBuilder.version = OWSFingerprintScannableFormatVersion; - FingerprintProtoLogicalFingerprintBuilder *remoteFingerprintBuilder = [FingerprintProtoLogicalFingerprintBuilder new]; remoteFingerprintBuilder.identityData = [self scannableData:self.theirFingerprintData]; @@ -291,7 +286,6 @@ static uint32_t const OWSFingerprintDefaultHashIterations = 5200; OWSFail(@"%@ could not build proto: %@", self.logTag, error); return nil; } - logicalFingerprintsBuilder.remoteFingerprint = remoteFingerprint; FingerprintProtoLogicalFingerprintBuilder *localFingerprintBuilder = [FingerprintProtoLogicalFingerprintBuilder new]; @@ -302,7 +296,11 @@ static uint32_t const OWSFingerprintDefaultHashIterations = 5200; OWSFail(@"%@ could not build proto: %@", self.logTag, error); return nil; } - logicalFingerprintsBuilder.localFingerprint = localFingerprint; + + FingerprintProtoLogicalFingerprintsBuilder *logicalFingerprintsBuilder = + [[FingerprintProtoLogicalFingerprintsBuilder alloc] initWithVersion:OWSFingerprintScannableFormatVersion + localFingerprint:localFingerprint + remoteFingerprint:remoteFingerprint]; // Build ByteMode QR (Latin-1 encodable data) NSData *_Nullable fingerprintData = [logicalFingerprintsBuilder buildSerializedDataAndReturnError:&error];