From dfccd6b9a3ac7c73492b45d3fa012943c670062e Mon Sep 17 00:00:00 2001 From: Niels Andriesse Date: Tue, 12 Nov 2019 13:04:13 +1100 Subject: [PATCH] Try to establish sessions after receiving a contact sync message --- .../src/Messages/OWSMessageManager.m | 26 ++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/SignalServiceKit/src/Messages/OWSMessageManager.m b/SignalServiceKit/src/Messages/OWSMessageManager.m index 9421f0e7b..a6e6cbecf 100644 --- a/SignalServiceKit/src/Messages/OWSMessageManager.m +++ b/SignalServiceKit/src/Messages/OWSMessageManager.m @@ -57,6 +57,7 @@ #import #import #import +#import "OWSDispatch.h" NS_ASSUME_NONNULL_BEGIN @@ -1012,7 +1013,30 @@ NS_ASSUME_NONNULL_BEGIN NSData *data = syncMessage.contacts.data; ContactParser *parser = [[ContactParser alloc] initWithData:data]; NSArray *hexEncodedPublicKeys = [parser parseHexEncodedPublicKeys]; - // TODO: Establish sessions + // Try to establish sessions + for (NSString *hexEncodedPublicKey in hexEncodedPublicKeys) { + TSContactThread *thread = [TSContactThread getThreadWithContactId:hexEncodedPublicKey transaction:transaction]; + if (thread == nil) { return; } + LKThreadFriendRequestStatus friendRequestStatus = thread.friendRequestStatus; + switch (friendRequestStatus) { + case LKThreadFriendRequestStatusNone: { + OWSMessageSender *messageSender = SSKEnvironment.shared.messageSender; + OWSMessageSend *automatedFriendRequestMessage = [messageSender getMultiDeviceFriendRequestMessageForHexEncodedPublicKey:hexEncodedPublicKey]; + dispatch_async(OWSDispatch.sendingQueue, ^{ + [messageSender sendMessage:automatedFriendRequestMessage]; + }); + break; + } + case LKThreadFriendRequestStatusRequestReceived: { + [thread saveFriendRequestStatus:LKThreadFriendRequestStatusFriends withTransaction:transaction]; + // The two lines below are equivalent to calling [ThreadUtil enqueueFriendRequestAcceptanceMessageInThread:thread] + LKEphemeralMessage *backgroundMessage = [[LKEphemeralMessage alloc] initInThread:thread]; + [self.messageSenderJobQueue addMessage:backgroundMessage transaction:transaction]; + break; + } + default: break; // Do nothing + } + } } else { OWSLogWarn(@"Ignoring unsupported sync message."); }