diff --git a/Signal/src/ViewControllers/DebugUI/DebugUIMisc.m b/Signal/src/ViewControllers/DebugUI/DebugUIMisc.m index ef4c229a9..d0fffafb1 100644 --- a/Signal/src/ViewControllers/DebugUI/DebugUIMisc.m +++ b/Signal/src/ViewControllers/DebugUI/DebugUIMisc.m @@ -137,6 +137,11 @@ NS_ASSUME_NONNULL_BEGIN [Environment.shared.contactsManager requestSystemContactsOnce]; }]]; + [items addObject:[OWSTableItem itemWithTitle:@"Cycle websockets" + actionBlock:^() { + [SSKEnvironment.shared.socketManager cycleSocket]; + }]]; + return [OWSTableSection sectionWithTitle:self.name items:items]; } diff --git a/SignalServiceKit/src/Messages/OWSMessageSender.m b/SignalServiceKit/src/Messages/OWSMessageSender.m index a3329de08..6c7205249 100644 --- a/SignalServiceKit/src/Messages/OWSMessageSender.m +++ b/SignalServiceKit/src/Messages/OWSMessageSender.m @@ -1102,8 +1102,10 @@ NSString *const OWSMessageSenderRateLimitedException = @"RateLimitedException"; [[requestMaker makeRequestObjc] .then(^(OWSRequestMakerResult *result) { dispatch_async([OWSDispatch sendingQueue], ^{ - const BOOL wasSentByUD = result.wasSentByUD; - [self messageSendDidSucceed:messageSend deviceMessages:deviceMessages wasSentByUD:wasSentByUD]; + [self messageSendDidSucceed:messageSend + deviceMessages:deviceMessages + wasSentByUD:result.wasSentByUD + wasSentByWebsocket:result.wasSentByWebsocket]; }); }) .catch(^(NSError *error) { @@ -1139,13 +1141,15 @@ NSString *const OWSMessageSenderRateLimitedException = @"RateLimitedException"; - (void)messageSendDidSucceed:(OWSMessageSend *)messageSend deviceMessages:(NSArray *)deviceMessages - wasSentByUD:(BOOL)wasSentByUD { + wasSentByUD:(BOOL)wasSentByUD + wasSentByWebsocket:(BOOL)wasSentByWebsocket +{ OWSAssertDebug(messageSend); OWSAssertDebug(deviceMessages); SignalRecipient *recipient = messageSend.recipient; - OWSLogInfo(@"Message send succeeded (wasSentByUD: %d).", wasSentByUD); + OWSLogInfo(@"Message send succeeded; wasSentByUD: %d, wasSentByWebsocket: %d.", wasSentByUD, wasSentByWebsocket); if (messageSend.isLocalNumber && deviceMessages.count == 0) { OWSLogInfo(@"Sent a message with no device messages; clearing 'mayHaveLinkedDevices'."); diff --git a/SignalServiceKit/src/Messages/UD/OWSRequestMaker.swift b/SignalServiceKit/src/Messages/UD/OWSRequestMaker.swift index 159323470..45355d353 100644 --- a/SignalServiceKit/src/Messages/UD/OWSRequestMaker.swift +++ b/SignalServiceKit/src/Messages/UD/OWSRequestMaker.swift @@ -23,11 +23,16 @@ public class RequestMakerResult: NSObject { @objc public let wasSentByUD: Bool + @objc + public let wasSentByWebsocket: Bool + @objc public init(responseObject: Any?, - wasSentByUD: Bool) { + wasSentByUD: Bool, + wasSentByWebsocket: Bool) { self.responseObject = responseObject self.wasSentByUD = wasSentByUD + self.wasSentByWebsocket = wasSentByWebsocket } } @@ -115,7 +120,7 @@ public class RequestMaker: NSObject { let isUDRequest: Bool = udAccessForRequest != nil let request: TSRequest = requestFactoryBlock(udAccessForRequest?.udAccessKey) let webSocketType: OWSWebSocketType = (isUDRequest ? .UD : .default) - let canMakeWebsocketRequests = (socketManager.canMakeRequests(of: webSocketType) && !skipWebsocket) + let canMakeWebsocketRequests = (socketManager.canMakeRequests(of: webSocketType) && !skipWebsocket && !isUDRequest) if canMakeWebsocketRequests { return Promise { resolver in @@ -130,7 +135,9 @@ public class RequestMaker: NSObject { self.requestSucceeded(udAccess: udAccessForRequest) - resolver.fulfill(RequestMakerResult(responseObject: responseObject, wasSentByUD: isUDRequest)) + resolver.fulfill(RequestMakerResult(responseObject: responseObject, + wasSentByUD: isUDRequest, + wasSentByWebsocket: true)) }) { (statusCode: Int, responseData: Data?, error: Error) in resolver.reject(RequestMakerError.websocketRequestError(statusCode: statusCode, responseData: responseData, underlyingError: error)) } @@ -179,7 +186,9 @@ public class RequestMaker: NSObject { self.requestSucceeded(udAccess: udAccessForRequest) // Unwrap the network manager promise into a request maker promise. - return RequestMakerResult(responseObject: networkManagerResult.responseObject, wasSentByUD: isUDRequest) + return RequestMakerResult(responseObject: networkManagerResult.responseObject, + wasSentByUD: isUDRequest, + wasSentByWebsocket: false) }.recover { (error: Error) -> Promise in switch error { case NetworkManagerError.taskError(let task, _):