From e3868df69a9f69688810454072125b97e242c076 Mon Sep 17 00:00:00 2001 From: Matthew Chen Date: Tue, 17 Oct 2017 17:44:13 -0700 Subject: [PATCH] Move write of incoming messages off main thread. // FREEBIE --- .../src/Network/WebSockets/TSSocketManager.m | 25 +++++++++++-------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/SignalServiceKit/src/Network/WebSockets/TSSocketManager.m b/SignalServiceKit/src/Network/WebSockets/TSSocketManager.m index d835fda2c..648741169 100644 --- a/SignalServiceKit/src/Network/WebSockets/TSSocketManager.m +++ b/SignalServiceKit/src/Network/WebSockets/TSSocketManager.m @@ -381,20 +381,25 @@ NSString *const kNSNotification_SocketManagerStateDidChange = @"kNSNotification_ if ([message.path isEqualToString:@"/api/v1/message"] && [message.verb isEqualToString:@"PUT"]) { - NSData *decryptedPayload = - [Cryptography decryptAppleMessagePayload:message.body withSignalingKey:TSStorageManager.signalingKey]; + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ - if (!decryptedPayload) { - DDLogWarn(@"%@ Failed to decrypt incoming payload or bad HMAC", self.tag); - [self sendWebSocketMessageAcknowledgement:message]; - return; - } + NSData *decryptedPayload = + [Cryptography decryptAppleMessagePayload:message.body withSignalingKey:TSStorageManager.signalingKey]; - OWSSignalServiceProtosEnvelope *envelope = [OWSSignalServiceProtosEnvelope parseFromData:decryptedPayload]; + if (!decryptedPayload) { + DDLogWarn(@"%@ Failed to decrypt incoming payload or bad HMAC", self.tag); + [self sendWebSocketMessageAcknowledgement:message]; + return; + } - [self.messageReceiver handleReceivedEnvelope:envelope]; - [self sendWebSocketMessageAcknowledgement:message]; + OWSSignalServiceProtosEnvelope *envelope = [OWSSignalServiceProtosEnvelope parseFromData:decryptedPayload]; + + [self.messageReceiver handleReceivedEnvelope:envelope]; + dispatch_async(dispatch_get_main_queue(), ^{ + [self sendWebSocketMessageAcknowledgement:message]; + }); + }); } else { DDLogWarn(@"%@ Unsupported WebSocket Request", self.tag);