cordova-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From shaz...@apache.org
Subject [21/57] [abbrv] cordova-plugins git commit: Merge commit '1547b6bcc17fad312449c2d522935370e0552b77' as 'local-webserver/src/ios/GCDWebServer'
Date Mon, 25 Jul 2016 07:57:07 GMT
http://git-wip-us.apache.org/repos/asf/cordova-plugins/blob/9f15b12f/local-webserver/src/ios/GCDWebServer/GCDWebDAVServer/GCDWebDAVServer.m
----------------------------------------------------------------------
diff --cc local-webserver/src/ios/GCDWebServer/GCDWebDAVServer/GCDWebDAVServer.m
index 0000000,0000000..c7341fa
new file mode 100644
--- /dev/null
+++ b/local-webserver/src/ios/GCDWebServer/GCDWebDAVServer/GCDWebDAVServer.m
@@@ -1,0 -1,0 +1,688 @@@
++/*
++ Copyright (c) 2012-2014, Pierre-Olivier Latour
++ All rights reserved.
++ 
++ Redistribution and use in source and binary forms, with or without
++ modification, are permitted provided that the following conditions are met:
++ * Redistributions of source code must retain the above copyright
++ notice, this list of conditions and the following disclaimer.
++ * Redistributions in binary form must reproduce the above copyright
++ notice, this list of conditions and the following disclaimer in the
++ documentation and/or other materials provided with the distribution.
++ * The name of Pierre-Olivier Latour may not be used to endorse
++ or promote products derived from this software without specific
++ prior written permission.
++ 
++ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
++ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
++ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
++ DISCLAIMED. IN NO EVENT SHALL PIERRE-OLIVIER LATOUR BE LIABLE FOR ANY
++ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
++ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
++ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
++ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
++ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
++ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
++ */
++
++#if !__has_feature(objc_arc)
++#error GCDWebDAVServer requires ARC
++#endif
++
++// WebDAV specifications: http://webdav.org/specs/rfc4918.html
++
++// Requires "HEADER_SEARCH_PATHS = $(SDKROOT)/usr/include/libxml2" in Xcode build settings
++#import <libxml/parser.h>
++
++#import "GCDWebDAVServer.h"
++
++#import "GCDWebServerFunctions.h"
++
++#import "GCDWebServerDataRequest.h"
++#import "GCDWebServerFileRequest.h"
++
++#import "GCDWebServerDataResponse.h"
++#import "GCDWebServerErrorResponse.h"
++#import "GCDWebServerFileResponse.h"
++
++#define kXMLParseOptions (XML_PARSE_NONET | XML_PARSE_RECOVER | XML_PARSE_NOBLANKS | XML_PARSE_COMPACT | XML_PARSE_NOWARNING | XML_PARSE_NOERROR)
++
++typedef NS_ENUM(NSInteger, DAVProperties) {
++  kDAVProperty_ResourceType = (1 << 0),
++  kDAVProperty_CreationDate = (1 << 1),
++  kDAVProperty_LastModified = (1 << 2),
++  kDAVProperty_ContentLength = (1 << 3),
++  kDAVAllProperties = kDAVProperty_ResourceType | kDAVProperty_CreationDate | kDAVProperty_LastModified | kDAVProperty_ContentLength
++};
++
++@interface GCDWebDAVServer () {
++@private
++  NSString* _uploadDirectory;
++  NSArray* _allowedExtensions;
++  BOOL _allowHidden;
++}
++@end
++
++@implementation GCDWebDAVServer (Methods)
++
++// Must match implementation in GCDWebUploader
++- (BOOL)_checkSandboxedPath:(NSString*)path {
++  return [[path stringByStandardizingPath] hasPrefix:_uploadDirectory];
++}
++
++- (BOOL)_checkFileExtension:(NSString*)fileName {
++  if (_allowedExtensions && ![_allowedExtensions containsObject:[[fileName pathExtension] lowercaseString]]) {
++    return NO;
++  }
++  return YES;
++}
++
++static inline BOOL _IsMacFinder(GCDWebServerRequest* request) {
++  NSString* userAgentHeader = [request.headers objectForKey:@"User-Agent"];
++  return ([userAgentHeader hasPrefix:@"WebDAVFS/"] || [userAgentHeader hasPrefix:@"WebDAVLib/"]);  // OS X WebDAV client
++}
++
++- (GCDWebServerResponse*)performOPTIONS:(GCDWebServerRequest*)request {
++  GCDWebServerResponse* response = [GCDWebServerResponse response];
++  if (_IsMacFinder(request)) {
++    [response setValue:@"1, 2" forAdditionalHeader:@"DAV"];  // Classes 1 and 2
++  } else {
++    [response setValue:@"1" forAdditionalHeader:@"DAV"];  // Class 1
++  }
++  return response;
++}
++
++- (GCDWebServerResponse*)performGET:(GCDWebServerRequest*)request {
++  NSString* relativePath = request.path;
++  NSString* absolutePath = [_uploadDirectory stringByAppendingPathComponent:relativePath];
++  BOOL isDirectory = NO;
++  if (![self _checkSandboxedPath:absolutePath] || ![[NSFileManager defaultManager] fileExistsAtPath:absolutePath isDirectory:&isDirectory]) {
++    return [GCDWebServerErrorResponse responseWithClientError:kGCDWebServerHTTPStatusCode_NotFound message:@"\"%@\" does not exist", relativePath];
++  }
++  
++  NSString* itemName = [absolutePath lastPathComponent];
++  if (([itemName hasPrefix:@"."] && !_allowHidden) || (!isDirectory && ![self _checkFileExtension:itemName])) {
++    return [GCDWebServerErrorResponse responseWithClientError:kGCDWebServerHTTPStatusCode_Forbidden message:@"Downlading item name \"%@\" is not allowed", itemName];
++  }
++  
++  // Because HEAD requests are mapped to GET ones, we need to handle directories but it's OK to return nothing per http://webdav.org/specs/rfc4918.html#rfc.section.9.4
++  if (isDirectory) {
++    return [GCDWebServerResponse response];
++  }
++  
++  if ([self.delegate respondsToSelector:@selector(davServer:didDownloadFileAtPath:)]) {
++    dispatch_async(dispatch_get_main_queue(), ^{
++      [self.delegate davServer:self didDownloadFileAtPath:absolutePath];
++    });
++  }
++  return [GCDWebServerFileResponse responseWithFile:absolutePath];
++}
++
++- (GCDWebServerResponse*)performPUT:(GCDWebServerFileRequest*)request {
++  if ([request hasByteRange]) {
++    return [GCDWebServerErrorResponse responseWithClientError:kGCDWebServerHTTPStatusCode_BadRequest message:@"Range uploads not supported"];
++  }
++  
++  NSString* relativePath = request.path;
++  NSString* absolutePath = [_uploadDirectory stringByAppendingPathComponent:relativePath];
++  if (![self _checkSandboxedPath:absolutePath]) {
++    return [GCDWebServerErrorResponse responseWithClientError:kGCDWebServerHTTPStatusCode_NotFound message:@"\"%@\" does not exist", relativePath];
++  }
++  BOOL isDirectory;
++  if (![[NSFileManager defaultManager] fileExistsAtPath:[absolutePath stringByDeletingLastPathComponent] isDirectory:&isDirectory] || !isDirectory) {
++    return [GCDWebServerErrorResponse responseWithClientError:kGCDWebServerHTTPStatusCode_Conflict message:@"Missing intermediate collection(s) for \"%@\"", relativePath];
++  }
++  
++  BOOL existing = [[NSFileManager defaultManager] fileExistsAtPath:absolutePath isDirectory:&isDirectory];
++  if (existing && isDirectory) {
++    return [GCDWebServerErrorResponse responseWithClientError:kGCDWebServerHTTPStatusCode_MethodNotAllowed message:@"PUT not allowed on existing collection \"%@\"", relativePath];
++  }
++  
++  NSString* fileName = [absolutePath lastPathComponent];
++  if (([fileName hasPrefix:@"."] && !_allowHidden) || ![self _checkFileExtension:fileName]) {
++    return [GCDWebServerErrorResponse responseWithClientError:kGCDWebServerHTTPStatusCode_Forbidden message:@"Uploading file name \"%@\" is not allowed", fileName];
++  }
++  
++  if (![self shouldUploadFileAtPath:absolutePath withTemporaryFile:request.temporaryPath]) {
++    return [GCDWebServerErrorResponse responseWithClientError:kGCDWebServerHTTPStatusCode_Forbidden message:@"Uploading file to \"%@\" is not permitted", relativePath];
++  }
++  
++  [[NSFileManager defaultManager] removeItemAtPath:absolutePath error:NULL];
++  NSError* error = nil;
++  if (![[NSFileManager defaultManager] moveItemAtPath:request.temporaryPath toPath:absolutePath error:&error]) {
++    return [GCDWebServerErrorResponse responseWithServerError:kGCDWebServerHTTPStatusCode_InternalServerError underlyingError:error message:@"Failed moving uploaded file to \"%@\"", relativePath];
++  }
++  
++  if ([self.delegate respondsToSelector:@selector(davServer:didUploadFileAtPath:)]) {
++    dispatch_async(dispatch_get_main_queue(), ^{
++      [self.delegate davServer:self didUploadFileAtPath:absolutePath];
++    });
++  }
++  return [GCDWebServerResponse responseWithStatusCode:(existing ? kGCDWebServerHTTPStatusCode_NoContent : kGCDWebServerHTTPStatusCode_Created)];
++}
++
++- (GCDWebServerResponse*)performDELETE:(GCDWebServerRequest*)request {
++  NSString* depthHeader = [request.headers objectForKey:@"Depth"];
++  if (depthHeader && ![depthHeader isEqualToString:@"infinity"]) {
++    return [GCDWebServerErrorResponse responseWithClientError:kGCDWebServerHTTPStatusCode_BadRequest message:@"Unsupported 'Depth' header: %@", depthHeader];
++  }
++  
++  NSString* relativePath = request.path;
++  NSString* absolutePath = [_uploadDirectory stringByAppendingPathComponent:relativePath];
++  BOOL isDirectory = NO;
++  if (![self _checkSandboxedPath:absolutePath] || ![[NSFileManager defaultManager] fileExistsAtPath:absolutePath isDirectory:&isDirectory]) {
++    return [GCDWebServerErrorResponse responseWithClientError:kGCDWebServerHTTPStatusCode_NotFound message:@"\"%@\" does not exist", relativePath];
++  }
++  
++  NSString* itemName = [absolutePath lastPathComponent];
++  if (([itemName hasPrefix:@"."] && !_allowHidden) || (!isDirectory && ![self _checkFileExtension:itemName])) {
++    return [GCDWebServerErrorResponse responseWithClientError:kGCDWebServerHTTPStatusCode_Forbidden message:@"Deleting item name \"%@\" is not allowed", itemName];
++  }
++  
++  if (![self shouldDeleteItemAtPath:absolutePath]) {
++    return [GCDWebServerErrorResponse responseWithClientError:kGCDWebServerHTTPStatusCode_Forbidden message:@"Deleting \"%@\" is not permitted", relativePath];
++  }
++  
++  NSError* error = nil;
++  if (![[NSFileManager defaultManager] removeItemAtPath:absolutePath error:&error]) {
++    return [GCDWebServerErrorResponse responseWithServerError:kGCDWebServerHTTPStatusCode_InternalServerError underlyingError:error message:@"Failed deleting \"%@\"", relativePath];
++  }
++  
++  if ([self.delegate respondsToSelector:@selector(davServer:didDeleteItemAtPath:)]) {
++    dispatch_async(dispatch_get_main_queue(), ^{
++      [self.delegate davServer:self didDeleteItemAtPath:absolutePath];
++    });
++  }
++  return [GCDWebServerResponse responseWithStatusCode:kGCDWebServerHTTPStatusCode_NoContent];
++}
++
++- (GCDWebServerResponse*)performMKCOL:(GCDWebServerDataRequest*)request {
++  if ([request hasBody] && (request.contentLength > 0)) {
++    return [GCDWebServerErrorResponse responseWithClientError:kGCDWebServerHTTPStatusCode_UnsupportedMediaType message:@"Unexpected request body for MKCOL method"];
++  }
++  
++  NSString* relativePath = request.path;
++  NSString* absolutePath = [_uploadDirectory stringByAppendingPathComponent:relativePath];
++  if (![self _checkSandboxedPath:absolutePath]) {
++    return [GCDWebServerErrorResponse responseWithClientError:kGCDWebServerHTTPStatusCode_NotFound message:@"\"%@\" does not exist", relativePath];
++  }
++  BOOL isDirectory;
++  if (![[NSFileManager defaultManager] fileExistsAtPath:[absolutePath stringByDeletingLastPathComponent] isDirectory:&isDirectory] || !isDirectory) {
++    return [GCDWebServerErrorResponse responseWithClientError:kGCDWebServerHTTPStatusCode_Conflict message:@"Missing intermediate collection(s) for \"%@\"", relativePath];
++  }
++  
++  NSString* directoryName = [absolutePath lastPathComponent];
++  if (!_allowHidden && [directoryName hasPrefix:@"."]) {
++    return [GCDWebServerErrorResponse responseWithClientError:kGCDWebServerHTTPStatusCode_Forbidden message:@"Creating directory name \"%@\" is not allowed", directoryName];
++  }
++  
++  if (![self shouldCreateDirectoryAtPath:absolutePath]) {
++    return [GCDWebServerErrorResponse responseWithClientError:kGCDWebServerHTTPStatusCode_Forbidden message:@"Creating directory \"%@\" is not permitted", relativePath];
++  }
++  
++  NSError* error = nil;
++  if (![[NSFileManager defaultManager] createDirectoryAtPath:absolutePath withIntermediateDirectories:NO attributes:nil error:&error]) {
++    return [GCDWebServerErrorResponse responseWithServerError:kGCDWebServerHTTPStatusCode_InternalServerError underlyingError:error message:@"Failed creating directory \"%@\"", relativePath];
++  }
++#ifdef __GCDWEBSERVER_ENABLE_TESTING__
++  NSString* creationDateHeader = [request.headers objectForKey:@"X-GCDWebServer-CreationDate"];
++  if (creationDateHeader) {
++    NSDate* date = GCDWebServerParseISO8601(creationDateHeader);
++    if (!date || ![[NSFileManager defaultManager] setAttributes:@{NSFileCreationDate: date} ofItemAtPath:absolutePath error:&error]) {
++      return [GCDWebServerErrorResponse responseWithServerError:kGCDWebServerHTTPStatusCode_InternalServerError underlyingError:error message:@"Failed setting creation date for directory \"%@\"", relativePath];
++    }
++  }
++#endif
++  
++  if ([self.delegate respondsToSelector:@selector(davServer:didCreateDirectoryAtPath:)]) {
++    dispatch_async(dispatch_get_main_queue(), ^{
++      [self.delegate davServer:self didCreateDirectoryAtPath:absolutePath];
++    });
++  }
++  return [GCDWebServerResponse responseWithStatusCode:kGCDWebServerHTTPStatusCode_Created];
++}
++
++- (GCDWebServerResponse*)performCOPY:(GCDWebServerRequest*)request isMove:(BOOL)isMove {
++  if (!isMove) {
++    NSString* depthHeader = [request.headers objectForKey:@"Depth"];  // TODO: Support "Depth: 0"
++    if (depthHeader && ![depthHeader isEqualToString:@"infinity"]) {
++      return [GCDWebServerErrorResponse responseWithClientError:kGCDWebServerHTTPStatusCode_BadRequest message:@"Unsupported 'Depth' header: %@", depthHeader];
++    }
++  }
++  
++  NSString* srcRelativePath = request.path;
++  NSString* srcAbsolutePath = [_uploadDirectory stringByAppendingPathComponent:srcRelativePath];
++  if (![self _checkSandboxedPath:srcAbsolutePath]) {
++    return [GCDWebServerErrorResponse responseWithClientError:kGCDWebServerHTTPStatusCode_NotFound message:@"\"%@\" does not exist", srcRelativePath];
++  }
++  
++  NSString* dstRelativePath = [request.headers objectForKey:@"Destination"];
++  NSRange range = [dstRelativePath rangeOfString:[request.headers objectForKey:@"Host"]];
++  if ((dstRelativePath == nil) || (range.location == NSNotFound)) {
++    return [GCDWebServerErrorResponse responseWithClientError:kGCDWebServerHTTPStatusCode_BadRequest message:@"Malformed 'Destination' header: %@", dstRelativePath];
++  }
++  dstRelativePath = [[dstRelativePath substringFromIndex:(range.location + range.length)] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
++  NSString* dstAbsolutePath = [_uploadDirectory stringByAppendingPathComponent:dstRelativePath];
++  if (![self _checkSandboxedPath:dstAbsolutePath]) {
++    return [GCDWebServerErrorResponse responseWithClientError:kGCDWebServerHTTPStatusCode_NotFound message:@"\"%@\" does not exist", srcRelativePath];
++  }
++  
++  BOOL isDirectory;
++  if (![[NSFileManager defaultManager] fileExistsAtPath:[dstAbsolutePath stringByDeletingLastPathComponent] isDirectory:&isDirectory] || !isDirectory) {
++    return [GCDWebServerErrorResponse responseWithClientError:kGCDWebServerHTTPStatusCode_Conflict message:@"Invalid destination \"%@\"", dstRelativePath];
++  }
++  
++  NSString* itemName = [dstAbsolutePath lastPathComponent];
++  if ((!_allowHidden && [itemName hasPrefix:@"."]) || (!isDirectory && ![self _checkFileExtension:itemName])) {
++    return [GCDWebServerErrorResponse responseWithClientError:kGCDWebServerHTTPStatusCode_Forbidden message:@"%@ to item name \"%@\" is not allowed", isMove ? @"Moving" : @"Copying", itemName];
++  }
++  
++  NSString* overwriteHeader = [request.headers objectForKey:@"Overwrite"];
++  BOOL existing = [[NSFileManager defaultManager] fileExistsAtPath:dstAbsolutePath];
++  if (existing && ((isMove && ![overwriteHeader isEqualToString:@"T"]) || (!isMove && [overwriteHeader isEqualToString:@"F"]))) {
++    return [GCDWebServerErrorResponse responseWithClientError:kGCDWebServerHTTPStatusCode_PreconditionFailed message:@"Destination \"%@\" already exists", dstRelativePath];
++  }
++  
++  if (isMove) {
++    if (![self shouldMoveItemFromPath:srcAbsolutePath toPath:dstAbsolutePath]) {
++      return [GCDWebServerErrorResponse responseWithClientError:kGCDWebServerHTTPStatusCode_Forbidden message:@"Moving \"%@\" to \"%@\" is not permitted", srcRelativePath, dstRelativePath];
++    }
++  } else {
++    if (![self shouldCopyItemFromPath:srcAbsolutePath toPath:dstAbsolutePath]) {
++      return [GCDWebServerErrorResponse responseWithClientError:kGCDWebServerHTTPStatusCode_Forbidden message:@"Copying \"%@\" to \"%@\" is not permitted", srcRelativePath, dstRelativePath];
++    }
++  }
++  
++  NSError* error = nil;
++  if (isMove) {
++    [[NSFileManager defaultManager] removeItemAtPath:dstAbsolutePath error:NULL];
++    if (![[NSFileManager defaultManager] moveItemAtPath:srcAbsolutePath toPath:dstAbsolutePath error:&error]) {
++      return [GCDWebServerErrorResponse responseWithClientError:kGCDWebServerHTTPStatusCode_Forbidden underlyingError:error message:@"Failed copying \"%@\" to \"%@\"", srcRelativePath, dstRelativePath];
++    }
++  } else {
++    if (![[NSFileManager defaultManager] copyItemAtPath:srcAbsolutePath toPath:dstAbsolutePath error:&error]) {
++      return [GCDWebServerErrorResponse responseWithClientError:kGCDWebServerHTTPStatusCode_Forbidden underlyingError:error message:@"Failed copying \"%@\" to \"%@\"", srcRelativePath, dstRelativePath];
++    }
++  }
++  
++  if (isMove) {
++    if ([self.delegate respondsToSelector:@selector(davServer:didMoveItemFromPath:toPath:)]) {
++      dispatch_async(dispatch_get_main_queue(), ^{
++        [self.delegate davServer:self didMoveItemFromPath:srcAbsolutePath toPath:dstAbsolutePath];
++      });
++    }
++  } else {
++    if ([self.delegate respondsToSelector:@selector(davServer:didCopyItemFromPath:toPath:)]) {
++      dispatch_async(dispatch_get_main_queue(), ^{
++        [self.delegate davServer:self didCopyItemFromPath:srcAbsolutePath toPath:dstAbsolutePath];
++      });
++    }
++  }
++  
++  return [GCDWebServerResponse responseWithStatusCode:(existing ? kGCDWebServerHTTPStatusCode_NoContent : kGCDWebServerHTTPStatusCode_Created)];
++}
++
++static inline xmlNodePtr _XMLChildWithName(xmlNodePtr child, const xmlChar* name) {
++  while (child) {
++    if ((child->type == XML_ELEMENT_NODE) && !xmlStrcmp(child->name, name)) {
++      return child;
++    }
++    child = child->next;
++  }
++  return NULL;
++}
++
++- (void)_addPropertyResponseForItem:(NSString*)itemPath resource:(NSString*)resourcePath properties:(DAVProperties)properties xmlString:(NSMutableString*)xmlString {
++  CFStringRef escapedPath = CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (__bridge CFStringRef)resourcePath, NULL, CFSTR("<&>?+"), kCFStringEncodingUTF8);
++  if (escapedPath) {
++    NSDictionary* attributes = [[NSFileManager defaultManager] attributesOfItemAtPath:itemPath error:NULL];
++    NSString* type = [attributes objectForKey:NSFileType];
++    BOOL isFile = [type isEqualToString:NSFileTypeRegular];
++    BOOL isDirectory = [type isEqualToString:NSFileTypeDirectory];
++    if ((isFile && [self _checkFileExtension:itemPath]) || isDirectory) {
++      [xmlString appendString:@"<D:response>"];
++      [xmlString appendFormat:@"<D:href>%@</D:href>", escapedPath];
++      [xmlString appendString:@"<D:propstat>"];
++      [xmlString appendString:@"<D:prop>"];
++      
++      if (properties & kDAVProperty_ResourceType) {
++        if (isDirectory) {
++          [xmlString appendString:@"<D:resourcetype><D:collection/></D:resourcetype>"];
++        } else {
++          [xmlString appendString:@"<D:resourcetype/>"];
++        }
++      }
++      
++      if ((properties & kDAVProperty_CreationDate) && [attributes objectForKey:NSFileCreationDate]) {
++        [xmlString appendFormat:@"<D:creationdate>%@</D:creationdate>", GCDWebServerFormatISO8601([attributes fileCreationDate])];
++      }
++      
++      if ((properties & kDAVProperty_LastModified) && isFile && [attributes objectForKey:NSFileModificationDate]) {  // Last modification date is not useful for directories as it changes implicitely and 'Last-Modified' header is not provided for directories anyway
++        [xmlString appendFormat:@"<D:getlastmodified>%@</D:getlastmodified>", GCDWebServerFormatRFC822([attributes fileModificationDate])];
++      }
++      
++      if ((properties & kDAVProperty_ContentLength) && !isDirectory && [attributes objectForKey:NSFileSize]) {
++        [xmlString appendFormat:@"<D:getcontentlength>%llu</D:getcontentlength>", [attributes fileSize]];
++      }
++      
++      [xmlString appendString:@"</D:prop>"];
++      [xmlString appendString:@"<D:status>HTTP/1.1 200 OK</D:status>"];
++      [xmlString appendString:@"</D:propstat>"];
++      [xmlString appendString:@"</D:response>\n"];
++    }
++    CFRelease(escapedPath);
++  } else {
++    [self logError:@"Failed escaping path: %@", itemPath];
++  }
++}
++
++- (GCDWebServerResponse*)performPROPFIND:(GCDWebServerDataRequest*)request {
++  NSInteger depth;
++  NSString* depthHeader = [request.headers objectForKey:@"Depth"];
++  if ([depthHeader isEqualToString:@"0"]) {
++    depth = 0;
++  } else if ([depthHeader isEqualToString:@"1"]) {
++    depth = 1;
++  } else {
++    return [GCDWebServerErrorResponse responseWithClientError:kGCDWebServerHTTPStatusCode_BadRequest message:@"Unsupported 'Depth' header: %@", depthHeader];  // TODO: Return 403 / propfind-finite-depth for "infinity" depth
++  }
++  
++  DAVProperties properties = 0;
++  if (request.data.length) {
++    BOOL success = YES;
++    xmlDocPtr document = xmlReadMemory(request.data.bytes, (int)request.data.length, NULL, NULL, kXMLParseOptions);
++    if (document) {
++      xmlNodePtr rootNode = _XMLChildWithName(document->children, (const xmlChar*)"propfind");
++      xmlNodePtr allNode = rootNode ? _XMLChildWithName(rootNode->children, (const xmlChar*)"allprop") : NULL;
++      xmlNodePtr propNode = rootNode ? _XMLChildWithName(rootNode->children, (const xmlChar*)"prop") : NULL;
++      if (allNode) {
++        properties = kDAVAllProperties;
++      } else if (propNode) {
++        xmlNodePtr node = propNode->children;
++        while (node) {
++          if (!xmlStrcmp(node->name, (const xmlChar*)"resourcetype")) {
++            properties |= kDAVProperty_ResourceType;
++          } else if (!xmlStrcmp(node->name, (const xmlChar*)"creationdate")) {
++            properties |= kDAVProperty_CreationDate;
++          } else if (!xmlStrcmp(node->name, (const xmlChar*)"getlastmodified")) {
++            properties |= kDAVProperty_LastModified;
++          } else if (!xmlStrcmp(node->name, (const xmlChar*)"getcontentlength")) {
++            properties |= kDAVProperty_ContentLength;
++          } else {
++            [self logWarning:@"Unknown DAV property requested \"%s\"", node->name];
++          }
++          node = node->next;
++        }
++      } else {
++        success = NO;
++      }
++      xmlFreeDoc(document);
++    } else {
++      success = NO;
++    }
++    if (!success) {
++      NSString* string = [[NSString alloc] initWithData:request.data encoding:NSUTF8StringEncoding];
++      return [GCDWebServerErrorResponse responseWithClientError:kGCDWebServerHTTPStatusCode_BadRequest message:@"Invalid DAV properties:\n%@", string];
++    }
++  } else {
++    properties = kDAVAllProperties;
++  }
++  
++  NSString* relativePath = request.path;
++  NSString* absolutePath = [_uploadDirectory stringByAppendingPathComponent:relativePath];
++  BOOL isDirectory = NO;
++  if (![self _checkSandboxedPath:absolutePath] || ![[NSFileManager defaultManager] fileExistsAtPath:absolutePath isDirectory:&isDirectory]) {
++    return [GCDWebServerErrorResponse responseWithClientError:kGCDWebServerHTTPStatusCode_NotFound message:@"\"%@\" does not exist", relativePath];
++  }
++  
++  NSString* itemName = [absolutePath lastPathComponent];
++  if (([itemName hasPrefix:@"."] && !_allowHidden) || (!isDirectory && ![self _checkFileExtension:itemName])) {
++    return [GCDWebServerErrorResponse responseWithClientError:kGCDWebServerHTTPStatusCode_Forbidden message:@"Retrieving properties for item name \"%@\" is not allowed", itemName];
++  }
++  
++  NSArray* items = nil;
++  if (isDirectory) {
++    NSError* error = nil;
++    items = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:absolutePath error:&error];
++    if (items == nil) {
++      return [GCDWebServerErrorResponse responseWithServerError:kGCDWebServerHTTPStatusCode_InternalServerError underlyingError:error message:@"Failed listing directory \"%@\"", relativePath];
++    }
++  }
++  
++  NSMutableString* xmlString = [NSMutableString stringWithString:@"<?xml version=\"1.0\" encoding=\"utf-8\" ?>"];
++  [xmlString appendString:@"<D:multistatus xmlns:D=\"DAV:\">\n"];
++  if (![relativePath hasPrefix:@"/"]) {
++    relativePath = [@"/" stringByAppendingString:relativePath];
++  }
++  [self _addPropertyResponseForItem:absolutePath resource:relativePath properties:properties xmlString:xmlString];
++  if (depth == 1) {
++    if (![relativePath hasSuffix:@"/"]) {
++      relativePath = [relativePath stringByAppendingString:@"/"];
++    }
++    for (NSString* item in items) {
++      if (_allowHidden || ![item hasPrefix:@"."]) {
++        [self _addPropertyResponseForItem:[absolutePath stringByAppendingPathComponent:item] resource:[relativePath stringByAppendingString:item] properties:properties xmlString:xmlString];
++      }
++    }
++  }
++  [xmlString appendString:@"</D:multistatus>"];
++  
++  GCDWebServerDataResponse* response = [GCDWebServerDataResponse responseWithData:[xmlString dataUsingEncoding:NSUTF8StringEncoding]
++                                                                      contentType:@"application/xml; charset=\"utf-8\""];
++  response.statusCode = kGCDWebServerHTTPStatusCode_MultiStatus;
++  return response;
++}
++
++- (GCDWebServerResponse*)performLOCK:(GCDWebServerDataRequest*)request {
++  if (!_IsMacFinder(request)) {
++    return [GCDWebServerErrorResponse responseWithClientError:kGCDWebServerHTTPStatusCode_MethodNotAllowed message:@"LOCK method only allowed for Mac Finder"];
++  }
++  
++  NSString* relativePath = request.path;
++  NSString* absolutePath = [_uploadDirectory stringByAppendingPathComponent:relativePath];
++  BOOL isDirectory = NO;
++  if (![self _checkSandboxedPath:absolutePath] || ![[NSFileManager defaultManager] fileExistsAtPath:absolutePath isDirectory:&isDirectory]) {
++    return [GCDWebServerErrorResponse responseWithClientError:kGCDWebServerHTTPStatusCode_NotFound message:@"\"%@\" does not exist", relativePath];
++  }
++  
++  NSString* depthHeader = [request.headers objectForKey:@"Depth"];
++  NSString* timeoutHeader = [request.headers objectForKey:@"Timeout"];
++  NSString* scope = nil;
++  NSString* type = nil;
++  NSString* owner = nil;
++  NSString* token = nil;
++  BOOL success = YES;
++  xmlDocPtr document = xmlReadMemory(request.data.bytes, (int)request.data.length, NULL, NULL, kXMLParseOptions);
++  if (document) {
++    xmlNodePtr node = _XMLChildWithName(document->children, (const xmlChar*)"lockinfo");
++    if (node) {
++      xmlNodePtr scopeNode = _XMLChildWithName(node->children, (const xmlChar*)"lockscope");
++      if (scopeNode && scopeNode->children && scopeNode->children->name) {
++        scope = [NSString stringWithUTF8String:(const char*)scopeNode->children->name];
++      }
++      xmlNodePtr typeNode = _XMLChildWithName(node->children, (const xmlChar*)"locktype");
++      if (typeNode && typeNode->children && typeNode->children->name) {
++        type = [NSString stringWithUTF8String:(const char*)typeNode->children->name];
++      }
++      xmlNodePtr ownerNode = _XMLChildWithName(node->children, (const xmlChar*)"owner");
++      if (ownerNode) {
++        ownerNode = _XMLChildWithName(ownerNode->children, (const xmlChar*)"href");
++        if (ownerNode && ownerNode->children && ownerNode->children->content) {
++          owner = [NSString stringWithUTF8String:(const char*)ownerNode->children->content];
++        }
++      }
++    } else {
++      success = NO;
++    }
++    xmlFreeDoc(document);
++  } else {
++    success = NO;
++  }
++  if (!success) {
++    NSString* string = [[NSString alloc] initWithData:request.data encoding:NSUTF8StringEncoding];
++    return [GCDWebServerErrorResponse responseWithClientError:kGCDWebServerHTTPStatusCode_BadRequest message:@"Invalid DAV properties:\n%@", string];
++  }
++  
++  if (![scope isEqualToString:@"exclusive"] || ![type isEqualToString:@"write"] || ![depthHeader isEqualToString:@"0"]) {
++    return [GCDWebServerErrorResponse responseWithClientError:kGCDWebServerHTTPStatusCode_Forbidden message:@"Locking request \"%@/%@/%@\" for \"%@\" is not allowed", scope, type, depthHeader, relativePath];
++  }
++  
++  NSString* itemName = [absolutePath lastPathComponent];
++  if ((!_allowHidden && [itemName hasPrefix:@"."]) || (!isDirectory && ![self _checkFileExtension:itemName])) {
++    return [GCDWebServerErrorResponse responseWithClientError:kGCDWebServerHTTPStatusCode_Forbidden message:@"Locking item name \"%@\" is not allowed", itemName];
++  }
++  
++#ifdef __GCDWEBSERVER_ENABLE_TESTING__
++  NSString* lockTokenHeader = [request.headers objectForKey:@"X-GCDWebServer-LockToken"];
++  if (lockTokenHeader) {
++    token = lockTokenHeader;
++  }
++#endif
++  if (!token) {
++    CFUUIDRef uuid = CFUUIDCreate(kCFAllocatorDefault);
++    CFStringRef string = CFUUIDCreateString(kCFAllocatorDefault, uuid);
++    token = [NSString stringWithFormat:@"urn:uuid:%@", (__bridge NSString*)string];
++    CFRelease(string);
++    CFRelease(uuid);
++  }
++  
++  NSMutableString* xmlString = [NSMutableString stringWithString:@"<?xml version=\"1.0\" encoding=\"utf-8\" ?>"];
++  [xmlString appendString:@"<D:prop xmlns:D=\"DAV:\">\n"];
++  [xmlString appendString:@"<D:lockdiscovery>\n<D:activelock>\n"];
++  [xmlString appendFormat:@"<D:locktype><D:%@/></D:locktype>\n", type];
++  [xmlString appendFormat:@"<D:lockscope><D:%@/></D:lockscope>\n", scope];
++  [xmlString appendFormat:@"<D:depth>%@</D:depth>\n", depthHeader];
++  if (owner) {
++    [xmlString appendFormat:@"<D:owner><D:href>%@</D:href></D:owner>\n", owner];
++  }
++  if (timeoutHeader) {
++    [xmlString appendFormat:@"<D:timeout>%@</D:timeout>\n", timeoutHeader];
++  }
++  [xmlString appendFormat:@"<D:locktoken><D:href>%@</D:href></D:locktoken>\n", token];
++  NSString* lockroot = [@"http://" stringByAppendingString:[[request.headers objectForKey:@"Host"] stringByAppendingString:[@"/" stringByAppendingString:relativePath]]];
++  [xmlString appendFormat:@"<D:lockroot><D:href>%@</D:href></D:lockroot>\n", lockroot];
++  [xmlString appendString:@"</D:activelock>\n</D:lockdiscovery>\n"];
++  [xmlString appendString:@"</D:prop>"];
++  
++  [self logVerbose:@"WebDAV pretending to lock \"%@\"", relativePath];
++  GCDWebServerDataResponse* response = [GCDWebServerDataResponse responseWithData:[xmlString dataUsingEncoding:NSUTF8StringEncoding]
++                                                                      contentType:@"application/xml; charset=\"utf-8\""];
++  return response;
++}
++
++- (GCDWebServerResponse*)performUNLOCK:(GCDWebServerRequest*)request {
++  if (!_IsMacFinder(request)) {
++    return [GCDWebServerErrorResponse responseWithClientError:kGCDWebServerHTTPStatusCode_MethodNotAllowed message:@"UNLOCK method only allowed for Mac Finder"];
++  }
++  
++  NSString* relativePath = request.path;
++  NSString* absolutePath = [_uploadDirectory stringByAppendingPathComponent:relativePath];
++  BOOL isDirectory = NO;
++  if (![self _checkSandboxedPath:absolutePath] || ![[NSFileManager defaultManager] fileExistsAtPath:absolutePath isDirectory:&isDirectory]) {
++    return [GCDWebServerErrorResponse responseWithClientError:kGCDWebServerHTTPStatusCode_NotFound message:@"\"%@\" does not exist", relativePath];
++  }
++  
++  NSString* tokenHeader = [request.headers objectForKey:@"Lock-Token"];
++  if (!tokenHeader.length) {
++    return [GCDWebServerErrorResponse responseWithClientError:kGCDWebServerHTTPStatusCode_BadRequest message:@"Missing 'Lock-Token' header"];
++  }
++  
++  NSString* itemName = [absolutePath lastPathComponent];
++  if ((!_allowHidden && [itemName hasPrefix:@"."]) || (!isDirectory && ![self _checkFileExtension:itemName])) {
++    return [GCDWebServerErrorResponse responseWithClientError:kGCDWebServerHTTPStatusCode_Forbidden message:@"Unlocking item name \"%@\" is not allowed", itemName];
++  }
++  
++  [self logVerbose:@"WebDAV pretending to unlock \"%@\"", relativePath];
++  return [GCDWebServerResponse responseWithStatusCode:kGCDWebServerHTTPStatusCode_NoContent];
++}
++
++@end
++
++@implementation GCDWebDAVServer
++
++@synthesize uploadDirectory=_uploadDirectory, allowedFileExtensions=_allowedExtensions, allowHiddenItems=_allowHidden;
++
++- (instancetype)initWithUploadDirectory:(NSString*)path {
++  if ((self = [super init])) {
++    _uploadDirectory = [[path stringByStandardizingPath] copy];
++    GCDWebDAVServer* __unsafe_unretained server = self;
++    
++    // 9.1 PROPFIND method
++    [self addDefaultHandlerForMethod:@"PROPFIND" requestClass:[GCDWebServerDataRequest class] processBlock:^GCDWebServerResponse *(GCDWebServerRequest* request) {
++      return [server performPROPFIND:(GCDWebServerDataRequest*)request];
++    }];
++    
++    // 9.3 MKCOL Method
++    [self addDefaultHandlerForMethod:@"MKCOL" requestClass:[GCDWebServerDataRequest class] processBlock:^GCDWebServerResponse *(GCDWebServerRequest* request) {
++      return [server performMKCOL:(GCDWebServerDataRequest*)request];
++    }];
++    
++    // 9.4 GET & HEAD methods
++    [self addDefaultHandlerForMethod:@"GET" requestClass:[GCDWebServerRequest class] processBlock:^GCDWebServerResponse *(GCDWebServerRequest* request) {
++      return [server performGET:request];
++    }];
++    
++    // 9.6 DELETE method
++    [self addDefaultHandlerForMethod:@"DELETE" requestClass:[GCDWebServerRequest class] processBlock:^GCDWebServerResponse *(GCDWebServerRequest* request) {
++      return [server performDELETE:request];
++    }];
++    
++    // 9.7 PUT method
++    [self addDefaultHandlerForMethod:@"PUT" requestClass:[GCDWebServerFileRequest class] processBlock:^GCDWebServerResponse *(GCDWebServerRequest* request) {
++      return [server performPUT:(GCDWebServerFileRequest*)request];
++    }];
++    
++    // 9.8 COPY method
++    [self addDefaultHandlerForMethod:@"COPY" requestClass:[GCDWebServerRequest class] processBlock:^GCDWebServerResponse *(GCDWebServerRequest* request) {
++      return [server performCOPY:request isMove:NO];
++    }];
++    
++    // 9.9 MOVE method
++    [self addDefaultHandlerForMethod:@"MOVE" requestClass:[GCDWebServerRequest class] processBlock:^GCDWebServerResponse *(GCDWebServerRequest* request) {
++      return [server performCOPY:request isMove:YES];
++    }];
++    
++    // 9.10 LOCK method
++    [self addDefaultHandlerForMethod:@"LOCK" requestClass:[GCDWebServerDataRequest class] processBlock:^GCDWebServerResponse *(GCDWebServerRequest* request) {
++      return [server performLOCK:(GCDWebServerDataRequest*)request];
++    }];
++    
++    // 9.11 UNLOCK method
++    [self addDefaultHandlerForMethod:@"UNLOCK" requestClass:[GCDWebServerRequest class] processBlock:^GCDWebServerResponse *(GCDWebServerRequest* request) {
++      return [server performUNLOCK:request];
++    }];
++    
++    // 10.1 OPTIONS method / DAV Header
++    [self addDefaultHandlerForMethod:@"OPTIONS" requestClass:[GCDWebServerRequest class] processBlock:^GCDWebServerResponse *(GCDWebServerRequest* request) {
++      return [server performOPTIONS:request];
++    }];
++    
++  }
++  return self;
++}
++
++@end
++
++@implementation GCDWebDAVServer (Subclassing)
++
++- (BOOL)shouldUploadFileAtPath:(NSString*)path withTemporaryFile:(NSString*)tempPath {
++  return YES;
++}
++
++- (BOOL)shouldMoveItemFromPath:(NSString*)fromPath toPath:(NSString*)toPath {
++  return YES;
++}
++
++- (BOOL)shouldCopyItemFromPath:(NSString*)fromPath toPath:(NSString*)toPath {
++  return YES;
++}
++
++- (BOOL)shouldDeleteItemAtPath:(NSString*)path {
++  return YES;
++}
++
++- (BOOL)shouldCreateDirectoryAtPath:(NSString*)path {
++  return YES;
++}
++
++@end

