diff --git a/SignalServiceKit/src/Network/API/TSNetworkManager.m b/SignalServiceKit/src/Network/API/TSNetworkManager.m index 6ff1955da..03ef7f052 100644 --- a/SignalServiceKit/src/Network/API/TSNetworkManager.m +++ b/SignalServiceKit/src/Network/API/TSNetworkManager.m @@ -28,6 +28,8 @@ BOOL IsNSErrorNetworkFailure(NSError *_Nullable error) // This property should only be accessed on udSerialQueue. @property (atomic, readonly) AFHTTPSessionManager *udSessionManager; +@property (atomic, readonly) dispatch_queue_t udSerialQueue; + typedef void (^failureBlock)(NSURLSessionDataTask *task, NSError *error); @end @@ -35,6 +37,7 @@ typedef void (^failureBlock)(NSURLSessionDataTask *task, NSError *error); @implementation TSNetworkManager @synthesize udSessionManager = _udSessionManager; +@synthesize udSerialQueue = _udSerialQueue; #pragma mark Singleton implementation @@ -52,6 +55,8 @@ typedef void (^failureBlock)(NSURLSessionDataTask *task, NSError *error); return self; } + _udSerialQueue = dispatch_queue_create("org.whispersystems.networkManager.udQueue", DISPATCH_QUEUE_SERIAL); + OWSSingletonAssert(); return self; @@ -66,17 +71,6 @@ typedef void (^failureBlock)(NSURLSessionDataTask *task, NSError *error); return [self makeRequest:request completionQueue:dispatch_get_main_queue() success:success failure:failure]; } -- (dispatch_queue_t)udSerialQueue -{ - static dispatch_queue_t _serialQueue; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - _serialQueue = dispatch_queue_create("org.whispersystems.networkManager.udQueue", DISPATCH_QUEUE_SERIAL); - }); - - return _serialQueue; -} - - (void)makeRequest:(TSRequest *)request completionQueue:(dispatch_queue_t)completionQueue success:(TSNetworkManagerSuccess)successBlock @@ -132,9 +126,6 @@ typedef void (^failureBlock)(NSURLSessionDataTask *task, NSError *error); password:request.authPassword]; } - // Disable default cookie handling for all requests. - sessionManager.requestSerializer.HTTPShouldHandleCookies = NO; - // Honor the request's headers. for (NSString *headerField in request.allHTTPHeaderFields) { NSString *headerValue = request.allHTTPHeaderFields[headerField]; @@ -150,8 +141,6 @@ typedef void (^failureBlock)(NSURLSessionDataTask *task, NSError *error); if (!_udSessionManager) { _udSessionManager = [OWSSignalService sharedInstance].signalServiceSessionManager; _udSessionManager.completionQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); - // Disable default cookie handling for all requests. - _udSessionManager.requestSerializer.HTTPShouldHandleCookies = NO; // NOTE: We could enable HTTPShouldUsePipelining here. } diff --git a/SignalServiceKit/src/Network/OWSSignalService.m b/SignalServiceKit/src/Network/OWSSignalService.m index 0b203532e..fd8a2fc3d 100644 --- a/SignalServiceKit/src/Network/OWSSignalService.m +++ b/SignalServiceKit/src/Network/OWSSignalService.m @@ -168,6 +168,8 @@ NSString *const kNSNotificationName_IsCensorshipCircumventionActiveDidChange = sessionManager.securityPolicy = [OWSHTTPSecurityPolicy sharedPolicy]; sessionManager.requestSerializer = [AFJSONRequestSerializer serializer]; sessionManager.responseSerializer = [AFJSONResponseSerializer serializer]; + // Disable default cookie handling for all requests. + sessionManager.requestSerializer.HTTPShouldHandleCookies = NO; return sessionManager; } @@ -186,6 +188,8 @@ NSString *const kNSNotificationName_IsCensorshipCircumventionActiveDidChange = sessionManager.requestSerializer = [AFJSONRequestSerializer serializer]; [sessionManager.requestSerializer setValue:self.censorshipConfiguration.signalServiceReflectorHost forHTTPHeaderField:@"Host"]; sessionManager.responseSerializer = [AFJSONResponseSerializer serializer]; + // Disable default cookie handling for all requests. + sessionManager.requestSerializer.HTTPShouldHandleCookies = NO; return sessionManager; }