diff --git a/SignalServiceKit/src/Messages/MessageSender+Errors.swift b/SignalServiceKit/src/Messages/MessageSender+Errors.swift index 9a25378dc9..c28952debf 100644 --- a/SignalServiceKit/src/Messages/MessageSender+Errors.swift +++ b/SignalServiceKit/src/Messages/MessageSender+Errors.swift @@ -164,11 +164,6 @@ public class MessageSenderErrorNoValidRecipients: NSObject, CustomNSError, IsRet MessageSenderErrorNoValidRecipients() as Error as NSError } - public var localizedDescription: String { - NSLocalizedString("ERROR_DESCRIPTION_NO_VALID_RECIPIENTS", - comment: "Error indicating that an outgoing message had no valid recipients.") - } - /// NSError bridging: the domain of the error. /// :nodoc: @objc @@ -189,6 +184,11 @@ public class MessageSenderErrorNoValidRecipients: NSObject, CustomNSError, IsRet [NSLocalizedDescriptionKey: self.localizedDescription] } + public var localizedDescription: String { + NSLocalizedString("ERROR_DESCRIPTION_NO_VALID_RECIPIENTS", + comment: "Error indicating that an outgoing message had no valid recipients.") + } + public var isRetryableProvider: Bool { false } } @@ -215,12 +215,6 @@ public class MessageSenderNoSessionForTransientMessageError: NSObject, CustomNSE /// :nodoc: public var errorCode: Int { Self.errorCode } - /// NSError bridging: the error code within the given domain. - /// :nodoc: - public var errorUserInfo: [String: Any] { - [NSLocalizedDescriptionKey: self.localizedDescription] - } - public var isRetryableProvider: Bool { false } } diff --git a/SignalServiceKit/src/Network/API/RESTNetworkManager.swift b/SignalServiceKit/src/Network/API/RESTNetworkManager.swift index 1f76776827..1faa28e7e2 100644 --- a/SignalServiceKit/src/Network/API/RESTNetworkManager.swift +++ b/SignalServiceKit/src/Network/API/RESTNetworkManager.swift @@ -46,6 +46,7 @@ public class RESTSessionManager: NSObject { success: @escaping RESTNetworkManagerSuccess, failure: @escaping RESTNetworkManagerFailure) { assertOnQueue(NetworkManagerQueue()) + owsAssertDebug(!FeatureFlags.deprecateREST) guard let rawRequestUrl = request.url else { owsFailDebug("Missing requestUrl.") diff --git a/SignalServiceKit/src/Network/OWSURLSession.swift b/SignalServiceKit/src/Network/OWSURLSession.swift index 935a3b07af..991de49d1c 100644 --- a/SignalServiceKit/src/Network/OWSURLSession.swift +++ b/SignalServiceKit/src/Network/OWSURLSession.swift @@ -385,9 +385,7 @@ public class OWSURLSession: NSObject { @objc public static var signalIosUserAgent: String { - let result = "Signal-iOS/\(AppVersion.shared().currentAppVersionLong) iOS/\(UIDevice.current.systemVersion)" - Logger.verbose("---- userAgent: \(result)") - return result + "Signal-iOS/\(AppVersion.shared().currentAppVersionLong) iOS/\(UIDevice.current.systemVersion)" } private func buildUrl(_ urlString: String) -> URL? { diff --git a/SignalServiceKit/src/Network/WebSockets/HTTP+OWS.swift b/SignalServiceKit/src/Network/WebSockets/HTTP+OWS.swift index d054d8b015..a88786429e 100644 --- a/SignalServiceKit/src/Network/WebSockets/HTTP+OWS.swift +++ b/SignalServiceKit/src/Network/WebSockets/HTTP+OWS.swift @@ -308,6 +308,13 @@ public extension Error { HTTPResponseDataForError(self) } + var httpRequestUrl: URL? { + guard let error = self as? HTTPError else { + return nil + } + return error.requestUrl + } + var httpResponseJson: Any? { guard let data = httpResponseData else { return nil diff --git a/SignalServiceKit/src/Util/Error+isRetryable.swift b/SignalServiceKit/src/Util/Error+isRetryable.swift index 7d7d35e1b9..5b1af6f56c 100644 --- a/SignalServiceKit/src/Util/Error+isRetryable.swift +++ b/SignalServiceKit/src/Util/Error+isRetryable.swift @@ -46,6 +46,13 @@ extension NSError { Logger.verbose("Network error without retry behavior specified: \(self)") return true } + // Do not retry 4xx errors. + if let statusCode = (self as Error).httpStatusCode, + statusCode >= 400, + statusCode <= 499 { + Logger.info("Not retrying error: \(statusCode), \(String(describing: (self as Error).httpRequestUrl))") + return false + } // This value should always be set for all errors by this // var is consulted. If not, default to retrying in production. diff --git a/SignalServiceKit/src/Util/FeatureFlags.swift b/SignalServiceKit/src/Util/FeatureFlags.swift index eec4bc4d5b..8190690488 100644 --- a/SignalServiceKit/src/Util/FeatureFlags.swift +++ b/SignalServiceKit/src/Util/FeatureFlags.swift @@ -202,7 +202,7 @@ public class FeatureFlags: BaseFlags { public static let deprecateREST = false @objc - public static let newHostNames = false + public static let newHostNames = build.includes(.qa) public static func buildFlagMap() -> [String: Any] { BaseFlags.buildFlagMap(for: FeatureFlags.self) { (key: String) -> Any? in