diff --git a/SignalServiceKit/src/Network/API/TSNetworkManager.h b/SignalServiceKit/src/Network/API/TSNetworkManager.h index 08451c573..67a016a04 100644 --- a/SignalServiceKit/src/Network/API/TSNetworkManager.h +++ b/SignalServiceKit/src/Network/API/TSNetworkManager.h @@ -1,5 +1,5 @@ // -// Copyright (c) 2017 Open Whisper Systems. All rights reserved. +// Copyright (c) 2018 Open Whisper Systems. All rights reserved. // /** @@ -27,6 +27,9 @@ extern NSString *const TSNetworkManagerDomain; BOOL IsNSErrorNetworkFailure(NSError *_Nullable error); +typedef void (^TSNetworkManagerSuccess)(NSURLSessionDataTask *task, id responseObject); +typedef void (^TSNetworkManagerFailure)(NSURLSessionDataTask *task, NSError *error); + @interface TSNetworkManager : NSObject - (instancetype)init NS_UNAVAILABLE; @@ -34,8 +37,13 @@ BOOL IsNSErrorNetworkFailure(NSError *_Nullable error); + (instancetype)sharedManager; - (void)makeRequest:(TSRequest *)request - success:(void (^)(NSURLSessionDataTask *task, id responseObject))success - failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure NS_SWIFT_NAME(makeRequest(_:success:failure:)); + success:(TSNetworkManagerSuccess)success + failure:(TSNetworkManagerFailure)failure NS_SWIFT_NAME(makeRequest(_:success:failure:)); + +- (void)makeRequest:(TSRequest *)request + shouldCompleteOnMainQueue:(BOOL)shouldCompleteOnMainQueue + success:(TSNetworkManagerSuccess)success + failure:(TSNetworkManagerFailure)failure NS_SWIFT_NAME(makeRequest(_:shouldCompleteOnMainQueue:success:failure:)); @end diff --git a/SignalServiceKit/src/Network/API/TSNetworkManager.m b/SignalServiceKit/src/Network/API/TSNetworkManager.m index c79c6ccf9..c86051f0c 100644 --- a/SignalServiceKit/src/Network/API/TSNetworkManager.m +++ b/SignalServiceKit/src/Network/API/TSNetworkManager.m @@ -55,9 +55,21 @@ typedef void (^failureBlock)(NSURLSessionDataTask *task, NSError *error); #pragma mark Manager Methods - (void)makeRequest:(TSRequest *)request - success:(void (^)(NSURLSessionDataTask *task, id responseObject))success - failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failureBlock + success:(TSNetworkManagerSuccess)success + failure:(TSNetworkManagerFailure)failure { + return [self makeRequest:request shouldCompleteOnMainQueue:YES success:success failure:failure]; +} + +- (void)makeRequest:(TSRequest *)request + shouldCompleteOnMainQueue:(BOOL)shouldCompleteOnMainQueue + success:(TSNetworkManagerSuccess)success + failure:(TSNetworkManagerFailure)failureBlock +{ + OWSAssert(request); + OWSAssert(success); + OWSAssert(failureBlock); + DDLogInfo(@"%@ Making request: %@", self.logTag, request); if (!CurrentAppContext().isMainApp) { if (![request isKindOfClass:[TSRecipientPrekeyRequest class]] @@ -73,6 +85,11 @@ typedef void (^failureBlock)(NSURLSessionDataTask *task, NSError *error); [TSNetworkManager errorPrettifyingForFailureBlock:failureBlock]; AFHTTPSessionManager *sessionManager = [OWSSignalService sharedInstance].signalServiceSessionManager; + if (shouldCompleteOnMainQueue) { + sessionManager.completionQueue = dispatch_get_main_queue(); + } else { + sessionManager.completionQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); + } if ([request isKindOfClass:[TSVerifyCodeRequest class]]) { // We plant the Authorization parameter ourselves, no need to double add. diff --git a/SignalServiceKit/src/Network/OWSSignalService.m b/SignalServiceKit/src/Network/OWSSignalService.m index 243d14dfa..4ff868e5f 100644 --- a/SignalServiceKit/src/Network/OWSSignalService.m +++ b/SignalServiceKit/src/Network/OWSSignalService.m @@ -205,7 +205,6 @@ NSString *const kNSNotificationName_IsCensorshipCircumventionActiveDidChange = sessionManager.requestSerializer = [AFJSONRequestSerializer serializer]; [sessionManager.requestSerializer setValue:self.censorshipConfiguration.signalServiceReflectorHost forHTTPHeaderField:@"Host"]; - sessionManager.responseSerializer = [AFJSONResponseSerializer serializer]; return sessionManager;