mirror of https://github.com/oxen-io/session-ios
				
				
				
			
			You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
	
	
		
			72 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Swift
		
	
		
		
			
		
	
	
			72 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Swift
		
	
| 
											5 years ago
										 | // | ||
|  | //  Copyright (c) 2018 Open Whisper Systems. All rights reserved. | ||
|  | // | ||
|  | 
 | ||
|  | import Foundation | ||
|  | 
 | ||
|  | @objc public enum SMKMessageType: Int { | ||
|  |     case whisper | ||
|  |     case prekey | ||
|  |     case fallback | ||
|  | } | ||
|  | 
 | ||
|  | // See: | ||
|  | // https://github.com/signalapp/libsignal-metadata-java/blob/0cbbbf23eaf9f46fdf2d9463f3dfab2fb3271292/java/src/main/java/org/signal/libsignal/metadata/protocol/UnidentifiedSenderMessageContent.java | ||
|  | @objc public class SMKUnidentifiedSenderMessageContent: NSObject { | ||
|  | 
 | ||
|  |     @objc public let messageType: SMKMessageType | ||
|  |     @objc public let senderCertificate: SMKSenderCertificate | ||
|  |     @objc public let contentData: Data | ||
|  | 
 | ||
|  |     @objc public init(messageType: SMKMessageType, | ||
|  |                       senderCertificate: SMKSenderCertificate, | ||
|  |                       contentData: Data) { | ||
|  |         self.messageType = messageType | ||
|  |         self.senderCertificate = senderCertificate | ||
|  |         self.contentData = contentData | ||
|  |     } | ||
|  | 
 | ||
|  |     @objc public class func parse(data: Data) throws -> SMKUnidentifiedSenderMessageContent { | ||
|  | 
 | ||
|  |         let proto = try SMKProtoUnidentifiedSenderMessageMessage.parseData(data) | ||
|  | 
 | ||
|  |         // TODO: Should we have a default case in our switches? Probably. | ||
|  |         var messageType: SMKMessageType | ||
|  |         switch (proto.type) { | ||
|  |         case .prekeyMessage: | ||
|  |             messageType = .prekey | ||
|  |         case .message: | ||
|  |             messageType = .whisper | ||
|  |         case .fallbackMessage: | ||
|  |             messageType = .fallback | ||
|  |         } | ||
|  | 
 | ||
|  |         let contentData = proto.content | ||
|  |         let senderCertificateProto = proto.senderCertificate | ||
|  |         let senderCertificate = try SMKSenderCertificate.parse(proto: senderCertificateProto) | ||
|  | 
 | ||
|  |         return SMKUnidentifiedSenderMessageContent(messageType: messageType, senderCertificate: senderCertificate, contentData: contentData) | ||
|  |     } | ||
|  | 
 | ||
|  |     @objc public func toProto() throws -> SMKProtoUnidentifiedSenderMessageMessage { | ||
|  |         let builderType: SMKProtoUnidentifiedSenderMessageMessage.SMKProtoUnidentifiedSenderMessageMessageType | ||
|  |         switch messageType { | ||
|  |         case .whisper: | ||
|  |             builderType = .message | ||
|  |         case .prekey: | ||
|  |             builderType = .prekeyMessage | ||
|  |         case .fallback: | ||
|  |             builderType = .fallbackMessage | ||
|  |         } | ||
|  | 
 | ||
|  |         let builder = SMKProtoUnidentifiedSenderMessageMessage.builder(type: builderType, | ||
|  |                                                                        senderCertificate: try senderCertificate.toProto(), | ||
|  |                                                                        content: contentData) | ||
|  |         return try builder.build() | ||
|  |     } | ||
|  | 
 | ||
|  |     @objc public func serialized() throws -> Data { | ||
|  |         return try toProto().serializedData() | ||
|  |     } | ||
|  | } |