http://git-wip-us.apache.org/repos/asf/cordova-plugins/blob/9f15b12f/local-webserver/src/ios/GCDWebServer/GCDWebServer.podspec
----------------------------------------------------------------------
diff --cc local-webserver/src/ios/GCDWebServer/GCDWebServer.podspec
index 0000000,0000000..d713b26
new file mode 100644
--- /dev/null
+++ b/local-webserver/src/ios/GCDWebServer/GCDWebServer.podspec
@@@ -1,0 -1,0 +1,49 @@@
++# http://guides.cocoapods.org/syntax/podspec.html
++# http://guides.cocoapods.org/making/getting-setup-with-trunk.html
++# $ sudo gem update cocoapods
++# (optional) $ pod trunk register {email} {name} --description={computer}
++# $ pod trunk push
++# DELETE THIS SECTION BEFORE PROCEEDING!
++
++Pod::Spec.new do |s|
++  s.name     = 'GCDWebServer'
++  s.version  = '3.1'
++  s.author   =  { 'Pierre-Olivier Latour' => 'info@pol-online.net' }
++  s.license  = { :type => 'BSD', :file => 'LICENSE' }
++  s.homepage = 'https://github.com/swisspol/GCDWebServer'
++  s.summary  = 'Lightweight GCD based HTTP server for OS X & iOS (includes web based uploader & WebDAV server)'
++  
++  s.source   = { :git => 'https://github.com/swisspol/GCDWebServer.git', :tag => s.version.to_s }
++  s.ios.deployment_target = '5.0'
++  s.osx.deployment_target = '10.7'
++  s.requires_arc = true
++  
++  s.default_subspec = 'Core'
++  
++  s.subspec 'Core' do |cs|
++    cs.source_files = 'GCDWebServer/**/*.{h,m}'
++    cs.private_header_files = "GCDWebServer/Core/GCDWebServerPrivate.h"
++    cs.requires_arc = true
++    cs.ios.library = 'z'
++    cs.ios.frameworks = 'MobileCoreServices', 'CFNetwork'
++    cs.osx.library = 'z'
++    cs.osx.framework = 'SystemConfiguration'
++  end
++  
++  s.subspec 'WebDAV' do |cs|
++    cs.dependency 'GCDWebServer/Core'
++    cs.source_files = 'GCDWebDAVServer/*.{h,m}'
++    cs.requires_arc = true
++    cs.ios.library = 'xml2'
++    cs.osx.library = 'xml2'
++    cs.compiler_flags = '-I$(SDKROOT)/usr/include/libxml2'
++  end
++  
++  s.subspec 'WebUploader' do |cs|
++    cs.dependency 'GCDWebServer/Core'
++    cs.source_files = 'GCDWebUploader/*.{h,m}'
++    cs.requires_arc = true
++    cs.resource = "GCDWebUploader/GCDWebUploader.bundle"
++  end
++  
++end

