Add missing session request handling

This commit is contained in:
nielsandriesse 2020-05-07 11:56:35 +10:00
parent f10cc65187
commit 60cb5b6114
2 changed files with 25 additions and 1 deletions

View File

@ -166,6 +166,27 @@ public final class SessionManagementProtocol : NSObject {
return dataMessage.flags & UInt32(sessionRequestFlag.rawValue) != 0
}
@objc(handleSessionRequestMessage:wrappedIn:using:)
public static func handleSessionRequestMessage(_ dataMessage: SSKProtoDataMessage, wrappedIn envelope: SSKProtoEnvelope, using transaction: YapDatabaseReadWriteTransaction) {
// The envelope source is set during UD decryption
// FIXME: Device links should probably update here if they're out of date
let hexEncodedPublicKey = envelope.source!
var validHEPKs: Set<String> = []
TSGroupThread.enumerateCollectionObjects(with: transaction) { object, _ in
guard let group = object as? TSGroupThread, group.groupModel.groupType == .closedGroup,
group.shouldThreadBeVisible else { return }
let closedGroupMembersIncludingLinkedDevices = group.groupModel.groupMemberIds.flatMap {
LokiDatabaseUtilities.getLinkedDeviceHexEncodedPublicKeys(for: $0, in: transaction)
}
validHEPKs.formUnion(closedGroupMembersIncludingLinkedDevices)
}
guard validHEPKs.contains(hexEncodedPublicKey) else { return }
let thread = TSContactThread.getOrCreateThread(withContactId: hexEncodedPublicKey, transaction: transaction)
let ephemeralMessage = EphemeralMessage(in: thread)
let messageSenderJobQueue = SSKEnvironment.shared.messageSenderJobQueue
messageSenderJobQueue.add(message: ephemeralMessage, transaction: transaction)
}
// TODO: This needs an explanation of when we expect pre key bundles to be attached
@objc(handlePreKeyBundleMessageIfNeeded:wrappedIn:using:)
public static func handlePreKeyBundleMessageIfNeeded(_ protoContent: SSKProtoContent, wrappedIn envelope: SSKProtoEnvelope, using transaction: YapDatabaseReadWriteTransaction) {

View File

@ -468,7 +468,10 @@ NS_ASSUME_NONNULL_BEGIN
} else if (contentProto.dataMessage) {
// Loki: Don't process session request messages any further
if ([LKSessionManagementProtocol isSessionRequestMessage:contentProto.dataMessage]) { return; }
if ([LKSessionManagementProtocol isSessionRequestMessage:contentProto.dataMessage]) {
[LKSessionManagementProtocol handleSessionRequestMessage:contentProto.dataMessage wrappedIn:envelope using:transaction];
return;
}
// Loki: Don't process session restore messages any further
if ([LKSessionManagementProtocol isSessionRestoreMessage:contentProto.dataMessage]) { return; }