NSHTTPCookie.m
1 // 2 // NSHTTPCookie.m 3 // Foundation 4 // 5 // Copyright (c) 2014 Apportable. All rights reserved. 6 // 7 8 #import <Foundation/NSHTTPCookie.h> 9 #import <Foundation/NSArray.h> 10 #import <Foundation/NSDictionary.h> 11 #import <Foundation/NSValue.h> 12 #import <Foundation/NSString.h> 13 #import <Foundation/NSArray.h> 14 #import <Foundation/NSURL.h> 15 #import <Foundation/NSRegularExpression.h> 16 #import <CFNetwork/CFHTTPCookie.h> 17 #import "NSHTTPCookie+private.h" 18 19 NSString * const NSHTTPCookieName = @"Name"; 20 NSString * const NSHTTPCookieValue = @"Value"; 21 NSString * const NSHTTPCookieOriginURL = @"OriginURL"; 22 NSString * const NSHTTPCookieVersion = @"Version"; 23 NSString * const NSHTTPCookieDomain = @"Domain"; 24 NSString * const NSHTTPCookiePath = @"Path"; 25 NSString * const NSHTTPCookieSecure = @"Secure"; 26 NSString * const NSHTTPCookieExpires = @"Expires"; 27 NSString * const NSHTTPCookieComment = @"Comment"; 28 NSString * const NSHTTPCookieCommentURL = @"CommentURL"; 29 NSString * const NSHTTPCookieDiscard = @"Discard"; 30 NSString * const NSHTTPCookieMaximumAge = @"Max-Age"; 31 NSString * const NSHTTPCookiePort = @"Port"; 32 33 34 @implementation NSHTTPCookie 35 36 + (id)cookieWithProperties:(NSDictionary *)properties 37 { 38 return [[[self alloc] initWithProperties:properties] autorelease]; 39 } 40 41 + (NSDictionary *)requestHeaderFieldsWithCookies:(NSArray *)cookies 42 { 43 NSMutableArray *cfCookies = [NSMutableArray arrayWithCapacity:[cookies count]]; 44 45 for (NSHTTPCookie *cookie in cookies) { 46 CFHTTPCookieRef cfCookie = [cookie privateCookie]; 47 [cfCookies addObject:(id)cfCookie]; 48 } 49 50 NSDictionary *result = [(NSDictionary *)CFHTTPCookieCopyRequestHeaderFields((CFArrayRef)cfCookies) autorelease]; 51 return result; 52 } 53 54 + (NSArray *)cookiesWithResponseHeaderFields:(NSDictionary *)headerFields forURL:(NSURL *)URL 55 { 56 NSArray * cfCookies = (NSArray *)CFHTTPCookieCreateWithResponseHeaderFields((CFDictionaryRef)headerFields, (CFURLRef)URL); 57 58 NSMutableArray *result = [NSMutableArray arrayWithCapacity:[cfCookies count]]; 59 60 61 for (id cfCookie in cfCookies) { 62 NSHTTPCookie *cookie = [[NSHTTPCookie alloc] initWithCookie:(CFHTTPCookieRef)cfCookie]; 63 [result addObject:cookie]; 64 [cookie release]; 65 } 66 67 [cfCookies release]; 68 return [NSArray arrayWithArray:result]; 69 70 } 71 72 - (id)initWithCookie:(CFHTTPCookieRef)cookie 73 { 74 self = [super init]; 75 if (self) 76 { 77 _cookiePrivate = (CFHTTPCookieRef)CFRetain(cookie); 78 } 79 return self; 80 } 81 82 - (id)initWithProperties:(NSDictionary *)properties 83 { 84 self = [super init]; 85 if (self) 86 { 87 _cookiePrivate = CFHTTPCookieCreateWithProperties((CFDictionaryRef)properties); 88 } 89 if (_cookiePrivate == NULL) { 90 [self release]; 91 self = nil; 92 } 93 return self; 94 } 95 96 - (void)dealloc 97 { 98 if (_cookiePrivate != NULL) { 99 CFRelease(_cookiePrivate); 100 } 101 [super dealloc]; 102 } 103 104 -(CFHTTPCookieRef)privateCookie { 105 return _cookiePrivate; 106 } 107 108 - (NSDictionary *)properties 109 { 110 return [(NSDictionary *)CFHTTPCookieCopyProperties(_cookiePrivate) autorelease]; 111 } 112 113 - (NSUInteger)version 114 { 115 return [(NSNumber*)CFHTTPCookieGetVersion(_cookiePrivate) unsignedIntegerValue]; 116 } 117 118 - (NSString *)name 119 { 120 return (NSString *)CFHTTPCookieGetName(_cookiePrivate); 121 } 122 123 - (NSString *)value 124 { 125 return (NSString *)CFHTTPCookieGetValue(_cookiePrivate); 126 } 127 128 - (NSDate *)expiresDate 129 { 130 return (NSDate *)CFHTTPCookieGetExpirationDate(_cookiePrivate); 131 } 132 133 - (BOOL)isSessionOnly 134 { 135 return CFHTTPCookieIsSessionOnly(_cookiePrivate); 136 } 137 138 - (NSString *)domain 139 { 140 return (NSString *)CFHTTPCookieGetDomain(_cookiePrivate); 141 } 142 143 - (NSString *)path 144 { 145 return (NSString *)CFHTTPCookieGetPath(_cookiePrivate); 146 } 147 148 - (BOOL)isSecure 149 { 150 return CFHTTPCookieIsSecure(_cookiePrivate); 151 } 152 153 - (BOOL)isHTTPOnly 154 { 155 return CFHTTPCookieIsHTTPOnly(_cookiePrivate); 156 } 157 158 - (NSString *)comment 159 { 160 return (NSString *)CFHTTPCookieGetComment(_cookiePrivate); 161 } 162 163 - (NSURL *)commentURL 164 { 165 return (NSURL *)CFHTTPCookieGetCommentURL(_cookiePrivate); 166 } 167 168 - (NSArray *)portList 169 { 170 return (NSArray *)CFHTTPCookieGetPortArray(_cookiePrivate); 171 } 172 173 - (BOOL)isEqual:(id)object { 174 return [[self properties] isEqual:[object properties]]; 175 } 176 177 178 @end