http://git-wip-us.apache.org/repos/asf/cordova-plugins/blob/9f15b12f/local-webserver/src/ios/GCDWebServer/GCDWebServer.xcodeproj/project.pbxproj
----------------------------------------------------------------------
diff --cc local-webserver/src/ios/GCDWebServer/GCDWebServer.xcodeproj/project.pbxproj
index 0000000,0000000..e358bba
new file mode 100644
--- /dev/null
+++ b/local-webserver/src/ios/GCDWebServer/GCDWebServer.xcodeproj/project.pbxproj
@@@ -1,0 -1,0 +1,637 @@@
++// !$*UTF8*$!
++{
++	archiveVersion = 1;
++	classes = {
++	};
++	objectVersion = 46;
++	objects = {
++
++/* Begin PBXAggregateTarget section */
++		E274F876187E77D8009E0582 /* Build All */ = {
++			isa = PBXAggregateTarget;
++			buildConfigurationList = E274F879187E77D8009E0582 /* Build configuration list for PBXAggregateTarget "Build All" */;
++			buildPhases = (
++			);
++			dependencies = (
++				E274F87D187E77E5009E0582 /* PBXTargetDependency */,
++				E274F87B187E77E3009E0582 /* PBXTargetDependency */,
++			);
++			name = "Build All";
++			productName = "Build All";
++		};
++/* End PBXAggregateTarget section */
++
++/* Begin PBXBuildFile section */
++		E208D149167B76B700500836 /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E208D148167B76B700500836 /* CFNetwork.framework */; };
++		E208D1B3167BB17E00500836 /* CoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E208D1B2167BB17E00500836 /* CoreServices.framework */; };
++		E221128F1690B6470048D2B2 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = E221128E1690B6470048D2B2 /* main.m */; };
++		E22112951690B64F0048D2B2 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = E22112921690B64F0048D2B2 /* AppDelegate.m */; };
++		E22112971690B64F0048D2B2 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = E22112941690B64F0048D2B2 /* main.m */; };
++		E22112991690B7AA0048D2B2 /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E22112981690B7AA0048D2B2 /* CFNetwork.framework */; };
++		E221129B1690B7B10048D2B2 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E221129A1690B7B10048D2B2 /* UIKit.framework */; };
++		E221129D1690B7BA0048D2B2 /* MobileCoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E221129C1690B7BA0048D2B2 /* MobileCoreServices.framework */; };
++		E28BAE3418F99C810095C089 /* GCDWebServer.m in Sources */ = {isa = PBXBuildFile; fileRef = E28BAE1718F99C810095C089 /* GCDWebServer.m */; };
++		E28BAE3518F99C810095C089 /* GCDWebServer.m in Sources */ = {isa = PBXBuildFile; fileRef = E28BAE1718F99C810095C089 /* GCDWebServer.m */; };
++		E28BAE3618F99C810095C089 /* GCDWebServerConnection.m in Sources */ = {isa = PBXBuildFile; fileRef = E28BAE1918F99C810095C089 /* GCDWebServerConnection.m */; };
++		E28BAE3718F99C810095C089 /* GCDWebServerConnection.m in Sources */ = {isa = PBXBuildFile; fileRef = E28BAE1918F99C810095C089 /* GCDWebServerConnection.m */; };
++		E28BAE3818F99C810095C089 /* GCDWebServerFunctions.m in Sources */ = {isa = PBXBuildFile; fileRef = E28BAE1B18F99C810095C089 /* GCDWebServerFunctions.m */; };
++		E28BAE3918F99C810095C089 /* GCDWebServerFunctions.m in Sources */ = {isa = PBXBuildFile; fileRef = E28BAE1B18F99C810095C089 /* GCDWebServerFunctions.m */; };
++		E28BAE3A18F99C810095C089 /* GCDWebServerRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = E28BAE1F18F99C810095C089 /* GCDWebServerRequest.m */; };
++		E28BAE3B18F99C810095C089 /* GCDWebServerRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = E28BAE1F18F99C810095C089 /* GCDWebServerRequest.m */; };
++		E28BAE3C18F99C810095C089 /* GCDWebServerResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = E28BAE2118F99C810095C089 /* GCDWebServerResponse.m */; };
++		E28BAE3D18F99C810095C089 /* GCDWebServerResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = E28BAE2118F99C810095C089 /* GCDWebServerResponse.m */; };
++		E28BAE3E18F99C810095C089 /* GCDWebServerDataRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = E28BAE2418F99C810095C089 /* GCDWebServerDataRequest.m */; };
++		E28BAE3F18F99C810095C089 /* GCDWebServerDataRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = E28BAE2418F99C810095C089 /* GCDWebServerDataRequest.m */; };
++		E28BAE4018F99C810095C089 /* GCDWebServerFileRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = E28BAE2618F99C810095C089 /* GCDWebServerFileRequest.m */; };
++		E28BAE4118F99C810095C089 /* GCDWebServerFileRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = E28BAE2618F99C810095C089 /* GCDWebServerFileRequest.m */; };
++		E28BAE4218F99C810095C089 /* GCDWebServerMultiPartFormRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = E28BAE2818F99C810095C089 /* GCDWebServerMultiPartFormRequest.m */; };
++		E28BAE4318F99C810095C089 /* GCDWebServerMultiPartFormRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = E28BAE2818F99C810095C089 /* GCDWebServerMultiPartFormRequest.m */; };
++		E28BAE4418F99C810095C089 /* GCDWebServerURLEncodedFormRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = E28BAE2A18F99C810095C089 /* GCDWebServerURLEncodedFormRequest.m */; };
++		E28BAE4518F99C810095C089 /* GCDWebServerURLEncodedFormRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = E28BAE2A18F99C810095C089 /* GCDWebServerURLEncodedFormRequest.m */; };
++		E28BAE4618F99C810095C089 /* GCDWebServerDataResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = E28BAE2D18F99C810095C089 /* GCDWebServerDataResponse.m */; };
++		E28BAE4718F99C810095C089 /* GCDWebServerDataResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = E28BAE2D18F99C810095C089 /* GCDWebServerDataResponse.m */; };
++		E28BAE4818F99C810095C089 /* GCDWebServerErrorResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = E28BAE2F18F99C810095C089 /* GCDWebServerErrorResponse.m */; };
++		E28BAE4918F99C810095C089 /* GCDWebServerErrorResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = E28BAE2F18F99C810095C089 /* GCDWebServerErrorResponse.m */; };
++		E28BAE4A18F99C810095C089 /* GCDWebServerFileResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = E28BAE3118F99C810095C089 /* GCDWebServerFileResponse.m */; };
++		E28BAE4B18F99C810095C089 /* GCDWebServerFileResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = E28BAE3118F99C810095C089 /* GCDWebServerFileResponse.m */; };
++		E28BAE4C18F99C810095C089 /* GCDWebServerStreamedResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = E28BAE3318F99C810095C089 /* GCDWebServerStreamedResponse.m */; };
++		E28BAE4D18F99C810095C089 /* GCDWebServerStreamedResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = E28BAE3318F99C810095C089 /* GCDWebServerStreamedResponse.m */; };
++		E2A0E80A18F3432600C580B1 /* GCDWebDAVServer.m in Sources */ = {isa = PBXBuildFile; fileRef = E2A0E80918F3432600C580B1 /* GCDWebDAVServer.m */; };
++		E2A0E80B18F3432600C580B1 /* GCDWebDAVServer.m in Sources */ = {isa = PBXBuildFile; fileRef = E2A0E80918F3432600C580B1 /* GCDWebDAVServer.m */; };
++		E2A0E80D18F35C9A00C580B1 /* libxml2.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = E2A0E80C18F35C9A00C580B1 /* libxml2.dylib */; };
++		E2A0E80F18F35CA300C580B1 /* libxml2.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = E2A0E80E18F35CA300C580B1 /* libxml2.dylib */; };
++		E2B0D4A718F13495009A7927 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = E2B0D4A618F13495009A7927 /* libz.dylib */; };
++		E2B0D4A918F134A8009A7927 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = E2B0D4A818F134A8009A7927 /* libz.dylib */; };
++		E2BE850A18E77ECA0061360B /* GCDWebUploader.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E2BE850718E77ECA0061360B /* GCDWebUploader.bundle */; };
++		E2BE850B18E77ECA0061360B /* GCDWebUploader.m in Sources */ = {isa = PBXBuildFile; fileRef = E2BE850918E77ECA0061360B /* GCDWebUploader.m */; };
++		E2BE850C18E785940061360B /* GCDWebUploader.m in Sources */ = {isa = PBXBuildFile; fileRef = E2BE850918E77ECA0061360B /* GCDWebUploader.m */; };
++		E2BE850F18E788990061360B /* GCDWebUploader.bundle in CopyFiles */ = {isa = PBXBuildFile; fileRef = E2BE850718E77ECA0061360B /* GCDWebUploader.bundle */; };
++		E2BE851118E79DAF0061360B /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E2BE851018E79DAF0061360B /* SystemConfiguration.framework */; };
++/* End PBXBuildFile section */
++
++/* Begin PBXContainerItemProxy section */
++		E274F87A187E77E3009E0582 /* PBXContainerItemProxy */ = {
++			isa = PBXContainerItemProxy;
++			containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
++			proxyType = 1;
++			remoteGlobalIDString = 8DD76FA90486AB0100D96B5E;
++			remoteInfo = "GCDWebServer (Mac)";
++		};
++		E274F87C187E77E5009E0582 /* PBXContainerItemProxy */ = {
++			isa = PBXContainerItemProxy;
++			containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
++			proxyType = 1;
++			remoteGlobalIDString = E22112591690B4DE0048D2B2;
++			remoteInfo = "GCDWebServer (iOS)";
++		};
++/* End PBXContainerItemProxy section */
++
++/* Begin PBXCopyFilesBuildPhase section */
++		E2BE850E18E788910061360B /* CopyFiles */ = {
++			isa = PBXCopyFilesBuildPhase;
++			buildActionMask = 2147483647;
++			dstPath = "";
++			dstSubfolderSpec = 16;
++			files = (
++				E2BE850F18E788990061360B /* GCDWebUploader.bundle in CopyFiles */,
++			);
++			runOnlyForDeploymentPostprocessing = 0;
++		};
++/* End PBXCopyFilesBuildPhase section */
++
++/* Begin PBXFileReference section */
++		8DD76FB20486AB0100D96B5E /* GCDWebServer */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = GCDWebServer; sourceTree = BUILT_PRODUCTS_DIR; };
++		E208D148167B76B700500836 /* CFNetwork.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CFNetwork.framework; path = System/Library/Frameworks/CFNetwork.framework; sourceTree = SDKROOT; };
++		E208D1B2167BB17E00500836 /* CoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreServices.framework; path = System/Library/Frameworks/CoreServices.framework; sourceTree = SDKROOT; };
++		E221125A1690B4DE0048D2B2 /* GCDWebServer.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = GCDWebServer.app; sourceTree = BUILT_PRODUCTS_DIR; };
++		E221128E1690B6470048D2B2 /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
++		E22112911690B64F0048D2B2 /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; };
++		E22112921690B64F0048D2B2 /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = "<group>"; };
++		E22112931690B64F0048D2B2 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
++		E22112941690B64F0048D2B2 /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
++		E22112981690B7AA0048D2B2 /* CFNetwork.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CFNetwork.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.0.sdk/System/Library/Frameworks/CFNetwork.framework; sourceTree = DEVELOPER_DIR; };
++		E221129A1690B7B10048D2B2 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.0.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; };
++		E221129C1690B7BA0048D2B2 /* MobileCoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MobileCoreServices.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.0.sdk/System/Library/Frameworks/MobileCoreServices.framework; sourceTree = DEVELOPER_DIR; };
++		E26DC18719E84B2200C68DDC /* GCDWebServer.podspec */ = {isa = PBXFileReference; lastKnownFileType = text; path = GCDWebServer.podspec; sourceTree = "<group>"; };
++		E26DC18819E84BC000C68DDC /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = "<group>"; };
++		E28BAE1618F99C810095C089 /* GCDWebServer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GCDWebServer.h; sourceTree = "<group>"; };
++		E28BAE1718F99C810095C089 /* GCDWebServer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GCDWebServer.m; sourceTree = "<group>"; };
++		E28BAE1818F99C810095C089 /* GCDWebServerConnection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GCDWebServerConnection.h; sourceTree = "<group>"; };
++		E28BAE1918F99C810095C089 /* GCDWebServerConnection.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GCDWebServerConnection.m; sourceTree = "<group>"; };
++		E28BAE1A18F99C810095C089 /* GCDWebServerFunctions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GCDWebServerFunctions.h; sourceTree = "<group>"; };
++		E28BAE1B18F99C810095C089 /* GCDWebServerFunctions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GCDWebServerFunctions.m; sourceTree = "<group>"; };
++		E28BAE1C18F99C810095C089 /* GCDWebServerHTTPStatusCodes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GCDWebServerHTTPStatusCodes.h; sourceTree = "<group>"; };
++		E28BAE1D18F99C810095C089 /* GCDWebServerPrivate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GCDWebServerPrivate.h; sourceTree = "<group>"; };
++		E28BAE1E18F99C810095C089 /* GCDWebServerRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GCDWebServerRequest.h; sourceTree = "<group>"; };
++		E28BAE1F18F99C810095C089 /* GCDWebServerRequest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GCDWebServerRequest.m; sourceTree = "<group>"; };
++		E28BAE2018F99C810095C089 /* GCDWebServerResponse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GCDWebServerResponse.h; sourceTree = "<group>"; };
++		E28BAE2118F99C810095C089 /* GCDWebServerResponse.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GCDWebServerResponse.m; sourceTree = "<group>"; };
++		E28BAE2318F99C810095C089 /* GCDWebServerDataRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GCDWebServerDataRequest.h; sourceTree = "<group>"; };
++		E28BAE2418F99C810095C089 /* GCDWebServerDataRequest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GCDWebServerDataRequest.m; sourceTree = "<group>"; };
++		E28BAE2518F99C810095C089 /* GCDWebServerFileRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GCDWebServerFileRequest.h; sourceTree = "<group>"; };
++		E28BAE2618F99C810095C089 /* GCDWebServerFileRequest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GCDWebServerFileRequest.m; sourceTree = "<group>"; };
++		E28BAE2718F99C810095C089 /* GCDWebServerMultiPartFormRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GCDWebServerMultiPartFormRequest.h; sourceTree = "<group>"; };
++		E28BAE2818F99C810095C089 /* GCDWebServerMultiPartFormRequest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GCDWebServerMultiPartFormRequest.m; sourceTree = "<group>"; };
++		E28BAE2918F99C810095C089 /* GCDWebServerURLEncodedFormRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GCDWebServerURLEncodedFormRequest.h; sourceTree = "<group>"; };
++		E28BAE2A18F99C810095C089 /* GCDWebServerURLEncodedFormRequest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GCDWebServerURLEncodedFormRequest.m; sourceTree = "<group>"; };
++		E28BAE2C18F99C810095C089 /* GCDWebServerDataResponse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GCDWebServerDataResponse.h; sourceTree = "<group>"; };
++		E28BAE2D18F99C810095C089 /* GCDWebServerDataResponse.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GCDWebServerDataResponse.m; sourceTree = "<group>"; };
++		E28BAE2E18F99C810095C089 /* GCDWebServerErrorResponse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GCDWebServerErrorResponse.h; sourceTree = "<group>"; };
++		E28BAE2F18F99C810095C089 /* GCDWebServerErrorResponse.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GCDWebServerErrorResponse.m; sourceTree = "<group>"; };
++		E28BAE3018F99C810095C089 /* GCDWebServerFileResponse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GCDWebServerFileResponse.h; sourceTree = "<group>"; };
++		E28BAE3118F99C810095C089 /* GCDWebServerFileResponse.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GCDWebServerFileResponse.m; sourceTree = "<group>"; };
++		E28BAE3218F99C810095C089 /* GCDWebServerStreamedResponse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GCDWebServerStreamedResponse.h; sourceTree = "<group>"; };
++		E28BAE3318F99C810095C089 /* GCDWebServerStreamedResponse.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GCDWebServerStreamedResponse.m; sourceTree = "<group>"; };
++		E2A0E80818F3432600C580B1 /* GCDWebDAVServer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GCDWebDAVServer.h; sourceTree = "<group>"; };
++		E2A0E80918F3432600C580B1 /* GCDWebDAVServer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GCDWebDAVServer.m; sourceTree = "<group>"; };
++		E2A0E80C18F35C9A00C580B1 /* libxml2.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libxml2.dylib; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.1.sdk/usr/lib/libxml2.dylib; sourceTree = DEVELOPER_DIR; };
++		E2A0E80E18F35CA300C580B1 /* libxml2.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libxml2.dylib; path = usr/lib/libxml2.dylib; sourceTree = SDKROOT; };
++		E2B0D4A618F13495009A7927 /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.dylib; path = usr/lib/libz.dylib; sourceTree = SDKROOT; };
++		E2B0D4A818F134A8009A7927 /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.dylib; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.1.sdk/usr/lib/libz.dylib; sourceTree = DEVELOPER_DIR; };
++		E2BE850718E77ECA0061360B /* GCDWebUploader.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = GCDWebUploader.bundle; sourceTree = "<group>"; };
++		E2BE850818E77ECA0061360B /* GCDWebUploader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GCDWebUploader.h; sourceTree = "<group>"; };
++		E2BE850918E77ECA0061360B /* GCDWebUploader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GCDWebUploader.m; sourceTree = "<group>"; };
++		E2BE851018E79DAF0061360B /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; };
++/* End PBXFileReference section */
++
++/* Begin PBXFrameworksBuildPhase section */
++		8DD76FAD0486AB0100D96B5E /* Frameworks */ = {
++			isa = PBXFrameworksBuildPhase;
++			buildActionMask = 2147483647;
++			files = (
++				E2BE851118E79DAF0061360B /* SystemConfiguration.framework in Frameworks */,
++				E208D1B3167BB17E00500836 /* CoreServices.framework in Frameworks */,
++				E208D149167B76B700500836 /* CFNetwork.framework in Frameworks */,
++				E2A0E80F18F35CA300C580B1 /* libxml2.dylib in Frameworks */,
++				E2B0D4A718F13495009A7927 /* libz.dylib in Frameworks */,
++			);
++			runOnlyForDeploymentPostprocessing = 0;
++		};
++		E22112571690B4DE0048D2B2 /* Frameworks */ = {
++			isa = PBXFrameworksBuildPhase;
++			buildActionMask = 2147483647;
++			files = (
++				E221129D1690B7BA0048D2B2 /* MobileCoreServices.framework in Frameworks */,
++				E221129B1690B7B10048D2B2 /* UIKit.framework in Frameworks */,
++				E22112991690B7AA0048D2B2 /* CFNetwork.framework in Frameworks */,
++				E2A0E80D18F35C9A00C580B1 /* libxml2.dylib in Frameworks */,
++				E2B0D4A918F134A8009A7927 /* libz.dylib in Frameworks */,
++			);
++			runOnlyForDeploymentPostprocessing = 0;
++		};
++/* End PBXFrameworksBuildPhase section */
++
++/* Begin PBXGroup section */
++		08FB7794FE84155DC02AAC07 /* LittleCMS */ = {
++			isa = PBXGroup;
++			children = (
++				E26DC18819E84BC000C68DDC /* README.md */,
++				E26DC18719E84B2200C68DDC /* GCDWebServer.podspec */,
++				E28BAE1418F99C810095C089 /* GCDWebServer */,
++				E2A0E80718F3432600C580B1 /* GCDWebDAVServer */,
++				E2BE850618E77ECA0061360B /* GCDWebUploader */,
++				E221128D1690B6470048D2B2 /* Mac */,
++				E22112901690B64F0048D2B2 /* iOS */,
++				E282F1A7150FF0630004D7C0 /* Mac Frameworks and Libraries */,
++				E221129E1690B7CB0048D2B2 /* iOS Frameworks and Libraries */,
++				1AB674ADFE9D54B511CA2CBB /* Products */,
++			);
++			name = LittleCMS;
++			sourceTree = "<group>";
++		};
++		1AB674ADFE9D54B511CA2CBB /* Products */ = {
++			isa = PBXGroup;
++			children = (
++				8DD76FB20486AB0100D96B5E /* GCDWebServer */,
++				E221125A1690B4DE0048D2B2 /* GCDWebServer.app */,
++			);
++			name = Products;
++			sourceTree = "<group>";
++		};
++		E221128D1690B6470048D2B2 /* Mac */ = {
++			isa = PBXGroup;
++			children = (
++				E221128E1690B6470048D2B2 /* main.m */,
++			);
++			path = Mac;
++			sourceTree = "<group>";
++		};
++		E22112901690B64F0048D2B2 /* iOS */ = {
++			isa = PBXGroup;
++			children = (
++				E22112911690B64F0048D2B2 /* AppDelegate.h */,
++				E22112921690B64F0048D2B2 /* AppDelegate.m */,
++				E22112931690B64F0048D2B2 /* Info.plist */,
++				E22112941690B64F0048D2B2 /* main.m */,
++			);
++			path = iOS;
++			sourceTree = "<group>";
++		};
++		E221129E1690B7CB0048D2B2 /* iOS Frameworks and Libraries */ = {
++			isa = PBXGroup;
++			children = (
++				E221129C1690B7BA0048D2B2 /* MobileCoreServices.framework */,
++				E221129A1690B7B10048D2B2 /* UIKit.framework */,
++				E22112981690B7AA0048D2B2 /* CFNetwork.framework */,
++				E2A0E80C18F35C9A00C580B1 /* libxml2.dylib */,
++				E2B0D4A818F134A8009A7927 /* libz.dylib */,
++			);
++			name = "iOS Frameworks and Libraries";
++			sourceTree = "<group>";
++		};
++		E282F1A7150FF0630004D7C0 /* Mac Frameworks and Libraries */ = {
++			isa = PBXGroup;
++			children = (
++				E2BE851018E79DAF0061360B /* SystemConfiguration.framework */,
++				E208D1B2167BB17E00500836 /* CoreServices.framework */,
++				E208D148167B76B700500836 /* CFNetwork.framework */,
++				E2A0E80E18F35CA300C580B1 /* libxml2.dylib */,
++				E2B0D4A618F13495009A7927 /* libz.dylib */,
++			);
++			name = "Mac Frameworks and Libraries";
++			sourceTree = "<group>";
++		};
++		E28BAE1418F99C810095C089 /* GCDWebServer */ = {
++			isa = PBXGroup;
++			children = (
++				E28BAE1518F99C810095C089 /* Core */,
++				E28BAE2218F99C810095C089 /* Requests */,
++				E28BAE2B18F99C810095C089 /* Responses */,
++			);
++			path = GCDWebServer;
++			sourceTree = "<group>";
++		};
++		E28BAE1518F99C810095C089 /* Core */ = {
++			isa = PBXGroup;
++			children = (
++				E28BAE1618F99C810095C089 /* GCDWebServer.h */,
++				E28BAE1718F99C810095C089 /* GCDWebServer.m */,
++				E28BAE1818F99C810095C089 /* GCDWebServerConnection.h */,
++				E28BAE1918F99C810095C089 /* GCDWebServerConnection.m */,
++				E28BAE1A18F99C810095C089 /* GCDWebServerFunctions.h */,
++				E28BAE1B18F99C810095C089 /* GCDWebServerFunctions.m */,
++				E28BAE1C18F99C810095C089 /* GCDWebServerHTTPStatusCodes.h */,
++				E28BAE1D18F99C810095C089 /* GCDWebServerPrivate.h */,
++				E28BAE1E18F99C810095C089 /* GCDWebServerRequest.h */,
++				E28BAE1F18F99C810095C089 /* GCDWebServerRequest.m */,
++				E28BAE2018F99C810095C089 /* GCDWebServerResponse.h */,
++				E28BAE2118F99C810095C089 /* GCDWebServerResponse.m */,
++			);
++			path = Core;
++			sourceTree = "<group>";
++		};
++		E28BAE2218F99C810095C089 /* Requests */ = {
++			isa = PBXGroup;
++			children = (
++				E28BAE2318F99C810095C089 /* GCDWebServerDataRequest.h */,
++				E28BAE2418F99C810095C089 /* GCDWebServerDataRequest.m */,
++				E28BAE2518F99C810095C089 /* GCDWebServerFileRequest.h */,
++				E28BAE2618F99C810095C089 /* GCDWebServerFileRequest.m */,
++				E28BAE2718F99C810095C089 /* GCDWebServerMultiPartFormRequest.h */,
++				E28BAE2818F99C810095C089 /* GCDWebServerMultiPartFormRequest.m */,
++				E28BAE2918F99C810095C089 /* GCDWebServerURLEncodedFormRequest.h */,
++				E28BAE2A18F99C810095C089 /* GCDWebServerURLEncodedFormRequest.m */,
++			);
++			path = Requests;
++			sourceTree = "<group>";
++		};
++		E28BAE2B18F99C810095C089 /* Responses */ = {
++			isa = PBXGroup;
++			children = (
++				E28BAE2C18F99C810095C089 /* GCDWebServerDataResponse.h */,
++				E28BAE2D18F99C810095C089 /* GCDWebServerDataResponse.m */,
++				E28BAE2E18F99C810095C089 /* GCDWebServerErrorResponse.h */,
++				E28BAE2F18F99C810095C089 /* GCDWebServerErrorResponse.m */,
++				E28BAE3018F99C810095C089 /* GCDWebServerFileResponse.h */,
++				E28BAE3118F99C810095C089 /* GCDWebServerFileResponse.m */,
++				E28BAE3218F99C810095C089 /* GCDWebServerStreamedResponse.h */,
++				E28BAE3318F99C810095C089 /* GCDWebServerStreamedResponse.m */,
++			);
++			path = Responses;
++			sourceTree = "<group>";
++		};
++		E2A0E80718F3432600C580B1 /* GCDWebDAVServer */ = {
++			isa = PBXGroup;
++			children = (
++				E2A0E80818F3432600C580B1 /* GCDWebDAVServer.h */,
++				E2A0E80918F3432600C580B1 /* GCDWebDAVServer.m */,
++			);
++			path = GCDWebDAVServer;
++			sourceTree = "<group>";
++		};
++		E2BE850618E77ECA0061360B /* GCDWebUploader */ = {
++			isa = PBXGroup;
++			children = (
++				E2BE850718E77ECA0061360B /* GCDWebUploader.bundle */,
++				E2BE850818E77ECA0061360B /* GCDWebUploader.h */,
++				E2BE850918E77ECA0061360B /* GCDWebUploader.m */,
++			);
++			path = GCDWebUploader;
++			sourceTree = "<group>";
++		};
++/* End PBXGroup section */
++
++/* Begin PBXNativeTarget section */
++		8DD76FA90486AB0100D96B5E /* GCDWebServer (Mac) */ = {
++			isa = PBXNativeTarget;
++			buildConfigurationList = 1DEB928508733DD80010E9CD /* Build configuration list for PBXNativeTarget "GCDWebServer (Mac)" */;
++			buildPhases = (
++				E21F038418FB37D80043AD1E /* Delete GCDWebUploader.bundle */,
++				E2BE850E18E788910061360B /* CopyFiles */,
++				8DD76FAB0486AB0100D96B5E /* Sources */,
++				8DD76FAD0486AB0100D96B5E /* Frameworks */,
++			);
++			buildRules = (
++			);
++			dependencies = (
++			);
++			name = "GCDWebServer (Mac)";
++			productInstallPath = "$(HOME)/bin";
++			productName = LittleCMS;
++			productReference = 8DD76FB20486AB0100D96B5E /* GCDWebServer */;
++			productType = "com.apple.product-type.tool";
++		};
++		E22112591690B4DE0048D2B2 /* GCDWebServer (iOS) */ = {
++			isa = PBXNativeTarget;
++			buildConfigurationList = E22112751690B4DF0048D2B2 /* Build configuration list for PBXNativeTarget "GCDWebServer (iOS)" */;
++			buildPhases = (
++				E2BE850418E77B730061360B /* Resources */,
++				E22112561690B4DE0048D2B2 /* Sources */,
++				E22112571690B4DE0048D2B2 /* Frameworks */,
++			);
++			buildRules = (
++			);
++			dependencies = (
++			);
++			name = "GCDWebServer (iOS)";
++			productName = GCDWebServer;
++			productReference = E221125A1690B4DE0048D2B2 /* GCDWebServer.app */;
++			productType = "com.apple.product-type.application";
++		};
++/* End PBXNativeTarget section */
++
++/* Begin PBXProject section */
++		08FB7793FE84155DC02AAC07 /* Project object */ = {
++			isa = PBXProject;
++			attributes = {
++				LastUpgradeCheck = 0610;
++			};
++			buildConfigurationList = 1DEB928908733DD80010E9CD /* Build configuration list for PBXProject "GCDWebServer" */;
++			compatibilityVersion = "Xcode 3.2";
++			developmentRegion = English;
++			hasScannedForEncodings = 1;
++			knownRegions = (
++				English,
++				Japanese,
++				French,
++				German,
++				en,
++			);
++			mainGroup = 08FB7794FE84155DC02AAC07 /* LittleCMS */;
++			projectDirPath = "";
++			projectRoot = "";
++			targets = (
++				E274F876187E77D8009E0582 /* Build All */,
++				8DD76FA90486AB0100D96B5E /* GCDWebServer (Mac) */,
++				E22112591690B4DE0048D2B2 /* GCDWebServer (iOS) */,
++			);
++		};
++/* End PBXProject section */
++
++/* Begin PBXResourcesBuildPhase section */
++		E2BE850418E77B730061360B /* Resources */ = {
++			isa = PBXResourcesBuildPhase;
++			buildActionMask = 2147483647;
++			files = (
++				E2BE850A18E77ECA0061360B /* GCDWebUploader.bundle in Resources */,
++			);
++			runOnlyForDeploymentPostprocessing = 0;
++		};
++/* End PBXResourcesBuildPhase section */
++
++/* Begin PBXShellScriptBuildPhase section */
++		E21F038418FB37D80043AD1E /* Delete GCDWebUploader.bundle */ = {
++			isa = PBXShellScriptBuildPhase;
++			buildActionMask = 2147483647;
++			files = (
++			);
++			inputPaths = (
++			);
++			name = "Delete GCDWebUploader.bundle";
++			outputPaths = (
++			);
++			runOnlyForDeploymentPostprocessing = 0;
++			shellPath = /bin/sh;
++			shellScript = "cd \"$BUILT_PRODUCTS_DIR\"\nrm -rf \"GCDWebUploader.bundle\"\n";
++			showEnvVarsInLog = 0;
++		};
++/* End PBXShellScriptBuildPhase section */
++
++/* Begin PBXSourcesBuildPhase section */
++		8DD76FAB0486AB0100D96B5E /* Sources */ = {
++			isa = PBXSourcesBuildPhase;
++			buildActionMask = 2147483647;
++			files = (
++				E28BAE4618F99C810095C089 /* GCDWebServerDataResponse.m in Sources */,
++				E28BAE3818F99C810095C089 /* GCDWebServerFunctions.m in Sources */,
++				E28BAE4A18F99C810095C089 /* GCDWebServerFileResponse.m in Sources */,
++				E28BAE4418F99C810095C089 /* GCDWebServerURLEncodedFormRequest.m in Sources */,
++				E28BAE3A18F99C810095C089 /* GCDWebServerRequest.m in Sources */,
++				E28BAE3418F99C810095C089 /* GCDWebServer.m in Sources */,
++				E28BAE3618F99C810095C089 /* GCDWebServerConnection.m in Sources */,
++				E28BAE3C18F99C810095C089 /* GCDWebServerResponse.m in Sources */,
++				E28BAE4018F99C810095C089 /* GCDWebServerFileRequest.m in Sources */,
++				E28BAE4C18F99C810095C089 /* GCDWebServerStreamedResponse.m in Sources */,
++				E28BAE3E18F99C810095C089 /* GCDWebServerDataRequest.m in Sources */,
++				E2A0E80A18F3432600C580B1 /* GCDWebDAVServer.m in Sources */,
++				E28BAE4218F99C810095C089 /* GCDWebServerMultiPartFormRequest.m in Sources */,
++				E2BE850C18E785940061360B /* GCDWebUploader.m in Sources */,
++				E221128F1690B6470048D2B2 /* main.m in Sources */,
++				E28BAE4818F99C810095C089 /* GCDWebServerErrorResponse.m in Sources */,
++			);
++			runOnlyForDeploymentPostprocessing = 0;
++		};
++		E22112561690B4DE0048D2B2 /* Sources */ = {
++			isa = PBXSourcesBuildPhase;
++			buildActionMask = 2147483647;
++			files = (
++				E2A0E80B18F3432600C580B1 /* GCDWebDAVServer.m in Sources */,
++				E28BAE4918F99C810095C089 /* GCDWebServerErrorResponse.m in Sources */,
++				E28BAE4518F99C810095C089 /* GCDWebServerURLEncodedFormRequest.m in Sources */,
++				E28BAE4B18F99C810095C089 /* GCDWebServerFileResponse.m in Sources */,
++				E28BAE3918F99C810095C089 /* GCDWebServerFunctions.m in Sources */,
++				E28BAE4118F99C810095C089 /* GCDWebServerFileRequest.m in Sources */,
++				E28BAE4D18F99C810095C089 /* GCDWebServerStreamedResponse.m in Sources */,
++				E28BAE3F18F99C810095C089 /* GCDWebServerDataRequest.m in Sources */,
++				E2BE850B18E77ECA0061360B /* GCDWebUploader.m in Sources */,
++				E22112951690B64F0048D2B2 /* AppDelegate.m in Sources */,
++				E28BAE4718F99C810095C089 /* GCDWebServerDataResponse.m in Sources */,
++				E28BAE3D18F99C810095C089 /* GCDWebServerResponse.m in Sources */,
++				E28BAE3518F99C810095C089 /* GCDWebServer.m in Sources */,
++				E28BAE3718F99C810095C089 /* GCDWebServerConnection.m in Sources */,
++				E28BAE3B18F99C810095C089 /* GCDWebServerRequest.m in Sources */,
++				E22112971690B64F0048D2B2 /* main.m in Sources */,
++				E28BAE4318F99C810095C089 /* GCDWebServerMultiPartFormRequest.m in Sources */,
++			);
++			runOnlyForDeploymentPostprocessing = 0;
++		};
++/* End PBXSourcesBuildPhase section */
++
++/* Begin PBXTargetDependency section */
++		E274F87B187E77E3009E0582 /* PBXTargetDependency */ = {
++			isa = PBXTargetDependency;
++			target = 8DD76FA90486AB0100D96B5E /* GCDWebServer (Mac) */;
++			targetProxy = E274F87A187E77E3009E0582 /* PBXContainerItemProxy */;
++		};
++		E274F87D187E77E5009E0582 /* PBXTargetDependency */ = {
++			isa = PBXTargetDependency;
++			target = E22112591690B4DE0048D2B2 /* GCDWebServer (iOS) */;
++			targetProxy = E274F87C187E77E5009E0582 /* PBXContainerItemProxy */;
++		};
++/* End PBXTargetDependency section */
++
++/* Begin XCBuildConfiguration section */
++		1DEB928608733DD80010E9CD /* Debug */ = {
++			isa = XCBuildConfiguration;
++			buildSettings = {
++				MACOSX_DEPLOYMENT_TARGET = 10.7;
++				PRODUCT_NAME = GCDWebServer;
++				SDKROOT = macosx;
++			};
++			name = Debug;
++		};
++		1DEB928708733DD80010E9CD /* Release */ = {
++			isa = XCBuildConfiguration;
++			buildSettings = {
++				MACOSX_DEPLOYMENT_TARGET = 10.7;
++				PRODUCT_NAME = GCDWebServer;
++				SDKROOT = macosx;
++			};
++			name = Release;
++		};
++		1DEB928A08733DD80010E9CD /* Debug */ = {
++			isa = XCBuildConfiguration;
++			buildSettings = {
++				CLANG_ENABLE_OBJC_ARC = YES;
++				ENABLE_STRICT_OBJC_MSGSEND = YES;
++				GCC_OPTIMIZATION_LEVEL = 0;
++				GCC_PREPROCESSOR_DEFINITIONS = "DEBUG=1";
++				GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = __GCDWEBSERVER_ENABLE_TESTING__;
++				HEADER_SEARCH_PATHS = "$(SDKROOT)/usr/include/libxml2";
++				ONLY_ACTIVE_ARCH = YES;
++				WARNING_CFLAGS = (
++					"-Wall",
++					"-Weverything",
++					"-Wshadow",
++					"-Wshorten-64-to-32",
++					"-Wno-vla",
++					"-Wno-explicit-ownership-type",
++					"-Wno-gnu-statement-expression",
++					"-Wno-direct-ivar-access",
++					"-Wno-implicit-retain-self",
++					"-Wno-assign-enum",
++					"-Wno-format-nonliteral",
++					"-Wno-cast-align",
++					"-Wno-padded",
++					"-Wno-documentation",
++					"-Wno-documentation-unknown-command",
++					"-Wno-objc-missing-property-synthesis",
++				);
++			};
++			name = Debug;
++		};
++		1DEB928B08733DD80010E9CD /* Release */ = {
++			isa = XCBuildConfiguration;
++			buildSettings = {
++				CLANG_ENABLE_OBJC_ARC = YES;
++				ENABLE_STRICT_OBJC_MSGSEND = YES;
++				GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = __GCDWEBSERVER_ENABLE_TESTING__;
++				GCC_TREAT_WARNINGS_AS_ERRORS = YES;
++				HEADER_SEARCH_PATHS = "$(SDKROOT)/usr/include/libxml2";
++				WARNING_CFLAGS = "-Wall";
++			};
++			name = Release;
++		};
++		E22112761690B4DF0048D2B2 /* Debug */ = {
++			isa = XCBuildConfiguration;
++			buildSettings = {
++				CODE_SIGN_IDENTITY = "iPhone Developer";
++				INFOPLIST_FILE = iOS/Info.plist;
++				IPHONEOS_DEPLOYMENT_TARGET = 5.0;
++				PRODUCT_NAME = GCDWebServer;
++				PROVISIONING_PROFILE = "";
++				SDKROOT = iphoneos;
++				TARGETED_DEVICE_FAMILY = "1,2";
++			};
++			name = Debug;
++		};
++		E22112771690B4DF0048D2B2 /* Release */ = {
++			isa = XCBuildConfiguration;
++			buildSettings = {
++				CODE_SIGN_IDENTITY = "iPhone Developer";
++				INFOPLIST_FILE = iOS/Info.plist;
++				IPHONEOS_DEPLOYMENT_TARGET = 5.0;
++				PRODUCT_NAME = GCDWebServer;
++				PROVISIONING_PROFILE = "";
++				SDKROOT = iphoneos;
++				TARGETED_DEVICE_FAMILY = "1,2";
++			};
++			name = Release;
++		};
++		E274F877187E77D8009E0582 /* Debug */ = {
++			isa = XCBuildConfiguration;
++			buildSettings = {
++				PRODUCT_NAME = "$(TARGET_NAME)";
++			};
++			name = Debug;
++		};
++		E274F878187E77D8009E0582 /* Release */ = {
++			isa = XCBuildConfiguration;
++			buildSettings = {
++				PRODUCT_NAME = "$(TARGET_NAME)";
++			};
++			name = Release;
++		};
++/* End XCBuildConfiguration section */
++
++/* Begin XCConfigurationList section */
++		1DEB928508733DD80010E9CD /* Build configuration list for PBXNativeTarget "GCDWebServer (Mac)" */ = {
++			isa = XCConfigurationList;
++			buildConfigurations = (
++				1DEB928608733DD80010E9CD /* Debug */,
++				1DEB928708733DD80010E9CD /* Release */,
++			);
++			defaultConfigurationIsVisible = 0;
++			defaultConfigurationName = Release;
++		};
++		1DEB928908733DD80010E9CD /* Build configuration list for PBXProject "GCDWebServer" */ = {
++			isa = XCConfigurationList;
++			buildConfigurations = (
++				1DEB928A08733DD80010E9CD /* Debug */,
++				1DEB928B08733DD80010E9CD /* Release */,
++			);
++			defaultConfigurationIsVisible = 0;
++			defaultConfigurationName = Release;
++		};
++		E22112751690B4DF0048D2B2 /* Build configuration list for PBXNativeTarget "GCDWebServer (iOS)" */ = {
++			isa = XCConfigurationList;
++			buildConfigurations = (
++				E22112761690B4DF0048D2B2 /* Debug */,
++				E22112771690B4DF0048D2B2 /* Release */,
++			);
++			defaultConfigurationIsVisible = 0;
++			defaultConfigurationName = Release;
++		};
++		E274F879187E77D8009E0582 /* Build configuration list for PBXAggregateTarget "Build All" */ = {
++			isa = XCConfigurationList;
++			buildConfigurations = (
++				E274F877187E77D8009E0582 /* Debug */,
++				E274F878187E77D8009E0582 /* Release */,
++			);
++			defaultConfigurationIsVisible = 0;
++			defaultConfigurationName = Release;
++		};
++/* End XCConfigurationList section */
++	};
++	rootObject = 08FB7793FE84155DC02AAC07 /* Project object */;
++}


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cordova.apache.org
For additional commands, e-mail: commits-help@cordova.apache.org


Mime
View raw message