From 1b163b1b8b7a18e63708a786671c15f87d9a3385 Mon Sep 17 00:00:00 2001 From: Pierre-Olivier Latour Date: Wed, 19 Mar 2014 21:15:25 -0700 Subject: [PATCH] #27 Updated API to expose range requests support --- CGDWebServer/GCDWebServer.h | 2 +- CGDWebServer/GCDWebServer.m | 8 +++++--- Mac/main.m | 2 +- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/CGDWebServer/GCDWebServer.h b/CGDWebServer/GCDWebServer.h index 479e397..40a96df 100644 --- a/CGDWebServer/GCDWebServer.h +++ b/CGDWebServer/GCDWebServer.h @@ -54,7 +54,7 @@ typedef GCDWebServerResponse* (^GCDWebServerProcessBlock)(GCDWebServerRequest* r @interface GCDWebServer (Handlers) - (void)addDefaultHandlerForMethod:(NSString*)method requestClass:(Class)aClass processBlock:(GCDWebServerProcessBlock)block; -- (void)addHandlerForBasePath:(NSString*)basePath localPath:(NSString*)localPath indexFilename:(NSString*)indexFilename cacheAge:(NSUInteger)age; // Base path is recursive and case-sensitive +- (void)addHandlerForBasePath:(NSString*)basePath localPath:(NSString*)localPath indexFilename:(NSString*)indexFilename cacheAge:(NSUInteger)cacheAge allowRangeRequests:(BOOL)allowRangeRequests; // Base path is recursive and case-sensitive - (void)addHandlerForMethod:(NSString*)method path:(NSString*)path requestClass:(Class)aClass processBlock:(GCDWebServerProcessBlock)block; // Path is case-insensitive - (void)addHandlerForMethod:(NSString*)method pathRegex:(NSString*)regex requestClass:(Class)aClass processBlock:(GCDWebServerProcessBlock)block; // Regular expression is case-insensitive @end diff --git a/CGDWebServer/GCDWebServer.m b/CGDWebServer/GCDWebServer.m index c01954b..e5a6dce 100644 --- a/CGDWebServer/GCDWebServer.m +++ b/CGDWebServer/GCDWebServer.m @@ -395,7 +395,7 @@ static void _NetServiceClientCallBack(CFNetServiceRef service, CFStreamError* er return [GCDWebServerDataResponse responseWithHTML:html]; } -- (void)addHandlerForBasePath:(NSString*)basePath localPath:(NSString*)localPath indexFilename:(NSString*)indexFilename cacheAge:(NSUInteger)age { +- (void)addHandlerForBasePath:(NSString*)basePath localPath:(NSString*)localPath indexFilename:(NSString*)indexFilename cacheAge:(NSUInteger)cacheAge allowRangeRequests:(BOOL)allowRangeRequests { if ([basePath hasPrefix:@"/"] && [basePath hasSuffix:@"/"]) { #if __has_feature(objc_arc) __unsafe_unretained GCDWebServer* server = self; @@ -426,7 +426,7 @@ static void _NetServiceClientCallBack(CFNetServiceRef service, CFStreamError* er } } response = [server _responseWithContentsOfDirectory:filePath]; - } else { + } else if (allowRangeRequests) { NSRange range = request.byteRange; if ((range.location != NSNotFound) || (range.length > 0)) { response = [server _responseWithPartialContentsOfFile:filePath byteRange:range]; @@ -434,10 +434,12 @@ static void _NetServiceClientCallBack(CFNetServiceRef service, CFStreamError* er response = [server _responseWithContentsOfFile:filePath]; } [response setValue:@"bytes" forAdditionalHeader:@"Accept-Ranges"]; + } else { + response = [server _responseWithContentsOfFile:filePath]; } } if (response) { - response.cacheControlMaxAge = age; + response.cacheControlMaxAge = cacheAge; } else { response = [GCDWebServerResponse responseWithStatusCode:404]; } diff --git a/Mac/main.m b/Mac/main.m index ec2952d..5b9358e 100644 --- a/Mac/main.m +++ b/Mac/main.m @@ -34,7 +34,7 @@ int main(int argc, const char* argv[]) { switch (0) { case 0: { - [webServer addHandlerForBasePath:@"/" localPath:NSHomeDirectory() indexFilename:nil cacheAge:0]; + [webServer addHandlerForBasePath:@"/" localPath:NSHomeDirectory() indexFilename:nil cacheAge:0 allowRangeRequests:YES]; break; }