diff --git a/SessionMessagingKit/Messages/Control Message/ClosedGroupUpdate.swift b/SessionMessagingKit/Messages/Control Message/ClosedGroupUpdate.swift new file mode 100644 index 000000000..f5d863130 --- /dev/null +++ b/SessionMessagingKit/Messages/Control Message/ClosedGroupUpdate.swift @@ -0,0 +1,5 @@ + +@objc(SNClosedGroupUpdate) +public final class ClosedGroupUpdate : ControlMessage { + +} diff --git a/SessionMessagingKit/ControlMessage.swift b/SessionMessagingKit/Messages/Control Message/ControlMessage.swift similarity index 60% rename from SessionMessagingKit/ControlMessage.swift rename to SessionMessagingKit/Messages/Control Message/ControlMessage.swift index cfc3d1560..46c1085c2 100644 --- a/SessionMessagingKit/ControlMessage.swift +++ b/SessionMessagingKit/Messages/Control Message/ControlMessage.swift @@ -4,6 +4,10 @@ import SessionProtocolKit public class ControlMessage : Message { public enum Kind { + case readReceipt case sessionRequest(preKeyBundle: PreKeyBundle) + case typingIndicator + case closedGroupUpdate + case expirationUpdate } } diff --git a/SessionMessagingKit/Messages/Control Message/ExpirationTimerUpdate.swift b/SessionMessagingKit/Messages/Control Message/ExpirationTimerUpdate.swift new file mode 100644 index 000000000..b4b8c26f4 --- /dev/null +++ b/SessionMessagingKit/Messages/Control Message/ExpirationTimerUpdate.swift @@ -0,0 +1,5 @@ + +@objc(SNExpirationTimerUpdate) +public final class ExpirationTimerUpdate : ControlMessage { + +} diff --git a/SessionMessagingKit/Messages/Control Message/ReadReceipt.swift b/SessionMessagingKit/Messages/Control Message/ReadReceipt.swift new file mode 100644 index 000000000..d76f902ab --- /dev/null +++ b/SessionMessagingKit/Messages/Control Message/ReadReceipt.swift @@ -0,0 +1,5 @@ + +@objc(SNReadReceipt) +public final class ReadReceipt : ControlMessage { + +} diff --git a/SessionMessagingKit/Messages/Control Message/SessionRequest.swift b/SessionMessagingKit/Messages/Control Message/SessionRequest.swift new file mode 100644 index 000000000..bb95b6f1c --- /dev/null +++ b/SessionMessagingKit/Messages/Control Message/SessionRequest.swift @@ -0,0 +1,5 @@ + +@objc(SNSessionRequest) +public final class SessionRequest : ControlMessage { + +} diff --git a/SessionMessagingKit/Messages/Control Message/TypingIndicator.swift b/SessionMessagingKit/Messages/Control Message/TypingIndicator.swift new file mode 100644 index 000000000..58687af55 --- /dev/null +++ b/SessionMessagingKit/Messages/Control Message/TypingIndicator.swift @@ -0,0 +1,5 @@ + +@objc(SNTypingIndicator) +public final class TypingIndicator : ControlMessage { + +} diff --git a/SessionMessagingKit/Message.swift b/SessionMessagingKit/Messages/Message.swift similarity index 100% rename from SessionMessagingKit/Message.swift rename to SessionMessagingKit/Messages/Message.swift diff --git a/SessionMessagingKit/VisibleMessage+Contact.swift b/SessionMessagingKit/Messages/Visible Message/VisibleMessage+Contact.swift similarity index 100% rename from SessionMessagingKit/VisibleMessage+Contact.swift rename to SessionMessagingKit/Messages/Visible Message/VisibleMessage+Contact.swift diff --git a/SessionMessagingKit/VisibleMessage+LinkPreview.swift b/SessionMessagingKit/Messages/Visible Message/VisibleMessage+LinkPreview.swift similarity index 100% rename from SessionMessagingKit/VisibleMessage+LinkPreview.swift rename to SessionMessagingKit/Messages/Visible Message/VisibleMessage+LinkPreview.swift diff --git a/SessionMessagingKit/Messages/Visible Message/VisibleMessage+Profile.swift b/SessionMessagingKit/Messages/Visible Message/VisibleMessage+Profile.swift new file mode 100644 index 000000000..618b4c4ea --- /dev/null +++ b/SessionMessagingKit/Messages/Visible Message/VisibleMessage+Profile.swift @@ -0,0 +1,15 @@ + +public extension VisibleMessage { + + @objc(SNProfile) + class Profile : NSObject, NSCoding { + + public required init?(coder: NSCoder) { + fatalError("Not implemented.") + } + + public func encode(with coder: NSCoder) { + fatalError("Not implemented.") + } + } +} diff --git a/SessionMessagingKit/VisibleMessage+Quote.swift b/SessionMessagingKit/Messages/Visible Message/VisibleMessage+Quote.swift similarity index 100% rename from SessionMessagingKit/VisibleMessage+Quote.swift rename to SessionMessagingKit/Messages/Visible Message/VisibleMessage+Quote.swift diff --git a/SessionMessagingKit/VisibleMessage.swift b/SessionMessagingKit/Messages/Visible Message/VisibleMessage.swift similarity index 94% rename from SessionMessagingKit/VisibleMessage.swift rename to SessionMessagingKit/Messages/Visible Message/VisibleMessage.swift index d30c4427a..9181d44a2 100644 --- a/SessionMessagingKit/VisibleMessage.swift +++ b/SessionMessagingKit/Messages/Visible Message/VisibleMessage.swift @@ -6,6 +6,7 @@ public final class VisibleMessage : Message { public var quote: Quote? public var linkPreview: LinkPreview? public var contact: Contact? + public var profile: Profile? public override class func fromProto(_ proto: SNProtoContent) -> VisibleMessage? { guard let data = proto.dataMessage, diff --git a/SessionMessagingKit/Pipelines/ReceivingPipeline.swift b/SessionMessagingKit/Pipelines/ReceivingPipeline.swift new file mode 100644 index 000000000..4a26617ee --- /dev/null +++ b/SessionMessagingKit/Pipelines/ReceivingPipeline.swift @@ -0,0 +1,8 @@ + +public enum ReceivingPipeline { + + // 1. Decrypt + // 2. Convert binary to proto + // 3. Convert proto to message + // 4. Handle message +} diff --git a/SessionMessagingKit/Pipelines/SendingPipeline.swift b/SessionMessagingKit/Pipelines/SendingPipeline.swift new file mode 100644 index 000000000..c3f3961e9 --- /dev/null +++ b/SessionMessagingKit/Pipelines/SendingPipeline.swift @@ -0,0 +1,8 @@ + +public enum SendingPipeline { + + // 1. Convert message to proto + // 2. Convert proto to binary + // 3. Encrypt + // 4. Send to snode +} diff --git a/SessionSnodeKit/Utilities/AESGCM.swift b/SessionSnodeKit/Utilities/AESGCM.swift index a5359a308..1007f5c96 100644 --- a/SessionSnodeKit/Utilities/AESGCM.swift +++ b/SessionSnodeKit/Utilities/AESGCM.swift @@ -1,5 +1,6 @@ import CryptoSwift import Curve25519Kit +import SessionUtilities internal enum AESGCM { internal static let gcmTagSize: UInt = 16 diff --git a/Signal.xcodeproj/project.pbxproj b/Signal.xcodeproj/project.pbxproj index f043a61f5..f057aa636 100644 --- a/Signal.xcodeproj/project.pbxproj +++ b/Signal.xcodeproj/project.pbxproj @@ -567,6 +567,14 @@ B90418E6183E9DD40038554A /* DateUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = B90418E5183E9DD40038554A /* DateUtil.m */; }; B9EB5ABD1884C002007CBB57 /* MessageUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B9EB5ABC1884C002007CBB57 /* MessageUI.framework */; }; BFF3FB9730634F37D25903F4 /* Pods_Signal.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D17BB5C25D615AB49813100C /* Pods_Signal.framework */; }; + C300A5B22554AF9800555489 /* VisibleMessage+Profile.swift in Sources */ = {isa = PBXBuildFile; fileRef = C300A5B12554AF9800555489 /* VisibleMessage+Profile.swift */; }; + C300A5BD2554B00D00555489 /* ReadReceipt.swift in Sources */ = {isa = PBXBuildFile; fileRef = C300A5BC2554B00D00555489 /* ReadReceipt.swift */; }; + C300A5C92554B04E00555489 /* SessionRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = C300A5C82554B04E00555489 /* SessionRequest.swift */; }; + C300A5D32554B05A00555489 /* TypingIndicator.swift in Sources */ = {isa = PBXBuildFile; fileRef = C300A5D22554B05A00555489 /* TypingIndicator.swift */; }; + C300A5DD2554B06600555489 /* ClosedGroupUpdate.swift in Sources */ = {isa = PBXBuildFile; fileRef = C300A5DC2554B06600555489 /* ClosedGroupUpdate.swift */; }; + C300A5E72554B07300555489 /* ExpirationTimerUpdate.swift in Sources */ = {isa = PBXBuildFile; fileRef = C300A5E62554B07300555489 /* ExpirationTimerUpdate.swift */; }; + C300A5F22554B09800555489 /* SendingPipeline.swift in Sources */ = {isa = PBXBuildFile; fileRef = C300A5F12554B09800555489 /* SendingPipeline.swift */; }; + C300A5FC2554B0A000555489 /* ReceivingPipeline.swift in Sources */ = {isa = PBXBuildFile; fileRef = C300A5FB2554B0A000555489 /* ReceivingPipeline.swift */; }; C31A6C5A247F214E001123EF /* UIView+Glow.swift in Sources */ = {isa = PBXBuildFile; fileRef = C31A6C59247F214E001123EF /* UIView+Glow.swift */; }; C31A6C5C247F2CF3001123EF /* CGRect+Utilities.swift in Sources */ = {isa = PBXBuildFile; fileRef = C31A6C5B247F2CF3001123EF /* CGRect+Utilities.swift */; }; C31D1DD325216101005D4DA8 /* UIView+Utilities.swift in Sources */ = {isa = PBXBuildFile; fileRef = C31D1DD225216101005D4DA8 /* UIView+Utilities.swift */; }; @@ -1548,6 +1556,14 @@ B97940261832BD2400BD66CB /* UIUtil.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UIUtil.m; sourceTree = ""; }; B9EB5ABC1884C002007CBB57 /* MessageUI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MessageUI.framework; path = System/Library/Frameworks/MessageUI.framework; sourceTree = SDKROOT; }; C022DD8E076866C6241610BF /* Pods-SessionSnodeKit.app store release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SessionSnodeKit.app store release.xcconfig"; path = "Pods/Target Support Files/Pods-SessionSnodeKit/Pods-SessionSnodeKit.app store release.xcconfig"; sourceTree = ""; }; + C300A5B12554AF9800555489 /* VisibleMessage+Profile.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "VisibleMessage+Profile.swift"; sourceTree = ""; }; + C300A5BC2554B00D00555489 /* ReadReceipt.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReadReceipt.swift; sourceTree = ""; }; + C300A5C82554B04E00555489 /* SessionRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SessionRequest.swift; sourceTree = ""; }; + C300A5D22554B05A00555489 /* TypingIndicator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TypingIndicator.swift; sourceTree = ""; }; + C300A5DC2554B06600555489 /* ClosedGroupUpdate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ClosedGroupUpdate.swift; sourceTree = ""; }; + C300A5E62554B07300555489 /* ExpirationTimerUpdate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExpirationTimerUpdate.swift; sourceTree = ""; }; + C300A5F12554B09800555489 /* SendingPipeline.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SendingPipeline.swift; sourceTree = ""; }; + C300A5FB2554B0A000555489 /* ReceivingPipeline.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReceivingPipeline.swift; sourceTree = ""; }; C31A6C59247F214E001123EF /* UIView+Glow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIView+Glow.swift"; sourceTree = ""; }; C31A6C5B247F2CF3001123EF /* CGRect+Utilities.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "CGRect+Utilities.swift"; sourceTree = ""; }; C31D1DD225216101005D4DA8 /* UIView+Utilities.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIView+Utilities.swift"; sourceTree = ""; }; @@ -1790,8 +1806,8 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - C3C2A6C62553896A00C340D1 /* SessionUtilities.framework in Frameworks */, 9EE44C6B4D4A069B86112387 /* Pods_SessionSnodeKit.framework in Frameworks */, + C3C2A6C62553896A00C340D1 /* SessionUtilities.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1807,9 +1823,9 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 5DF9AB212C6DB1E8BE70EFF6 /* Pods_SessionMessagingKit.framework in Frameworks */, C3C2AAC82553C25300C340D1 /* SessionProtocolKit.framework in Frameworks */, C3C2A70B25539E1E00C340D1 /* SessionSnodeKit.framework in Frameworks */, - 5DF9AB212C6DB1E8BE70EFF6 /* Pods_SessionMessagingKit.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1817,8 +1833,8 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - C3C2AC372553CCE600C340D1 /* SessionUtilities.framework in Frameworks */, A33A4BA9D050805FE156E3ED /* Pods_SessionProtocolKit.framework in Frameworks */, + C3C2AC372553CCE600C340D1 /* SessionUtilities.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -3127,6 +3143,50 @@ path = "View Controllers"; sourceTree = ""; }; + C300A5BB2554AFFB00555489 /* Messages */ = { + isa = PBXGroup; + children = ( + C3C2A74325539EB700C340D1 /* Message.swift */, + C300A5C62554B02D00555489 /* Visible Message */, + C300A5C72554B03900555489 /* Control Message */, + ); + path = Messages; + sourceTree = ""; + }; + C300A5C62554B02D00555489 /* Visible Message */ = { + isa = PBXGroup; + children = ( + C3C2A74C2553A39700C340D1 /* VisibleMessage.swift */, + C3C2A7552553A3AB00C340D1 /* VisibleMessage+Quote.swift */, + C3C2A75E2553A3C500C340D1 /* VisibleMessage+LinkPreview.swift */, + C3C2A7672553A3D900C340D1 /* VisibleMessage+Contact.swift */, + C300A5B12554AF9800555489 /* VisibleMessage+Profile.swift */, + ); + path = "Visible Message"; + sourceTree = ""; + }; + C300A5C72554B03900555489 /* Control Message */ = { + isa = PBXGroup; + children = ( + C3C2A7702553A41E00C340D1 /* ControlMessage.swift */, + C300A5BC2554B00D00555489 /* ReadReceipt.swift */, + C300A5C82554B04E00555489 /* SessionRequest.swift */, + C300A5D22554B05A00555489 /* TypingIndicator.swift */, + C300A5DC2554B06600555489 /* ClosedGroupUpdate.swift */, + C300A5E62554B07300555489 /* ExpirationTimerUpdate.swift */, + ); + path = "Control Message"; + sourceTree = ""; + }; + C300A5F02554B08500555489 /* Pipelines */ = { + isa = PBXGroup; + children = ( + C300A5F12554B09800555489 /* SendingPipeline.swift */, + C300A5FB2554B0A000555489 /* ReceivingPipeline.swift */, + ); + path = Pipelines; + sourceTree = ""; + }; C31F812425258F9C00DD9FD9 /* Database */ = { isa = PBXGroup; children = ( @@ -3245,12 +3305,8 @@ children = ( C3C2A7802553AA6300C340D1 /* Protos */, C3C2A70A25539DF900C340D1 /* Meta */, - C3C2A74325539EB700C340D1 /* Message.swift */, - C3C2A74C2553A39700C340D1 /* VisibleMessage.swift */, - C3C2A7552553A3AB00C340D1 /* VisibleMessage+Quote.swift */, - C3C2A75E2553A3C500C340D1 /* VisibleMessage+LinkPreview.swift */, - C3C2A7672553A3D900C340D1 /* VisibleMessage+Contact.swift */, - C3C2A7702553A41E00C340D1 /* ControlMessage.swift */, + C300A5BB2554AFFB00555489 /* Messages */, + C300A5F02554B08500555489 /* Pipelines */, ); path = SessionMessagingKit; sourceTree = ""; @@ -4803,14 +4859,22 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + C300A5D32554B05A00555489 /* TypingIndicator.swift in Sources */, + C300A5F22554B09800555489 /* SendingPipeline.swift in Sources */, C3C2A74D2553A39700C340D1 /* VisibleMessage.swift in Sources */, C3C2A7562553A3AB00C340D1 /* VisibleMessage+Quote.swift in Sources */, + C300A5FC2554B0A000555489 /* ReceivingPipeline.swift in Sources */, C3C2A7842553AAF300C340D1 /* SNProto.swift in Sources */, C3C2A7682553A3D900C340D1 /* VisibleMessage+Contact.swift in Sources */, C3C2A7852553AAF300C340D1 /* SessionProtos.pb.swift in Sources */, C3C2A7712553A41E00C340D1 /* ControlMessage.swift in Sources */, + C300A5BD2554B00D00555489 /* ReadReceipt.swift in Sources */, + C300A5DD2554B06600555489 /* ClosedGroupUpdate.swift in Sources */, + C300A5E72554B07300555489 /* ExpirationTimerUpdate.swift in Sources */, C3C2A75F2553A3C500C340D1 /* VisibleMessage+LinkPreview.swift in Sources */, C3C2A74425539EB700C340D1 /* Message.swift in Sources */, + C300A5C92554B04E00555489 /* SessionRequest.swift in Sources */, + C300A5B22554AF9800555489 /* VisibleMessage+Profile.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; };