| #import "CRSessionDelegate.h" |
| |
| #import "CRSessionController.h" |
| |
| @interface CRSessionDelegate () |
| |
| @property (nonatomic, weak) CRSessionController *sessionController; |
| |
| @end |
| |
| @implementation CRSessionDelegate |
| |
| - (instancetype)initWithSessionController:(CRSessionController *)sessionController |
| { |
| self = [super init]; |
| if (self) { |
| _sessionController = sessionController; |
| } |
| return self; |
| } |
| |
| + (instancetype)sessionDelegateWithSessionController:(CRSessionController *)sessionController |
| { |
| CRSessionDelegate *delegate = [[self alloc] initWithSessionController:sessionController]; |
| return delegate; |
| } |
| |
| #pragma mark - NSURLSessionTaskDelegate |
| |
| - (void)URLSession:(NSURLSession *)session |
| task:(NSURLSessionTask *)task |
| willPerformHTTPRedirection:(NSHTTPURLResponse *)response |
| newRequest:(NSURLRequest *)request |
| completionHandler:(void (^)(NSURLRequest *))completionHandler |
| { |
| id delegate = [self.sessionController NSURLSessionTaskDelegateForTask:task]; |
| if ([delegate respondsToSelector:@selector(URLSession:task:willPerformHTTPRedirection:newRequest:completionHandler:)]) { |
| [delegate URLSession:session |
| task:task |
| willPerformHTTPRedirection:response |
| newRequest:request |
| completionHandler:completionHandler]; |
| } else { |
| if (completionHandler) completionHandler(request); |
| } |
| } |
| |
| - (void)URLSession:(NSURLSession *)session |
| task:(NSURLSessionTask *)task |
| didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge |
| completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition, |
| NSURLCredential *))completionHandler |
| { |
| id delegate = [self.sessionController NSURLSessionTaskDelegateForTask:task]; |
| if ([delegate respondsToSelector:@selector(URLSession:task:didReceiveChallenge:completionHandler:)]) { |
| [delegate URLSession:session |
| task:task |
| didReceiveChallenge:challenge |
| completionHandler:completionHandler]; |
| } else { |
| if (completionHandler) { |
| completionHandler(NSURLSessionAuthChallengePerformDefaultHandling, nil); |
| } |
| } |
| } |
| |
| @end |