#import "HTTPMessage.h" #if ! __has_feature(objc_arc) #warning This file must be compiled with ARC. Use -fobjc-arc flag (or convert project to ARC). #endif @implementation HTTPMessage - (id)initEmptyRequest { if ((self = [super init])) { message = CFHTTPMessageCreateEmpty(NULL, YES); } return self; } - (id)initRequestWithMethod:(NSString *)method URL:(NSURL *)url version:(NSString *)version { if ((self = [super init])) { message = CFHTTPMessageCreateRequest(NULL, (__bridge CFStringRef)method, (__bridge CFURLRef)url, (__bridge CFStringRef)version); } return self; } - (id)initResponseWithStatusCode:(NSInteger)code description:(NSString *)description version:(NSString *)version { if ((self = [super init])) { message = CFHTTPMessageCreateResponse(NULL, (CFIndex)code, (__bridge CFStringRef)description, (__bridge CFStringRef)version); } return self; } - (void)dealloc { if (message) { CFRelease(message); } } - (BOOL)appendData:(NSData *)data { return CFHTTPMessageAppendBytes(message, [data bytes], [data length]); } - (BOOL)isHeaderComplete { return CFHTTPMessageIsHeaderComplete(message); } - (NSString *)version { return (__bridge_transfer NSString *)CFHTTPMessageCopyVersion(message); } - (NSString *)method { return (__bridge_transfer NSString *)CFHTTPMessageCopyRequestMethod(message); } - (NSURL *)url { return (__bridge_transfer NSURL *)CFHTTPMessageCopyRequestURL(message); } - (NSInteger)statusCode { return (NSInteger)CFHTTPMessageGetResponseStatusCode(message); } - (NSDictionary *)allHeaderFields { return (__bridge_transfer NSDictionary *)CFHTTPMessageCopyAllHeaderFields(message); } - (NSString *)headerField:(NSString *)headerField { return (__bridge_transfer NSString *)CFHTTPMessageCopyHeaderFieldValue(message, (__bridge CFStringRef)headerField); } - (void)setHeaderField:(NSString *)headerField value:(NSString *)headerFieldValue { CFHTTPMessageSetHeaderFieldValue(message, (__bridge CFStringRef)headerField, (__bridge CFStringRef)headerFieldValue); } - (NSData *)messageData { return (__bridge_transfer NSData *)CFHTTPMessageCopySerializedMessage(message); } - (NSData *)body { return (__bridge_transfer NSData *)CFHTTPMessageCopyBody(message); } - (void)setBody:(NSData *)body { CFHTTPMessageSetBody(message, (__bridge CFDataRef)body); } @end