Вы находитесь на странице: 1из 6

// AFHTTPRequestOperationManager.

m
//
// Copyright (c) 2013-2015 AFNetworking (http://afnetworking.com)
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.

#import <Foundation/Foundation.h>

#import "AFHTTPRequestOperationManager.h"
#import "AFHTTPRequestOperation.h"

#import <Availability.h>
#import <Security/Security.h>

#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED)
#import <UIKit/UIKit.h>
#endif

@interface AFHTTPRequestOperationManager ()
@property (readwrite, nonatomic, strong) NSURL *baseURL;
@end

@implementation AFHTTPRequestOperationManager

+ (instancetype)manager {
return [[self alloc] initWithBaseURL:nil];
}

- (instancetype)init {
return [self initWithBaseURL:nil];
}

- (instancetype)initWithBaseURL:(NSURL *)url {
self = [super init];
if (!self) {
return nil;
}

// Ensure terminal slash for baseURL path, so that NSURL


+URLWithString:relativeToURL: works as expected
if ([[url path] length] > 0 && ![[url absoluteString] hasSuffix:@"/"]) {
url = [url URLByAppendingPathComponent:@""];
}
self.baseURL = url;

self.requestSerializer = [AFHTTPRequestSerializer serializer];


self.responseSerializer = [AFJSONResponseSerializer serializer];

self.securityPolicy = [AFSecurityPolicy defaultPolicy];

self.reachabilityManager = [AFNetworkReachabilityManager sharedManager];

self.operationQueue = [[NSOperationQueue alloc] init];

self.shouldUseCredentialStorage = YES;

return self;
}

#pragma mark -

#ifdef _SYSTEMCONFIGURATION_H
#endif

- (void)setRequestSerializer:(AFHTTPRequestSerializer <AFURLRequestSerialization>
*)requestSerializer {
NSParameterAssert(requestSerializer);

_requestSerializer = requestSerializer;
}

- (void)setResponseSerializer:(AFHTTPResponseSerializer
<AFURLResponseSerialization> *)responseSerializer {
NSParameterAssert(responseSerializer);

_responseSerializer = responseSerializer;
}

#pragma mark -

- (AFHTTPRequestOperation *)HTTPRequestOperationWithHTTPMethod:(NSString *)method


URLString:(NSString
*)URLString
parameters:(id)parameters
success:(void (^)
(AFHTTPRequestOperation *operation, id responseObject))success
failure:(void (^)
(AFHTTPRequestOperation *operation, NSError *error))failure
{
NSError *serializationError = nil;
NSMutableURLRequest *request = [self.requestSerializer requestWithMethod:method
URLString:[[NSURL URLWithString:URLString relativeToURL:self.baseURL]
absoluteString] parameters:parameters error:&serializationError];
if (serializationError) {
if (failure) {
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wgnu"
dispatch_async(self.completionQueue ?: dispatch_get_main_queue(), ^{
failure(nil, serializationError);
});
#pragma clang diagnostic pop
}

return nil;
}

return [self HTTPRequestOperationWithRequest:request success:success


failure:failure];
}

- (AFHTTPRequestOperation *)HTTPRequestOperationWithRequest:(NSURLRequest *)request


success:(void (^)
(AFHTTPRequestOperation *operation, id responseObject))success
failure:(void (^)
(AFHTTPRequestOperation *operation, NSError *error))failure
{
AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc]
initWithRequest:request];
operation.responseSerializer = self.responseSerializer;
operation.shouldUseCredentialStorage = self.shouldUseCredentialStorage;
operation.credential = self.credential;
operation.securityPolicy = self.securityPolicy;

[operation setCompletionBlockWithSuccess:success failure:failure];


operation.completionQueue = self.completionQueue;
operation.completionGroup = self.completionGroup;

return operation;
}

#pragma mark -

- (AFHTTPRequestOperation *)GET:(NSString *)URLString


parameters:(id)parameters
success:(void (^)(AFHTTPRequestOperation *operation, id
responseObject))success
failure:(void (^)(AFHTTPRequestOperation *operation,
NSError *error))failure
{
AFHTTPRequestOperation *operation = [self
HTTPRequestOperationWithHTTPMethod:@"GET" URLString:URLString parameters:parameters
success:success failure:failure];

[self.operationQueue addOperation:operation];

return operation;
}

- (AFHTTPRequestOperation *)HEAD:(NSString *)URLString


parameters:(id)parameters
success:(void (^)(AFHTTPRequestOperation
*operation))success
failure:(void (^)(AFHTTPRequestOperation *operation,
NSError *error))failure
{
AFHTTPRequestOperation *operation = [self
HTTPRequestOperationWithHTTPMethod:@"HEAD" URLString:URLString
parameters:parameters success:^(AFHTTPRequestOperation *requestOperation, __unused
id responseObject) {
if (success) {
success(requestOperation);
}
} failure:failure];

[self.operationQueue addOperation:operation];

return operation;
}

