conventional error structure for connectivity error

pull/1/head
Michael Kirk 7 years ago
parent 54b184bc97
commit e7170dc6e8

@ -64,7 +64,7 @@ public class OWS106EnsureProfileComplete: OWSDatabaseMigration {
self.completionHandler(true)
}.catch { error in
let nserror = error as NSError
if nserror.domain == TSNetworkManagerDomain {
if nserror.domain == TSNetworkManagerErrorDomain {
// Don't retry if we had an unrecoverable error.
// In particular, 401 (invalid auth) is unrecoverable.
let isUnrecoverableError = nserror.code == 401

@ -386,7 +386,7 @@ NSString *const TSAccountManager_ServerSignalingKey = @"TSStorageServerSignaling
if (!IsNSErrorNetworkFailure(error)) {
OWSProdError([OWSAnalyticsEvents accountsErrorVerifyAccountRequestFailed]);
}
OWSAssertDebug([error.domain isEqualToString:TSNetworkManagerDomain]);
OWSAssertDebug([error.domain isEqualToString:TSNetworkManagerErrorDomain]);
OWSLogWarn(@"Error verifying code: %@", error.debugDescription);

@ -6,7 +6,15 @@
NS_ASSUME_NONNULL_BEGIN
extern NSString *const TSNetworkManagerDomain;
extern NSErrorDomain const TSNetworkManagerErrorDomain;
typedef NS_ERROR_ENUM(TSNetworkManagerErrorDomain, TSNetworkManagerError){
// It's a shame to use 0 as an enum value for anything other than something like default or unknown, because it's
// indistinguishable from "not set" in Objc.
// However this value was existing behavior for connectivity errors, and since we might be using this in other
// places I didn't want to change it out of hand
TSNetworkManagerErrorFailedConnection = 0,
// Other TSNetworkManagerError's use HTTP status codes (e.g. 404, etc)
};
BOOL IsNSErrorNetworkFailure(NSError *_Nullable error);

@ -7,6 +7,7 @@
#import "NSData+OWS.h"
#import "NSError+messageSending.h"
#import "NSURLSessionDataTask+StatusCode.h"
#import "OWSError.h"
#import "OWSSignalService.h"
#import "SSKEnvironment.h"
#import "TSAccountManager.h"
@ -14,11 +15,12 @@
#import <AFNetworking/AFNetworking.h>
#import <SignalServiceKit/SignalServiceKit-Swift.h>
NSString *const TSNetworkManagerDomain = @"org.whispersystems.signal.networkManager";
NSErrorDomain const TSNetworkManagerErrorDomain = @"SignalServiceKit.TSNetworkManager";
BOOL IsNSErrorNetworkFailure(NSError *_Nullable error)
{
return ([error.domain isEqualToString:TSNetworkManagerDomain] && error.code == 0);
return ([error.domain isEqualToString:TSNetworkManagerErrorDomain]
&& error.code == TSNetworkManagerErrorFailedConnection);
}
@interface TSNetworkManager ()
@ -218,16 +220,17 @@ typedef void (^failureBlock)(NSURLSessionDataTask *task, NSError *error);
switch (statusCode) {
case 0: {
error.isRetryable = YES;
OWSLogWarn(@"The network request failed because of a connectivity error: %@", request);
failureBlock(task,
[self errorWithHTTPCode:statusCode
NSError *connectivityError =
[self errorWithHTTPCode:TSNetworkManagerErrorFailedConnection
description:NSLocalizedString(@"ERROR_DESCRIPTION_NO_INTERNET",
@"Generic error used whenever Signal can't contact the server")
failureReason:networkError.localizedFailureReason
recoverySuggestion:NSLocalizedString(@"NETWORK_ERROR_RECOVERY", nil)
fallbackError:networkError]);
fallbackError:networkError];
connectivityError.isRetryable = YES;
OWSLogWarn(@"The network request failed because of a connectivity error: %@", request);
failureBlock(task, connectivityError);
break;
}
case 400: {
@ -356,7 +359,7 @@ typedef void (^failureBlock)(NSURLSessionDataTask *task, NSError *error);
[dict setObject:failureData forKey:AFNetworkingOperationFailingURLResponseDataErrorKey];
}
return [NSError errorWithDomain:TSNetworkManagerDomain code:code userInfo:dict];
return [NSError errorWithDomain:TSNetworkManagerErrorDomain code:code userInfo:dict];
}
@end

Loading…
Cancel
Save