瀏覽代碼

Added -description methods

Pierre-Olivier Latour 11 年之前
父節點
當前提交
97929f7d89

+ 11 - 0
CGDWebServer/GCDWebServer.m

@@ -151,6 +151,17 @@ NSDate* GCDWebServerParseHTTPDate(NSString* string) {
   return date;
 }
 
+NSString* GCDWebServerDescribeData(NSData* data, NSString* contentType) {
+  if ([contentType hasPrefix:@"text/"] || [contentType isEqualToString:@"application/json"] || [contentType isEqualToString:@"application/xml"]) {
+    NSString* charset = GCDWebServerExtractHeaderValueParameter(contentType, @"charset");
+    NSString* string = [[NSString alloc] initWithData:data encoding:GCDWebServerStringEncodingFromCharset(charset)];
+    if (string) {
+      return ARC_AUTORELEASE(string);
+    }
+  }
+  return [NSString stringWithFormat:@"<%lu bytes>", (unsigned long)data.length];
+}
+
 NSString* GCDWebServerGetMimeTypeForExtension(NSString* extension) {
   static NSDictionary* _overrides = nil;
   if (_overrides == nil) {

+ 9 - 0
CGDWebServer/GCDWebServerDataRequest.m

@@ -70,6 +70,15 @@
   return YES;
 }
 
+- (NSString*)description {
+  NSMutableString* description = [NSMutableString stringWithString:[super description]];
+  if (_data) {
+    [description appendString:@"\n\n"];
+    [description appendString:GCDWebServerDescribeData(_data, self.contentType)];
+  }
+  return description;
+}
+
 @end
 
 @implementation GCDWebServerDataRequest (Extensions)

+ 7 - 0
CGDWebServer/GCDWebServerDataResponse.m

@@ -73,6 +73,13 @@
   return data;
 }
 
+- (NSString*)description {
+  NSMutableString* description = [NSMutableString stringWithString:[super description]];
+  [description appendString:@"\n\n"];
+  [description appendString:GCDWebServerDescribeData(_data, self.contentType)];
+  return description;
+}
+
 @end
 
 @implementation GCDWebServerDataResponse (Extensions)

+ 6 - 0
CGDWebServer/GCDWebServerFileResponse.m

@@ -170,4 +170,10 @@ static inline NSDate* _NSDateFromTimeSpec(const struct timespec* t) {
   close(_file);
 }
 
+- (NSString*)description {
+  NSMutableString* description = [NSMutableString stringWithString:[super description]];
+  [description appendFormat:@"\n\n{%@}", _path];
+  return description;
+}
+
 @end

+ 27 - 7
CGDWebServer/GCDWebServerMultiPartFormRequest.m

@@ -100,7 +100,7 @@ static NSData* _dashNewlineData = nil;
 }
 
 - (NSString*)description {
-  return [NSString stringWithFormat:@"<%@ | '%@' | %i bytes>", [self class], self.mimeType, (int)_data.length];
+  return [NSString stringWithFormat:@"<%@ | '%@' | %lu bytes>", [self class], self.mimeType, (unsigned long)_data.length];
 }
 
 @end
@@ -198,6 +198,14 @@ static NSData* _dashNewlineData = nil;
   return self;
 }
 
+- (void)dealloc {
+  ARC_RELEASE(_arguments);
+  ARC_RELEASE(_files);
+  ARC_RELEASE(_boundary);
+  
+  ARC_DEALLOC(super);
+}
+
 - (BOOL)open:(NSError**)error {
   _parserData = [[NSMutableData alloc] initWithCapacity:kMultiPartBufferSize];
   _parserState = kParserState_Start;
@@ -357,12 +365,24 @@ static NSData* _dashNewlineData = nil;
   return YES;
 }
 