- (AFHTTPRequestOperation *)POST:(NSString *)URLString


parameters:(id)parameters
success:(void (^)(AFHTTPRequestOperation *operation, id
responseObject))success
failure:(void (^)(AFHTTPRequestOperation *operation,
NSError *error))failure
{
AFHTTPRequestOperation *operation = [self
HTTPRequestOperationWithHTTPMethod:@"POST" URLString:URLString
parameters:parameters success:success failure:failure];

[self.operationQueue addOperation:operation];

return operation;
}

- (AFHTTPRequestOperation *)POST:(NSString *)URLString


parameters:(id)parameters
constructingBodyWithBlock:(void (^)(id <AFMultipartFormData> formData))block
success:(void (^)(AFHTTPRequestOperation *operation, id
responseObject))success
failure:(void (^)(AFHTTPRequestOperation *operation,
NSError *error))failure
{
NSError *serializationError = nil;
NSMutableURLRequest *request = [self.requestSerializer
multipartFormRequestWithMethod:@"POST" URLString:[[NSURL URLWithString:URLString
relativeToURL:self.baseURL] absoluteString] parameters:parameters
constructingBodyWithBlock:block error:&serializationError];
if (serializationError) {
if (failure) {
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wgnu"
dispatch_async(self.completionQueue ?: dispatch_get_main_queue(), ^{
failure(nil, serializationError);
});
#pragma clang diagnostic pop
}

return nil;
}

AFHTTPRequestOperation *operation = [self


HTTPRequestOperationWithRequest:request success:success failure:failure];

[self.operationQueue addOperation:operation];

return operation;
}
- (AFHTTPRequestOperation *)PUT:(NSString *)URLString
parameters:(id)parameters
success:(void (^)(AFHTTPRequestOperation *operation, id
responseObject))success
failure:(void (^)(AFHTTPRequestOperation *operation,
NSError *error))failure
{
AFHTTPRequestOperation *operation = [self
HTTPRequestOperationWithHTTPMethod:@"PUT" URLString:URLString parameters:parameters
success:success failure:failure];

[self.operationQueue addOperation:operation];

return operation;
}

- (AFHTTPRequestOperation *)PATCH:(NSString *)URLString


parameters:(id)parameters
success:(void (^)(AFHTTPRequestOperation *operation, id
responseObject))success
failure:(void (^)(AFHTTPRequestOperation *operation,
NSError *error))failure
{
AFHTTPRequestOperation *operation = [self
HTTPRequestOperationWithHTTPMethod:@"PATCH" URLString:URLString
parameters:parameters success:success failure:failure];

[self.operationQueue addOperation:operation];

return operation;
}

- (AFHTTPRequestOperation *)DELETE:(NSString *)URLString


parameters:(id)parameters
success:(void (^)(AFHTTPRequestOperation *operation, id
responseObject))success
failure:(void (^)(AFHTTPRequestOperation *operation,
NSError *error))failure
{
AFHTTPRequestOperation *operation = [self
HTTPRequestOperationWithHTTPMethod:@"DELETE" URLString:URLString
parameters:parameters success:success failure:failure];

[self.operationQueue addOperation:operation];

return operation;
}

#pragma mark - NSObject

- (NSString *)description {
return [NSString stringWithFormat:@"<%@: %p, baseURL: %@, operationQueue: %@>",
NSStringFromClass([self class]), self, [self.baseURL absoluteString],
self.operationQueue];
}

#pragma mark - NSSecureCoding

+ (BOOL)supportsSecureCoding {
return YES;
}

- (id)initWithCoder:(NSCoder *)decoder {
NSURL *baseURL = [decoder
decodeObjectForKey:NSStringFromSelector(@selector(baseURL))];

self = [self initWithBaseURL:baseURL];


if (!self) {
return nil;
}

self.requestSerializer = [decoder decodeObjectOfClass:[AFHTTPRequestSerializer


class] forKey:NSStringFromSelector(@selector(requestSerializer))];
self.responseSerializer = [decoder decodeObjectOfClass:
[AFHTTPResponseSerializer class]
forKey:NSStringFromSelector(@selector(responseSerializer))];

return self;
}

- (void)encodeWithCoder:(NSCoder *)coder {
[coder encodeObject:self.baseURL
forKey:NSStringFromSelector(@selector(baseURL))];
[coder encodeObject:self.requestSerializer
forKey:NSStringFromSelector(@selector(requestSerializer))];
[coder encodeObject:self.responseSerializer
forKey:NSStringFromSelector(@selector(responseSerializer))];
}

#pragma mark - NSCopying

- (id)copyWithZone:(NSZone *)zone {
AFHTTPRequestOperationManager *HTTPClient = [[[self class] allocWithZone:zone]
initWithBaseURL:self.baseURL];

HTTPClient.requestSerializer = [self.requestSerializer copyWithZone:zone];


HTTPClient.responseSerializer = [self.responseSerializer copyWithZone:zone];

return HTTPClient;
}

@end

Вам также может понравиться