[Issue #16] Formalizing AFNetworkingErrorDomain, and constructing errors accordingly

This commit is contained in:
Mattt Thompson 2011-09-15 12:06:25 -05:00
parent a0c570797b
commit d62af91ac9
5 changed files with 25 additions and 12 deletions

View file

@ -22,6 +22,9 @@
#import <Foundation/Foundation.h> #import <Foundation/Foundation.h>
// Error codes for AFNetworkingErrorDomain correspond to codes in NSURLErrorDomain
extern NSString * const AFNetworkingErrorDomain;
extern NSString * const AFHTTPOperationDidStartNotification; extern NSString * const AFHTTPOperationDidStartNotification;
extern NSString * const AFHTTPOperationDidFinishNotification; extern NSString * const AFHTTPOperationDidFinishNotification;

View file

@ -32,8 +32,10 @@ typedef enum {
AFHTTPOperationCancelledState = 4, AFHTTPOperationCancelledState = 4,
} AFHTTPOperationState; } AFHTTPOperationState;
NSString * const AFHTTPOperationDidStartNotification = @"com.alamofire.http-operation.start"; NSString * const AFNetworkingErrorDomain = @"com.alamofire.networking.error";
NSString * const AFHTTPOperationDidFinishNotification = @"com.alamofire.http-operation.finish";
NSString * const AFHTTPOperationDidStartNotification = @"com.alamofire.networking.http-operation.start";
NSString * const AFHTTPOperationDidFinishNotification = @"com.alamofire.networking.http-operation.finish";
typedef void (^AFHTTPRequestOperationProgressBlock)(NSUInteger totalBytes, NSUInteger totalBytesExpected); typedef void (^AFHTTPRequestOperationProgressBlock)(NSUInteger totalBytes, NSUInteger totalBytesExpected);
typedef void (^AFHTTPRequestOperationCompletionBlock)(NSURLRequest *request, NSHTTPURLResponse *response, NSData *data, NSError *error); typedef void (^AFHTTPRequestOperationCompletionBlock)(NSURLRequest *request, NSHTTPURLResponse *response, NSData *data, NSError *error);

View file

@ -65,14 +65,20 @@ static dispatch_queue_t json_request_operation_processing_queue() {
{ {
return [self operationWithRequest:urlRequest completion:^(NSURLRequest *request, NSHTTPURLResponse *response, NSData *data, NSError *error) { return [self operationWithRequest:urlRequest completion:^(NSURLRequest *request, NSHTTPURLResponse *response, NSData *data, NSError *error) {
if (!error) { if (!error) {
BOOL statusCodeAcceptable = [acceptableStatusCodes containsIndex:[response statusCode]]; if (![acceptableStatusCodes containsIndex:[response statusCode]]) {
BOOL contentTypeAcceptable = [acceptableContentTypes containsObject:[response MIMEType]];
if (!statusCodeAcceptable || !contentTypeAcceptable) {
NSMutableDictionary *userInfo = [NSMutableDictionary dictionary]; NSMutableDictionary *userInfo = [NSMutableDictionary dictionary];
[userInfo setValue:[NSHTTPURLResponse localizedStringForStatusCode:[response statusCode]] forKey:NSLocalizedDescriptionKey]; [userInfo setValue:[NSString stringWithFormat:NSLocalizedString(@"Expected status code %@, got %d", nil), acceptableStatusCodes, [response statusCode]] forKey:NSLocalizedDescriptionKey];
[userInfo setValue:[request URL] forKey:NSURLErrorFailingURLErrorKey]; [userInfo setValue:[request URL] forKey:NSURLErrorFailingURLErrorKey];
error = [[[NSError alloc] initWithDomain:NSURLErrorDomain code:[response statusCode] userInfo:userInfo] autorelease]; error = [[[NSError alloc] initWithDomain:AFNetworkingErrorDomain code:NSURLErrorBadServerResponse userInfo:userInfo] autorelease];
}
if (![acceptableContentTypes containsObject:[response MIMEType]]) {
NSMutableDictionary *userInfo = [NSMutableDictionary dictionary];
[userInfo setValue:[NSString stringWithFormat:NSLocalizedString(@"Expected content type %@, got %@", nil), acceptableContentTypes, [response MIMEType]] forKey:NSLocalizedDescriptionKey];
[userInfo setValue:[request URL] forKey:NSURLErrorFailingURLErrorKey];
error = [[[NSError alloc] initWithDomain:AFNetworkingErrorDomain code:NSURLErrorCannotDecodeContentData userInfo:userInfo] autorelease];
} }
} }

View file

@ -22,7 +22,7 @@
#import <Foundation/Foundation.h> #import <Foundation/Foundation.h>
extern NSString * const kAFZlibErrorDomain; extern NSString * const AFZlibErrorDomain;
@interface NSData (AFNetworking) @interface NSData (AFNetworking)

View file

@ -21,9 +21,11 @@
// THE SOFTWARE. // THE SOFTWARE.
#import "NSData+AFNetworking.h" #import "NSData+AFNetworking.h"
#import "AFHTTPRequestOperation.h"
#import <zlib.h> #import <zlib.h>
NSString * const kAFZlibErrorDomain = @"com.alamofire.zlib.error"; NSString * const AFZlibErrorDomain = @"com.alamofire.networking.zlib.error";
static char Base64EncodingTable[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; static char Base64EncodingTable[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
@ -72,7 +74,7 @@ typedef enum {
break; break;
} else if (status != Z_OK) { } else if (status != Z_OK) {
if (error) { if (error) {
*error = [NSError errorWithDomain:kAFZlibErrorDomain code:status userInfo:[NSDictionary dictionaryWithObject:[NSString stringWithFormat:@"Compression of data failed with code %hi", status] forKey:NSLocalizedDescriptionKey]]; *error = [NSError errorWithDomain:AFZlibErrorDomain code:status userInfo:nil];
} }
return nil; return nil;
@ -108,8 +110,8 @@ typedef enum {
} }
NSInteger idx = (i / 3) * 4; NSInteger idx = (i / 3) * 4;
output[idx + 0] = Base64EncodingTable[(value >> 18) & 0x3F]; output[idx + 0] = Base64EncodingTable[(value >> 18) & 0x3F];
output[idx + 1] = Base64EncodingTable[(value >> 12) & 0x3F]; output[idx + 1] = Base64EncodingTable[(value >> 12) & 0x3F];
output[idx + 2] = (i + 1) < length ? Base64EncodingTable[(value >> 6) & 0x3F] : '='; output[idx + 2] = (i + 1) < length ? Base64EncodingTable[(value >> 6) & 0x3F] : '=';
output[idx + 3] = (i + 2) < length ? Base64EncodingTable[(value >> 0) & 0x3F] : '='; output[idx + 3] = (i + 2) < length ? Base64EncodingTable[(value >> 0) & 0x3F] : '=';
} }