-- (void)dealloc {
-  ARC_RELEASE(_arguments);
-  ARC_RELEASE(_files);
-  ARC_RELEASE(_boundary);
-  
-  ARC_DEALLOC(super);
+- (NSString*)description {
+  NSMutableString* description = [NSMutableString stringWithString:[super description]];
+  if (_arguments.count) {
+    [description appendString:@"\n"];
+    for (NSString* key in [[_arguments allKeys] sortedArrayUsingSelector:@selector(compare:)]) {
+      GCDWebServerMultiPartArgument* argument = [_arguments objectForKey:key];
+      [description appendFormat:@"\n%@ (%@)\n", key, argument.contentType];
+      [description appendString:GCDWebServerDescribeData(argument.data, argument.contentType)];
+    }
+  }
+  if (_files.count) {
+    [description appendString:@"\n"];
+    for (NSString* key in [[_files allKeys] sortedArrayUsingSelector:@selector(compare:)]) {
+      GCDWebServerMultiPartFile* file = [_files objectForKey:key];
+      [description appendFormat:@"\n%@ (%@): %@\n{%@}", key, file.contentType, file.fileName, file.temporaryPath];
+    }
+  }
+  return description;
 }
 
 @end

+ 1 - 0
CGDWebServer/GCDWebServerPrivate.h

@@ -114,6 +114,7 @@ extern NSString* GCDWebServerExtractHeaderValueParameter(NSString* header, NSStr
 extern NSStringEncoding GCDWebServerStringEncodingFromCharset(NSString* charset);
 extern NSString* GCDWebServerFormatHTTPDate(NSDate* date);
 extern NSDate* GCDWebServerParseHTTPDate(NSString* string);
+extern NSString* GCDWebServerDescribeData(NSData* data, NSString* contentType);
 
 @interface GCDWebServerConnection ()
 - (id)initWithServer:(GCDWebServer*)server localAddress:(NSData*)localAddress remoteAddress:(NSData*)remoteAddress socket:(CFSocketNativeHandle)socket;

+ 12 - 0
CGDWebServer/GCDWebServerRequest.m

@@ -307,4 +307,16 @@
   return [_writer close:error];
 }
 
+- (NSString*)description {
+  NSMutableString* description = [NSMutableString stringWithFormat:@"%@ %@", _method, _path];
+  for (NSString* argument in [[_query allKeys] sortedArrayUsingSelector:@selector(compare:)]) {
+    [description appendFormat:@"\n  %@ = %@", argument, [_query objectForKey:argument]];
+  }
+  [description appendString:@"\n"];
+  for (NSString* header in [[_headers allKeys] sortedArrayUsingSelector:@selector(compare:)]) {
+    [description appendFormat:@"\n%@: %@", header, [_headers objectForKey:header]];
+  }
+  return description;
+}
+
 @end

+ 24 - 0
CGDWebServer/GCDWebServerResponse.m

@@ -254,6 +254,30 @@
   [_reader close];
 }
 
+- (NSString*)description {
+  NSMutableString* description = [NSMutableString stringWithFormat:@"Status Code = %i", (int)_status];
+  if (_type) {
+    [description appendFormat:@"\nContent Type = %@", _type];
+  }
+  if (_length != NSNotFound) {
+    [description appendFormat:@"\nContent Length = %lu", (unsigned long)_length];
+  }
+  [description appendFormat:@"\nCache Control Max Age = %lu", (unsigned long)_maxAge];
+  if (_lastModified) {
+    [description appendFormat:@"\nLast Modified Date = %@", _lastModified];
+  }
+  if (_eTag) {
+    [description appendFormat:@"\nETag = %@", _eTag];
+  }
+  if (_headers.count) {
+    [description appendString:@"\n"];
+    for (NSString* header in [[_headers allKeys] sortedArrayUsingSelector:@selector(compare:)]) {
+      [description appendFormat:@"\n%@: %@", header, [_headers objectForKey:header]];
+    }
+  }
+  return description;
+}
+
 @end
 
 @implementation GCDWebServerResponse (Extensions)

+ 6 - 0
CGDWebServer/GCDWebServerStreamingResponse.m

@@ -58,4 +58,10 @@
   return _block(error);
 }
 
+- (NSString*)description {
+  NSMutableString* description = [NSMutableString stringWithString:[super description]];
+  [description appendString:@"\n\n<STREAM>"];
+  return description;
+}
+
 @end

+ 9 - 0
CGDWebServer/GCDWebServerURLEncodedFormRequest.m

@@ -61,4 +61,13 @@
   return YES;
 }
 
+- (NSString*)description {
+  NSMutableString* description = [NSMutableString stringWithString:[super description]];
+  [description appendString:@"\n"];
+  for (NSString* argument in [[_arguments allKeys] sortedArrayUsingSelector:@selector(compare:)]) {
+    [description appendFormat:@"\n%@ = %@", argument, [_arguments objectForKey:argument]];
+  }
+  return description;
+}
+
 @end