Respond to CR.
This commit is contained in:
parent
9519e7961a
commit
353f91db64
@ -31,16 +31,6 @@ public class OWSMessageSend: NSObject {
|
||||
@objc
|
||||
public var hasWebsocketSendFailed = false
|
||||
|
||||
// We "fail over" to non-UD sends after auth errors sending via UD.
|
||||
@objc
|
||||
public var hasUDAuthFailed = false {
|
||||
didSet {
|
||||
if hasUDAuthFailed {
|
||||
unidentifiedAccess = nil
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@objc
|
||||
public var unidentifiedAccess: SSKUnidentifiedAccess?
|
||||
|
||||
@ -85,6 +75,13 @@ public class OWSMessageSend: NSObject {
|
||||
|
||||
@objc
|
||||
public var isUDSend: Bool {
|
||||
return (!hasUDAuthFailed && self.unidentifiedAccess != nil)
|
||||
return self.unidentifiedAccess != nil
|
||||
}
|
||||
|
||||
@objc
|
||||
public func setHasUDAuthFailed() {
|
||||
// We "fail over" to non-UD sends after auth errors sending via UD.
|
||||
unidentifiedAccess = nil
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -1040,7 +1040,7 @@ NSString *const OWSMessageSenderRateLimitedException = @"RateLimitedException";
|
||||
OWSLogDebug(@"UD send failed; failing over to non-UD send.");
|
||||
[self.udManager setUnidentifiedAccessMode:UnidentifiedAccessModeDisabled
|
||||
recipientId:recipient.uniqueId];
|
||||
messageSend.hasUDAuthFailed = YES;
|
||||
[messageSend setHasUDAuthFailed];
|
||||
dispatch_async([OWSDispatch sendingQueue], ^{
|
||||
[self sendMessageToRecipient:messageSend];
|
||||
});
|
||||
@ -1070,7 +1070,7 @@ NSString *const OWSMessageSenderRateLimitedException = @"RateLimitedException";
|
||||
OWSLogDebug(@"UD send failed; failing over to non-UD send.");
|
||||
[self.udManager setUnidentifiedAccessMode:UnidentifiedAccessModeDisabled
|
||||
recipientId:recipient.uniqueId];
|
||||
messageSend.hasUDAuthFailed = YES;
|
||||
[messageSend setHasUDAuthFailed];
|
||||
dispatch_async([OWSDispatch sendingQueue], ^{
|
||||
[self sendMessageToRecipient:messageSend];
|
||||
});
|
||||
@ -1464,8 +1464,6 @@ NSString *const OWSMessageSenderRateLimitedException = @"RateLimitedException";
|
||||
}
|
||||
dispatch_semaphore_signal(sema);
|
||||
}];
|
||||
// FIXME: Currently this happens within a readwrite transaction - meaning our read-write transaction blocks
|
||||
// on a network request.
|
||||
dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);
|
||||
if (exception) {
|
||||
@throw exception;
|
||||
@ -1499,6 +1497,7 @@ NSString *const OWSMessageSenderRateLimitedException = @"RateLimitedException";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
- (void)makePrekeyRequestForMessageSend:(OWSMessageSend *)messageSend
|
||||
deviceId:(NSNumber *)deviceId
|
||||
success:(void (^)(PreKeyBundle *_Nullable))success
|
||||
@ -1541,7 +1540,7 @@ NSString *const OWSMessageSenderRateLimitedException = @"RateLimitedException";
|
||||
[self.udManager setUnidentifiedAccessMode:UnidentifiedAccessModeDisabled
|
||||
recipientId:recipient.uniqueId];
|
||||
});
|
||||
messageSend.hasUDAuthFailed = YES;
|
||||
[messageSend setHasUDAuthFailed];
|
||||
// Try again without UD auth.
|
||||
[self makePrekeyRequestForMessageSend:messageSend deviceId:deviceId success:success failure:failure];
|
||||
return;
|
||||
|
||||
@ -94,41 +94,24 @@ public class SignalServiceRestClient: NSObject, SignalServiceClient {
|
||||
}
|
||||
|
||||
public func retrieveProfile(recipientId: RecipientIdentifier, unidentifiedAccess: SSKUnidentifiedAccess?) -> Promise<SignalServiceProfile> {
|
||||
let (promise, resolver) = Promise<(task: URLSessionDataTask, responseObject: Any?)>.pending()
|
||||
|
||||
let request = OWSRequestFactory.getProfileRequest(recipientId: recipientId, unidentifiedAccess: unidentifiedAccess)
|
||||
networkManager.makeRequest(request,
|
||||
success: { task, responseObject in
|
||||
resolver.fulfill((task: task, responseObject: responseObject))
|
||||
},
|
||||
failure: { task, error in
|
||||
let statusCode = task.statusCode()
|
||||
if unidentifiedAccess != nil && (statusCode == 401 || statusCode == 403) {
|
||||
Logger.verbose("REST profile request failing over to non-UD auth.")
|
||||
return networkManager.makePromise(request: request)
|
||||
.recover { (error: Error) -> Promise<(task: URLSessionDataTask, responseObject: Any?)> in
|
||||
switch error {
|
||||
case NetworkManagerError.taskError(let task, _):
|
||||
let statusCode = task.statusCode()
|
||||
if unidentifiedAccess != nil && (statusCode == 401 || statusCode == 403) {
|
||||
Logger.verbose("REST profile request failing over to non-UD auth.")
|
||||
|
||||
self.udManager.setUnidentifiedAccessMode(.disabled, recipientId: recipientId)
|
||||
self.udManager.setUnidentifiedAccessMode(.disabled, recipientId: recipientId)
|
||||
|
||||
let nonUDRequest = OWSRequestFactory.getProfileRequest(recipientId: recipientId, unidentifiedAccess: nil)
|
||||
self.networkManager.makeRequest(nonUDRequest,
|
||||
success: { task, responseObject in
|
||||
resolver.fulfill((task: task, responseObject: responseObject))
|
||||
},
|
||||
failure: { task, error in
|
||||
let nmError = NetworkManagerError.taskError(task: task, underlyingError: error)
|
||||
let nsError: NSError = nmError as NSError
|
||||
nsError.isRetryable = (error as NSError).isRetryable
|
||||
resolver.reject(nsError)
|
||||
})
|
||||
return
|
||||
}
|
||||
Logger.info("REST profile request failed.")
|
||||
let nmError = NetworkManagerError.taskError(task: task, underlyingError: error)
|
||||
let nsError: NSError = nmError as NSError
|
||||
nsError.isRetryable = (error as NSError).isRetryable
|
||||
resolver.reject(nsError)
|
||||
})
|
||||
return promise.map { _, responseObject in
|
||||
Logger.info("REST profile request succeeded.")
|
||||
let nonUDRequest = OWSRequestFactory.getProfileRequest(recipientId: recipientId, unidentifiedAccess: nil)
|
||||
return self.networkManager.makePromise(request: nonUDRequest)
|
||||
}
|
||||
default: break
|
||||
}
|
||||
throw error
|
||||
}.map { _, responseObject in
|
||||
return try SignalServiceProfile(recipientId: recipientId, responseObject: responseObject)
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user