/ src / HTTP / NSHTTPCookie.m
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