diff --git a/SignalMessaging/profiles/ProfileFetcherJob.swift b/SignalMessaging/profiles/ProfileFetcherJob.swift index c9f459ffa..d740e59cf 100644 --- a/SignalMessaging/profiles/ProfileFetcherJob.swift +++ b/SignalMessaging/profiles/ProfileFetcherJob.swift @@ -185,7 +185,8 @@ public class ProfileFetcherJob: NSObject { canFailoverUDAuth: Bool) -> Promise { AssertIsOnMainThread() - let requestMaker = RequestMaker(requestFactoryBlock: { (udAccessKeyForRequest) -> TSRequest in + let requestMaker = RequestMaker(label: "Profile Fetch", + requestFactoryBlock: { (udAccessKeyForRequest) -> TSRequest in return OWSRequestFactory.getProfileRequest(recipientId: recipientId, udAccessKey: udAccessKeyForRequest) }, udAuthFailureBlock: { // Do nothing diff --git a/SignalServiceKit/src/Messages/OWSMessageSend.swift b/SignalServiceKit/src/Messages/OWSMessageSend.swift index 2187ff0e3..5dc9e8b22 100644 --- a/SignalServiceKit/src/Messages/OWSMessageSend.swift +++ b/SignalServiceKit/src/Messages/OWSMessageSend.swift @@ -83,11 +83,13 @@ public class OWSMessageSend: NSObject { @objc public func disableUD() { + Logger.verbose("") udAccessKey = nil } @objc public func setHasUDAuthFailed() { + Logger.verbose("") // We "fail over" to non-UD sends after auth errors sending via UD. disableUD() } diff --git a/SignalServiceKit/src/Messages/OWSMessageSender.m b/SignalServiceKit/src/Messages/OWSMessageSender.m index c3e168d21..65899936e 100644 --- a/SignalServiceKit/src/Messages/OWSMessageSender.m +++ b/SignalServiceKit/src/Messages/OWSMessageSender.m @@ -1075,12 +1075,10 @@ NSString *const OWSMessageSenderRateLimitedException = @"RateLimitedException"; OWSLogWarn(@"Sending a message with no device messages."); } - OWSLogVerbose(@"Sending message; ud? %d %d.", messageSend.isUDSend, messageSend.udAccessKey != nil); - // NOTE: canFailoverUDAuth is NO because UD-auth and Non-UD-auth requests // use different device lists. - OWSRequestMaker *requestMaker = [[OWSRequestMaker alloc] - initWithRequestFactoryBlock:^(SMKUDAccessKey *_Nullable udAccessKey) { + OWSRequestMaker *requestMaker = [[OWSRequestMaker alloc] initWithLabel:@"Message Send" + requestFactoryBlock:^(SMKUDAccessKey *_Nullable udAccessKey) { return [OWSRequestFactory submitMessageRequestWithRecipient:recipient.recipientId messages:deviceMessages timeStamp:message.timestamp @@ -1575,8 +1573,8 @@ NSString *const OWSMessageSenderRateLimitedException = @"RateLimitedException"; NSString *recipientId = recipient.recipientId; OWSAssertDebug(recipientId.length > 0); - OWSRequestMaker *requestMaker = [[OWSRequestMaker alloc] - initWithRequestFactoryBlock:^(SMKUDAccessKey *_Nullable udAccessKey) { + OWSRequestMaker *requestMaker = [[OWSRequestMaker alloc] initWithLabel:@"Prekey Fetch" + requestFactoryBlock:^(SMKUDAccessKey *_Nullable udAccessKey) { return [OWSRequestFactory recipientPrekeyRequestWithRecipient:recipientId deviceId:[deviceId stringValue] udAccessKey:udAccessKey]; diff --git a/SignalServiceKit/src/Messages/UD/OWSRequestMaker.swift b/SignalServiceKit/src/Messages/UD/OWSRequestMaker.swift index b557e0f16..ad0478e2e 100644 --- a/SignalServiceKit/src/Messages/UD/OWSRequestMaker.swift +++ b/SignalServiceKit/src/Messages/UD/OWSRequestMaker.swift @@ -37,10 +37,12 @@ public class RequestMakerResult: NSObject { // * Websocket-to-REST failover. @objc(OWSRequestMaker) public class RequestMaker: NSObject { + public typealias RequestFactoryBlock = (SMKUDAccessKey?) -> TSRequest public typealias UDAuthFailureBlock = () -> Void public typealias WebsocketFailureBlock = () -> Void + private let label: String private let requestFactoryBlock: RequestFactoryBlock private let udAuthFailureBlock: UDAuthFailureBlock private let websocketFailureBlock: WebsocketFailureBlock @@ -49,12 +51,14 @@ public class RequestMaker: NSObject { private let canFailoverUDAuth: Bool @objc - public init(requestFactoryBlock : @escaping RequestFactoryBlock, + public init(label: String, + requestFactoryBlock : @escaping RequestFactoryBlock, udAuthFailureBlock : @escaping UDAuthFailureBlock, websocketFailureBlock : @escaping WebsocketFailureBlock, recipientId: String, udAccessKey: SMKUDAccessKey?, canFailoverUDAuth: Bool) { + self.label = label self.requestFactoryBlock = requestFactoryBlock self.udAuthFailureBlock = udAuthFailureBlock self.websocketFailureBlock = websocketFailureBlock @@ -112,6 +116,14 @@ public class RequestMaker: NSObject { if canMakeWebsocketRequests { return Promise { resolver in socketManager.make(request, webSocketType: webSocketType, success: { (responseObject: Any?) in + if self.udManager.isUDVerboseLoggingEnabled() { + if isUDSend { + Logger.debug("UD websocket request '\(self.label)' succeeded.") + } else { + Logger.debug("Non-UD websocket request '\(self.label)' succeeded.") + } + } + resolver.fulfill(RequestMakerResult(responseObject: responseObject, wasSentByUD: isUDSend)) }) { (statusCode: Int, responseData: Data?, error: Error) in resolver.reject(RequestMakerError.websocketRequestError(statusCode: statusCode, responseData: responseData, underlyingError: error)) @@ -125,10 +137,10 @@ public class RequestMaker: NSObject { self.udManager.setUnidentifiedAccessMode(.disabled, recipientId: self.recipientId) self.udAuthFailureBlock() if self.canFailoverUDAuth { - Logger.info("UD websocket request auth failed; failing over to non-UD websocket request.") + Logger.info("UD websocket request '\(self.label)' auth failed; failing over to non-UD websocket request.") return self.makeRequestInternal(skipUD: true, skipWebsocket: skipWebsocket) } else { - Logger.info("UD websocket request auth failed; aborting.") + Logger.info("UD websocket request '\(self.label)' auth failed; aborting.") throw RequestMakerUDAuthError.udAuthFailure } } @@ -138,14 +150,22 @@ public class RequestMaker: NSObject { } self.websocketFailureBlock() - Logger.info("Non-UD Web socket request failed; failing over to REST request: \(error).") + Logger.info("Non-UD Web socket request '\(self.label)' failed; failing over to REST request: \(error).") return self.makeRequestInternal(skipUD: skipUD, skipWebsocket: true) } } else { return self.networkManager.makePromise(request: request) .map { (networkManagerResult: TSNetworkManager.NetworkManagerResult) -> RequestMakerResult in + if self.udManager.isUDVerboseLoggingEnabled() { + if isUDSend { + Logger.debug("UD REST request '\(self.label)' succeeded.") + } else { + Logger.debug("Non-UD REST request '\(self.label)' succeeded.") + } + } + // Unwrap the network manager promise into a request maker promise. - RequestMakerResult(responseObject: networkManagerResult.responseObject, wasSentByUD: isUDSend) + return RequestMakerResult(responseObject: networkManagerResult.responseObject, wasSentByUD: isUDSend) }.recover { (error: Error) -> Promise in switch error { case NetworkManagerError.taskError(let task, _): @@ -156,10 +176,10 @@ public class RequestMaker: NSObject { self.udManager.setUnidentifiedAccessMode(.disabled, recipientId: self.recipientId) self.udAuthFailureBlock() if self.canFailoverUDAuth { - Logger.info("UD REST request auth failed; failing over to non-UD REST request.") + Logger.info("UD REST request '\(self.label)' auth failed; failing over to non-UD REST request.") return self.makeRequestInternal(skipUD: true, skipWebsocket: skipWebsocket) } else { - Logger.info("UD REST request auth failed; aborting.") + Logger.info("UD REST request '\(self.label)' auth failed; aborting.") throw RequestMakerUDAuthError.udAuthFailure } } @@ -168,7 +188,7 @@ public class RequestMaker: NSObject { break } - Logger.debug("Non-UD REST request failed: \(error).") + Logger.debug("Non-UD REST request '\(self.label)' failed: \(error).") throw error } }