HTTPMessage.m 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. #import "HTTPMessage.h"
  2. #if ! __has_feature(objc_arc)
  3. #warning This file must be compiled with ARC. Use -fobjc-arc flag (or convert project to ARC).
  4. #endif
  5. #pragma clang diagnostic ignored "-Wdirect-ivar-access"
  6. @implementation HTTPMessage
  7. - (id)initEmptyRequest
  8. {
  9. if ((self = [super init]))
  10. {
  11. message = CFHTTPMessageCreateEmpty(NULL, YES);
  12. }
  13. return self;
  14. }
  15. - (id)initRequestWithMethod:(NSString *)method URL:(NSURL *)url version:(NSString *)version
  16. {
  17. if ((self = [super init]))
  18. {
  19. message = CFHTTPMessageCreateRequest(NULL,
  20. (__bridge CFStringRef)method,
  21. (__bridge CFURLRef)url,
  22. (__bridge CFStringRef)version);
  23. }
  24. return self;
  25. }
  26. - (id)initResponseWithStatusCode:(NSInteger)code description:(NSString *)description version:(NSString *)version
  27. {
  28. if ((self = [super init]))
  29. {
  30. message = CFHTTPMessageCreateResponse(NULL,
  31. (CFIndex)code,
  32. (__bridge CFStringRef)description,
  33. (__bridge CFStringRef)version);
  34. }
  35. return self;
  36. }
  37. - (void)dealloc
  38. {
  39. if (message)
  40. {
  41. CFRelease(message);
  42. }
  43. }
  44. - (BOOL)appendData:(NSData *)data
  45. {
  46. return CFHTTPMessageAppendBytes(message, [data bytes], [data length]);
  47. }
  48. - (BOOL)isHeaderComplete
  49. {
  50. return CFHTTPMessageIsHeaderComplete(message);
  51. }
  52. - (NSString *)version
  53. {
  54. return (__bridge_transfer NSString *)CFHTTPMessageCopyVersion(message);
  55. }
  56. - (NSString *)method
  57. {
  58. return (__bridge_transfer NSString *)CFHTTPMessageCopyRequestMethod(message);
  59. }
  60. - (NSURL *)url
  61. {
  62. return (__bridge_transfer NSURL *)CFHTTPMessageCopyRequestURL(message);
  63. }
  64. - (NSInteger)statusCode
  65. {
  66. return (NSInteger)CFHTTPMessageGetResponseStatusCode(message);
  67. }
  68. - (NSDictionary *)allHeaderFields
  69. {
  70. return (__bridge_transfer NSDictionary *)CFHTTPMessageCopyAllHeaderFields(message);
  71. }
  72. - (NSString *)headerField:(NSString *)headerField
  73. {
  74. return (__bridge_transfer NSString *)CFHTTPMessageCopyHeaderFieldValue(message, (__bridge CFStringRef)headerField);
  75. }
  76. - (void)setHeaderField:(NSString *)headerField value:(NSString *)headerFieldValue
  77. {
  78. CFHTTPMessageSetHeaderFieldValue(message,
  79. (__bridge CFStringRef)headerField,
  80. (__bridge CFStringRef)headerFieldValue);
  81. }
  82. - (NSData *)messageData
  83. {
  84. return (__bridge_transfer NSData *)CFHTTPMessageCopySerializedMessage(message);
  85. }
  86. - (NSData *)body
  87. {
  88. return (__bridge_transfer NSData *)CFHTTPMessageCopyBody(message);
  89. }
  90. - (void)setBody:(NSData *)body
  91. {
  92. CFHTTPMessageSetBody(message, (__bridge CFDataRef)body);
  93. }
  94. @end