[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>
// Error codes for AFNetworkingErrorDomain correspond to codes in NSURLErrorDomain
extern NSString * const AFNetworkingErrorDomain;
extern NSString * const AFHTTPOperationDidStartNotification;
extern NSString * const AFHTTPOperationDidFinishNotification;

View file

@ -32,8 +32,10 @@ typedef enum {
AFHTTPOperationCancelledState = 4,
} AFHTTPOperationState;
NSString * const AFHTTPOperationDidStartNotification = @"com.alamofire.http-operation.start";
NSString * const AFHTTPOperationDidFinishNotification = @"com.alamofire.http-operation.finish";
NSString * const AFNetworkingErrorDomain = @"com.alamofire.networking.error";
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 (^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) {
if (!error) {
BOOL statusCodeAcceptable = [acceptableStatusCodes containsIndex:[response statusCode]];
BOOL contentTypeAcceptable = [acceptableContentTypes containsObject:[response MIMEType]];
if (!statusCodeAcceptable || !contentTypeAcceptable) {
if (![acceptableStatusCodes containsIndex:[response statusCode]]) {
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];
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>
extern NSString * const kAFZlibErrorDomain;
extern NSString * const AFZlibErrorDomain;
@interface NSData (AFNetworking)

View file

@ -21,9 +21,11 @@
// THE SOFTWARE.
#import "NSData+AFNetworking.h"
#import "AFHTTPRequestOperation.h"
#import <zlib.h>
NSString * const kAFZlibErrorDomain = @"com.alamofire.zlib.error";
NSString * const AFZlibErrorDomain = @"com.alamofire.networking.zlib.error";
static char Base64EncodingTable[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
@ -72,7 +74,7 @@ typedef enum {
break;
} else if (status != Z_OK) {
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;