|
@@ -90,25 +90,21 @@ static NSString * AFBase64EncodedStringFromString(NSString *string) {
|
|
output[idx + 3] = (i + 2) < length ? kAFBase64EncodingTable[(value >> 0) & 0x3F] : '=';
|
|
output[idx + 3] = (i + 2) < length ? kAFBase64EncodingTable[(value >> 0) & 0x3F] : '=';
|
|
}
|
|
}
|
|
|
|
|
|
- return [[[NSString alloc] initWithData:mutableData encoding:NSASCIIStringEncoding] autorelease];
|
|
|
|
|
|
+ return [[NSString alloc] initWithData:mutableData encoding:NSASCIIStringEncoding];
|
|
}
|
|
}
|
|
|
|
|
|
NSString * AFURLEncodedStringFromStringWithEncoding(NSString *string, NSStringEncoding encoding) {
|
|
NSString * AFURLEncodedStringFromStringWithEncoding(NSString *string, NSStringEncoding encoding) {
|
|
static NSString * const kAFLegalCharactersToBeEscaped = @"?!@#$^&%*+=,:;'\"`<>()[]{}/\\|~ ";
|
|
static NSString * const kAFLegalCharactersToBeEscaped = @"?!@#$^&%*+=,:;'\"`<>()[]{}/\\|~ ";
|
|
|
|
|
|
- return [(NSString *)CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef)string, NULL, (CFStringRef)kAFLegalCharactersToBeEscaped, CFStringConvertNSStringEncodingToEncoding(encoding)) autorelease];
|
|
|
|
|
|
+ return (__bridge_transfer NSString *)CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (__bridge CFStringRef)string, NULL, (__bridge CFStringRef)kAFLegalCharactersToBeEscaped, CFStringConvertNSStringEncodingToEncoding(encoding));
|
|
}
|
|
}
|
|
|
|
|
|
#pragma mark -
|
|
#pragma mark -
|
|
|
|
|
|
-@interface AFQueryStringComponent : NSObject {
|
|
|
|
-@private
|
|
|
|
- NSString *_key;
|
|
|
|
- NSString *_value;
|
|
|
|
-}
|
|
|
|
|
|
+@interface AFQueryStringComponent : NSObject
|
|
|
|
|
|
-@property (readwrite, nonatomic, retain) id key;
|
|
|
|
-@property (readwrite, nonatomic, retain) id value;
|
|
|
|
|
|
+@property (readwrite, nonatomic) id key;
|
|
|
|
+@property (readwrite, nonatomic) id value;
|
|
|
|
|
|
- (id)initWithKey:(id)key value:(id)value;
|
|
- (id)initWithKey:(id)key value:(id)value;
|
|
- (NSString *)URLEncodedStringValueWithEncoding:(NSStringEncoding)stringEncoding;
|
|
- (NSString *)URLEncodedStringValueWithEncoding:(NSStringEncoding)stringEncoding;
|
|
@@ -125,18 +121,12 @@ NSString * AFURLEncodedStringFromStringWithEncoding(NSString *string, NSStringEn
|
|
return nil;
|
|
return nil;
|
|
}
|
|
}
|
|
|
|
|
|
- self.key = key;
|
|
|
|
- self.value = value;
|
|
|
|
|
|
+ _key = key;
|
|
|
|
+ _value = value;
|
|
|
|
|
|
return self;
|
|
return self;
|
|
}
|
|
}
|
|
|
|
|
|
-- (void)dealloc {
|
|
|
|
- [_key release];
|
|
|
|
- [_value release];
|
|
|
|
- [super dealloc];
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
- (NSString *)URLEncodedStringValueWithEncoding:(NSStringEncoding)stringEncoding {
|
|
- (NSString *)URLEncodedStringValueWithEncoding:(NSStringEncoding)stringEncoding {
|
|
return [NSString stringWithFormat:@"%@=%@", self.key, AFURLEncodedStringFromStringWithEncoding([self.value description], stringEncoding)];
|
|
return [NSString stringWithFormat:@"%@=%@", self.key, AFURLEncodedStringFromStringWithEncoding([self.value description], stringEncoding)];
|
|
}
|
|
}
|
|
@@ -166,7 +156,7 @@ NSArray * AFQueryStringComponentsFromKeyAndValue(NSString *key, id value) {
|
|
} else if([value isKindOfClass:[NSArray class]]) {
|
|
} else if([value isKindOfClass:[NSArray class]]) {
|
|
[mutableQueryStringComponents addObjectsFromArray:AFQueryStringComponentsFromKeyAndArrayValue(key, value)];
|
|
[mutableQueryStringComponents addObjectsFromArray:AFQueryStringComponentsFromKeyAndArrayValue(key, value)];
|
|
} else {
|
|
} else {
|
|
- [mutableQueryStringComponents addObject:[[[AFQueryStringComponent alloc] initWithKey:key value:value] autorelease]];
|
|
|
|
|
|
+ [mutableQueryStringComponents addObject:[[AFQueryStringComponent alloc] initWithKey:key value:value]];
|
|
}
|
|
}
|
|
|
|
|
|
return mutableQueryStringComponents;
|
|
return mutableQueryStringComponents;
|
|
@@ -197,7 +187,7 @@ static NSString * AFJSONStringFromParameters(NSDictionary *parameters) {
|
|
NSData *JSONData = [NSJSONSerialization dataWithJSONObject:parameters options:0 error:&error];;
|
|
NSData *JSONData = [NSJSONSerialization dataWithJSONObject:parameters options:0 error:&error];;
|
|
|
|
|
|
if (!error) {
|
|
if (!error) {
|
|
- return [[[NSString alloc] initWithData:JSONData encoding:NSUTF8StringEncoding] autorelease];
|
|
|
|
|
|
+ return [[NSString alloc] initWithData:JSONData encoding:NSUTF8StringEncoding];
|
|
} else {
|
|
} else {
|
|
return nil;
|
|
return nil;
|
|
}
|
|
}
|
|
@@ -209,17 +199,17 @@ static NSString * AFPropertyListStringFromParameters(NSDictionary *parameters) {
|
|
|
|
|
|
NSData *propertyListData = [NSPropertyListSerialization dataWithPropertyList:parameters format:NSPropertyListXMLFormat_v1_0 options:0 error:&error];
|
|
NSData *propertyListData = [NSPropertyListSerialization dataWithPropertyList:parameters format:NSPropertyListXMLFormat_v1_0 options:0 error:&error];
|
|
if (!error) {
|
|
if (!error) {
|
|
- propertyListString = [[[NSString alloc] initWithData:propertyListData encoding:NSUTF8StringEncoding] autorelease];
|
|
|
|
|
|
+ propertyListString = [[NSString alloc] initWithData:propertyListData encoding:NSUTF8StringEncoding] ;
|
|
}
|
|
}
|
|
|
|
|
|
return propertyListString;
|
|
return propertyListString;
|
|
}
|
|
}
|
|
|
|
|
|
@interface AFHTTPClient ()
|
|
@interface AFHTTPClient ()
|
|
-@property (readwrite, nonatomic, retain) NSURL *baseURL;
|
|
|
|
-@property (readwrite, nonatomic, retain) NSMutableArray *registeredHTTPOperationClassNames;
|
|
|
|
-@property (readwrite, nonatomic, retain) NSMutableDictionary *defaultHeaders;
|
|
|
|
-@property (readwrite, nonatomic, retain) NSOperationQueue *operationQueue;
|
|
|
|
|
|
+@property (readwrite, nonatomic) NSURL *baseURL;
|
|
|
|
+@property (readwrite, nonatomic) NSMutableArray *registeredHTTPOperationClassNames;
|
|
|
|
+@property (readwrite, nonatomic) NSMutableDictionary *defaultHeaders;
|
|
|
|
+@property (readwrite, nonatomic) NSOperationQueue *operationQueue;
|
|
#ifdef _SYSTEMCONFIGURATION_H
|
|
#ifdef _SYSTEMCONFIGURATION_H
|
|
@property (readwrite, nonatomic, assign) AFNetworkReachabilityRef networkReachability;
|
|
@property (readwrite, nonatomic, assign) AFNetworkReachabilityRef networkReachability;
|
|
@property (readwrite, nonatomic, assign) AFNetworkReachabilityStatus networkReachabilityStatus;
|
|
@property (readwrite, nonatomic, assign) AFNetworkReachabilityStatus networkReachabilityStatus;
|
|
@@ -246,7 +236,7 @@ static NSString * AFPropertyListStringFromParameters(NSDictionary *parameters) {
|
|
#endif
|
|
#endif
|
|
|
|
|
|
+ (AFHTTPClient *)clientWithBaseURL:(NSURL *)url {
|
|
+ (AFHTTPClient *)clientWithBaseURL:(NSURL *)url {
|
|
- return [[[self alloc] initWithBaseURL:url] autorelease];
|
|
|
|
|
|
+ return [[self alloc] initWithBaseURL:url];
|
|
}
|
|
}
|
|
|
|
|
|
- (id)initWithBaseURL:(NSURL *)url {
|
|
- (id)initWithBaseURL:(NSURL *)url {
|
|
@@ -283,7 +273,7 @@ static NSString * AFPropertyListStringFromParameters(NSDictionary *parameters) {
|
|
[self startMonitoringNetworkReachability];
|
|
[self startMonitoringNetworkReachability];
|
|
#endif
|
|
#endif
|
|
|
|
|
|
- self.operationQueue = [[[NSOperationQueue alloc] init] autorelease];
|
|
|
|
|
|
+ self.operationQueue = [[NSOperationQueue alloc] init];
|
|
[self.operationQueue setMaxConcurrentOperationCount:kAFHTTPClientDefaultMaxConcurrentOperationCount];
|
|
[self.operationQueue setMaxConcurrentOperationCount:kAFHTTPClientDefaultMaxConcurrentOperationCount];
|
|
|
|
|
|
return self;
|
|
return self;
|
|
@@ -292,15 +282,9 @@ static NSString * AFPropertyListStringFromParameters(NSDictionary *parameters) {
|
|
- (void)dealloc {
|
|
- (void)dealloc {
|
|
#ifdef _SYSTEMCONFIGURATION_H
|
|
#ifdef _SYSTEMCONFIGURATION_H
|
|
[self stopMonitoringNetworkReachability];
|
|
[self stopMonitoringNetworkReachability];
|
|
- [_networkReachabilityStatusBlock release];
|
|
|
|
#endif
|
|
#endif
|
|
|
|
|
|
- [_baseURL release];
|
|
|
|
- [_registeredHTTPOperationClassNames release];
|
|
|
|
- [_defaultHeaders release];
|
|
|
|
- [_operationQueue release];
|
|
|
|
|
|
|
|
- [super dealloc];
|
|
|
|
}
|
|
}
|
|
|
|
|
|
- (NSString *)description {
|
|
- (NSString *)description {
|
|
@@ -340,7 +324,7 @@ static AFNetworkReachabilityStatus AFNetworkReachabilityStatusForFlags(SCNetwork
|
|
|
|
|
|
static void AFNetworkReachabilityCallback(SCNetworkReachabilityRef __unused target, SCNetworkReachabilityFlags flags, void *info) {
|
|
static void AFNetworkReachabilityCallback(SCNetworkReachabilityRef __unused target, SCNetworkReachabilityFlags flags, void *info) {
|
|
AFNetworkReachabilityStatus status = AFNetworkReachabilityStatusForFlags(flags);
|
|
AFNetworkReachabilityStatus status = AFNetworkReachabilityStatusForFlags(flags);
|
|
- AFNetworkReachabilityStatusBlock block = (AFNetworkReachabilityStatusBlock)info;
|
|
|
|
|
|
+ AFNetworkReachabilityStatusBlock block = (__bridge AFNetworkReachabilityStatusBlock)info;
|
|
if (block) {
|
|
if (block) {
|
|
block(status);
|
|
block(status);
|
|
}
|
|
}
|
|
@@ -349,11 +333,10 @@ static void AFNetworkReachabilityCallback(SCNetworkReachabilityRef __unused targ
|
|
}
|
|
}
|
|
|
|
|
|
static const void * AFNetworkReachabilityRetainCallback(const void *info) {
|
|
static const void * AFNetworkReachabilityRetainCallback(const void *info) {
|
|
- return [(AFNetworkReachabilityStatusBlock)info copy];
|
|
|
|
|
|
+ return (__bridge_retained const void *)([(__bridge AFNetworkReachabilityStatusBlock)info copy]);
|
|
}
|
|
}
|
|
|
|
|
|
static void AFNetworkReachabilityReleaseCallback(const void *info) {
|
|
static void AFNetworkReachabilityReleaseCallback(const void *info) {
|
|
- [(AFNetworkReachabilityStatusBlock)info release];
|
|
|
|
}
|
|
}
|
|
|
|
|
|
- (void)startMonitoringNetworkReachability {
|
|
- (void)startMonitoringNetworkReachability {
|
|
@@ -372,7 +355,7 @@ static void AFNetworkReachabilityReleaseCallback(const void *info) {
|
|
}
|
|
}
|
|
};
|
|
};
|
|
|
|
|
|
- SCNetworkReachabilityContext context = {0, callback, AFNetworkReachabilityRetainCallback, AFNetworkReachabilityReleaseCallback, NULL};
|
|
|
|
|
|
+ SCNetworkReachabilityContext context = {0, (__bridge void *)callback, AFNetworkReachabilityRetainCallback, AFNetworkReachabilityReleaseCallback, NULL};
|
|
SCNetworkReachabilitySetCallback(self.networkReachability, AFNetworkReachabilityCallback, &context);
|
|
SCNetworkReachabilitySetCallback(self.networkReachability, AFNetworkReachabilityCallback, &context);
|
|
SCNetworkReachabilityScheduleWithRunLoop(self.networkReachability, CFRunLoopGetMain(), (CFStringRef)NSRunLoopCommonModes);
|
|
SCNetworkReachabilityScheduleWithRunLoop(self.networkReachability, CFRunLoopGetMain(), (CFStringRef)NSRunLoopCommonModes);
|
|
|
|
|
|
@@ -449,7 +432,7 @@ static void AFNetworkReachabilityReleaseCallback(const void *info) {
|
|
parameters:(NSDictionary *)parameters
|
|
parameters:(NSDictionary *)parameters
|
|
{
|
|
{
|
|
NSURL *url = [NSURL URLWithString:path relativeToURL:self.baseURL];
|
|
NSURL *url = [NSURL URLWithString:path relativeToURL:self.baseURL];
|
|
- NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] initWithURL:url] autorelease];
|
|
|
|
|
|
+ NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url];
|
|
[request setHTTPMethod:method];
|
|
[request setHTTPMethod:method];
|
|
[request setAllHTTPHeaderFields:self.defaultHeaders];
|
|
[request setAllHTTPHeaderFields:self.defaultHeaders];
|
|
|
|
|
|
@@ -462,7 +445,7 @@ static void AFNetworkReachabilityReleaseCallback(const void *info) {
|
|
url = [NSURL URLWithString:[[url absoluteString] stringByAppendingFormat:[path rangeOfString:@"?"].location == NSNotFound ? @"?%@" : @"&%@", AFQueryStringFromParametersWithEncoding(parameters, self.stringEncoding)]];
|
|
url = [NSURL URLWithString:[[url absoluteString] stringByAppendingFormat:[path rangeOfString:@"?"].location == NSNotFound ? @"?%@" : @"&%@", AFQueryStringFromParametersWithEncoding(parameters, self.stringEncoding)]];
|
|
[request setURL:url];
|
|
[request setURL:url];
|
|
} else {
|
|
} else {
|
|
- NSString *charset = (NSString *)CFStringConvertEncodingToIANACharSetName(CFStringConvertNSStringEncodingToEncoding(self.stringEncoding));
|
|
|
|
|
|
+ NSString *charset = (__bridge NSString *)CFStringConvertEncodingToIANACharSetName(CFStringConvertNSStringEncodingToEncoding(self.stringEncoding));
|
|
switch (self.parameterEncoding) {
|
|
switch (self.parameterEncoding) {
|
|
case AFFormURLParameterEncoding:;
|
|
case AFFormURLParameterEncoding:;
|
|
[request setValue:[NSString stringWithFormat:@"application/x-www-form-urlencoded; charset=%@", charset] forHTTPHeaderField:@"Content-Type"];
|
|
[request setValue:[NSString stringWithFormat:@"application/x-www-form-urlencoded; charset=%@", charset] forHTTPHeaderField:@"Content-Type"];
|
|
@@ -489,7 +472,7 @@ static void AFNetworkReachabilityReleaseCallback(const void *info) {
|
|
constructingBodyWithBlock:(void (^)(id <AFMultipartFormData>formData))block
|
|
constructingBodyWithBlock:(void (^)(id <AFMultipartFormData>formData))block
|
|
{
|
|
{
|
|
NSMutableURLRequest *request = [self requestWithMethod:method path:path parameters:nil];
|
|
NSMutableURLRequest *request = [self requestWithMethod:method path:path parameters:nil];
|
|
- __block AFMultipartFormData *formData = [[[AFMultipartFormData alloc] initWithURLRequest:request stringEncoding:self.stringEncoding] autorelease];
|
|
|
|
|
|
+ __block AFMultipartFormData *formData = [[AFMultipartFormData alloc] initWithURLRequest:request stringEncoding:self.stringEncoding];
|
|
|
|
|
|
if (parameters) {
|
|
if (parameters) {
|
|
for (AFQueryStringComponent *component in AFQueryStringComponentsFromKeyAndValue(nil, parameters)) {
|
|
for (AFQueryStringComponent *component in AFQueryStringComponentsFromKeyAndValue(nil, parameters)) {
|
|
@@ -523,12 +506,12 @@ static void AFNetworkReachabilityReleaseCallback(const void *info) {
|
|
while (!operation && (className = [enumerator nextObject])) {
|
|
while (!operation && (className = [enumerator nextObject])) {
|
|
Class op_class = NSClassFromString(className);
|
|
Class op_class = NSClassFromString(className);
|
|
if (op_class && [op_class canProcessRequest:urlRequest]) {
|
|
if (op_class && [op_class canProcessRequest:urlRequest]) {
|
|
- operation = [[(AFHTTPRequestOperation *)[op_class alloc] initWithRequest:urlRequest] autorelease];
|
|
|
|
|
|
+ operation = [(AFHTTPRequestOperation *)[op_class alloc] initWithRequest:urlRequest];
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
if (!operation) {
|
|
if (!operation) {
|
|
- operation = [[[AFHTTPRequestOperation alloc] initWithRequest:urlRequest] autorelease];
|
|
|
|
|
|
+ operation = [[AFHTTPRequestOperation alloc] initWithRequest:urlRequest];
|
|
}
|
|
}
|
|
|
|
|
|
[operation setCompletionBlockWithSuccess:success failure:failure];
|
|
[operation setCompletionBlockWithSuccess:success failure:failure];
|
|
@@ -584,7 +567,7 @@ static void AFNetworkReachabilityReleaseCallback(const void *info) {
|
|
NSPredicate *finishedOperationPredicate = [NSPredicate predicateWithFormat:@"isFinished == YES"];
|
|
NSPredicate *finishedOperationPredicate = [NSPredicate predicateWithFormat:@"isFinished == YES"];
|
|
|
|
|
|
for (AFHTTPRequestOperation *operation in operations) {
|
|
for (AFHTTPRequestOperation *operation in operations) {
|
|
- AFCompletionBlock originalCompletionBlock = [[operation.completionBlock copy] autorelease];
|
|
|
|
|
|
+ AFCompletionBlock originalCompletionBlock = [operation.completionBlock copy];
|
|
operation.completionBlock = ^{
|
|
operation.completionBlock = ^{
|
|
dispatch_queue_t queue = operation.successCallbackQueue ? operation.successCallbackQueue : dispatch_get_main_queue();
|
|
dispatch_queue_t queue = operation.successCallbackQueue ? operation.successCallbackQueue : dispatch_get_main_queue();
|
|
dispatch_group_async(dispatchGroup, queue, ^{
|
|
dispatch_group_async(dispatchGroup, queue, ^{
|
|
@@ -698,9 +681,9 @@ static inline NSString * AFMultipartFormFinalBoundary() {
|
|
}
|
|
}
|
|
|
|
|
|
@interface AFMultipartFormData ()
|
|
@interface AFMultipartFormData ()
|
|
-@property (readwrite, nonatomic, retain) NSMutableURLRequest *request;
|
|
|
|
|
|
+@property (readwrite, nonatomic) NSMutableURLRequest *request;
|
|
@property (readwrite, nonatomic, assign) NSStringEncoding stringEncoding;
|
|
@property (readwrite, nonatomic, assign) NSStringEncoding stringEncoding;
|
|
-@property (readwrite, nonatomic, retain) NSOutputStream *outputStream;
|
|
|
|
|
|
+@property (readwrite, nonatomic) NSOutputStream *outputStream;
|
|
@property (readwrite, nonatomic, copy) NSString *temporaryFilePath;
|
|
@property (readwrite, nonatomic, copy) NSString *temporaryFilePath;
|
|
@end
|
|
@end
|
|
|
|
|
|
@@ -732,16 +715,11 @@ static inline NSString * AFMultipartFormFinalBoundary() {
|
|
}
|
|
}
|
|
|
|
|
|
- (void)dealloc {
|
|
- (void)dealloc {
|
|
- [_request release];
|
|
|
|
|
|
|
|
if (_outputStream) {
|
|
if (_outputStream) {
|
|
[_outputStream close];
|
|
[_outputStream close];
|
|
- [_outputStream release];
|
|
|
|
- _outputStream = nil;
|
|
|
|
}
|
|
}
|
|
|
|
|
|
- [_temporaryFilePath release];
|
|
|
|
- [super dealloc];
|
|
|
|
}
|
|
}
|
|
|
|
|
|
- (NSMutableURLRequest *)requestByFinalizingMultipartFormData {
|
|
- (NSMutableURLRequest *)requestByFinalizingMultipartFormData {
|
|
@@ -816,7 +794,7 @@ static inline NSString * AFMultipartFormFinalBoundary() {
|
|
[userInfo setValue:fileURL forKey:NSURLErrorFailingURLErrorKey];
|
|
[userInfo setValue:fileURL forKey:NSURLErrorFailingURLErrorKey];
|
|
[userInfo setValue:NSLocalizedString(@"Expected URL to be a file URL", nil) forKey:NSLocalizedFailureReasonErrorKey];
|
|
[userInfo setValue:NSLocalizedString(@"Expected URL to be a file URL", nil) forKey:NSLocalizedFailureReasonErrorKey];
|
|
if (error != NULL) {
|
|
if (error != NULL) {
|
|
- *error = [[[NSError alloc] initWithDomain:AFNetworkingErrorDomain code:NSURLErrorBadURL userInfo:userInfo] autorelease];
|
|
|
|
|
|
+ *error = [[NSError alloc] initWithDomain:AFNetworkingErrorDomain code:NSURLErrorBadURL userInfo:userInfo];
|
|
}
|
|
}
|
|
|
|
|
|
return NO;
|
|
return NO;
|