Implement device linking message receiving

pull/55/head
Niels Andriesse 6 years ago
parent 8bdcbc6e40
commit c05c12c7d2

@ -5,10 +5,6 @@ import NVActivityIndicatorView
@objc(LKDeviceLinkingModal) @objc(LKDeviceLinkingModal)
final class DeviceLinkingModal : UIViewController, LokiDeviceLinkingSessionDelegate { final class DeviceLinkingModal : UIViewController, LokiDeviceLinkingSessionDelegate {
private lazy var deviceLinkingSession: LokiDeviceLinkingSession = {
return LokiDeviceLinkingSession(delegate: self)
}()
// MARK: Components // MARK: Components
private lazy var contentView: UIView = { private lazy var contentView: UIView = {
let result = UIView() let result = UIView()
@ -55,7 +51,7 @@ final class DeviceLinkingModal : UIViewController, LokiDeviceLinkingSessionDeleg
override func viewDidLoad() { override func viewDidLoad() {
super.viewDidLoad() super.viewDidLoad()
setUpViewHierarchy() setUpViewHierarchy()
deviceLinkingSession.startListeningForLinkingRequests() LokiDeviceLinkingSession.startListeningForLinkingRequests(with: self)
} }
private func setUpViewHierarchy() { private func setUpViewHierarchy() {
@ -109,7 +105,7 @@ final class DeviceLinkingModal : UIViewController, LokiDeviceLinkingSessionDeleg
} }
@objc private func cancel() { @objc private func cancel() {
deviceLinkingSession.stopListeningForLinkingRequests() LokiDeviceLinkingSession.current?.stopListeningForLinkingRequests()
dismiss(animated: true, completion: nil) dismiss(animated: true, completion: nil)
} }
} }

@ -6,13 +6,18 @@ public final class LokiDeviceLinkingSession : NSObject {
@objc public var isListeningForLinkingRequests = false @objc public var isListeningForLinkingRequests = false
// MARK: Lifecycle // MARK: Lifecycle
@objc public init(delegate: LokiDeviceLinkingSessionDelegate) { @objc public static var current: LokiDeviceLinkingSession?
private init(delegate: LokiDeviceLinkingSessionDelegate) {
self.delegate = delegate self.delegate = delegate
} }
// MARK: Public API // MARK: Public API
@objc public func startListeningForLinkingRequests() { public static func startListeningForLinkingRequests(with delegate: LokiDeviceLinkingSessionDelegate) -> LokiDeviceLinkingSession {
isListeningForLinkingRequests = true let session = LokiDeviceLinkingSession(delegate: delegate)
session.isListeningForLinkingRequests = true
LokiDeviceLinkingSession.current = session
return session
} }
@objc public func processLinkingRequest(from slaveHexEncodedPublicKey: String, with slaveSignature: Data) { @objc public func processLinkingRequest(from slaveHexEncodedPublicKey: String, with slaveSignature: Data) {
@ -25,11 +30,12 @@ public final class LokiDeviceLinkingSession : NSObject {
delegate.requestUserAuthorization(for: deviceLink) delegate.requestUserAuthorization(for: deviceLink)
} }
@objc public func stopListeningForLinkingRequests() { public func stopListeningForLinkingRequests() {
LokiDeviceLinkingSession.current = nil
isListeningForLinkingRequests = false isListeningForLinkingRequests = false
} }
@objc public func authorizeDeviceLink(_ deviceLink: LokiDeviceLink) { public func authorizeDeviceLink(_ deviceLink: LokiDeviceLink) {
// TODO: Send a device link authorized message // TODO: Send a device link authorized message
} }

@ -427,17 +427,27 @@ NS_ASSUME_NONNULL_BEGIN
} }
OWSLogInfo(@"handling content: <Content: %@>", [self descriptionForContent:contentProto]); OWSLogInfo(@"handling content: <Content: %@>", [self descriptionForContent:contentProto]);
// Loki: Handle device linking message
if (contentProto.lokiDeviceLinkingMessage != nil) {
OWSLogInfo(@"[Loki] Received a device linking request from: %@", envelope.source);
NSData *signature = [contentProto.lokiDeviceLinkingMessage.slaveSignature];
if (signature == nil) {
OWSFailDebug(@"Received a device linking request without an attached slave signature.");
}
[LKDeviceLinkingSession.current processLinkingRequestFrom:envelope.source with:signature];
}
// Loki: Handle pre key bundle message // Loki: Handle pre key bundle message
if (contentProto.prekeyBundleMessage) { if (contentProto.prekeyBundleMessage) {
OWSLogInfo(@"Received a pre key bundle message from: %@.", envelope.source); OWSLogInfo(@"[Loki] Received a pre key bundle message from: %@.", envelope.source);
PreKeyBundle *_Nullable bundle = [contentProto.prekeyBundleMessage createPreKeyBundleWithTransaction:transaction]; PreKeyBundle *_Nullable bundle = [contentProto.prekeyBundleMessage createPreKeyBundleWithTransaction:transaction];
if (!bundle) { if (!bundle) {
OWSFailDebug(@"Failed to create PreKeyBundle from message."); OWSFailDebug(@"Failed to create a pre key bundle.");
} }
[self.primaryStorage setPreKeyBundle:bundle forContact:envelope.source transaction:transaction]; [self.primaryStorage setPreKeyBundle:bundle forContact:envelope.source transaction:transaction];
} }
// Loki: Check if we got p2p address // Loki: Check if we got a P2P address
if (contentProto.lokiAddressMessage) { if (contentProto.lokiAddressMessage) {
NSString *address = contentProto.lokiAddressMessage.ptpAddress; NSString *address = contentProto.lokiAddressMessage.ptpAddress;
uint32_t port = contentProto.lokiAddressMessage.ptpPort; uint32_t port = contentProto.lokiAddressMessage.ptpPort;
@ -1572,6 +1582,10 @@ NS_ASSUME_NONNULL_BEGIN
} }
} }
- (void)handleDeviceLinkingMessageIfNeeded:(TSIncomingMessage *)message transaction:(YapDatabaseReadWriteTransaction *)transaction {
}
- (void)finalizeIncomingMessage:(TSIncomingMessage *)incomingMessage - (void)finalizeIncomingMessage:(TSIncomingMessage *)incomingMessage
thread:(TSThread *)thread thread:(TSThread *)thread
envelope:(SSKProtoEnvelope *)envelope envelope:(SSKProtoEnvelope *)envelope

Loading…
Cancel
Save