diff --git a/CGDWebServer/GCDWebServerFileResponse.m b/CGDWebServer/GCDWebServerFileResponse.m index 60e1bf6..e93de27 100644 --- a/CGDWebServer/GCDWebServerFileResponse.m +++ b/CGDWebServer/GCDWebServerFileResponse.m @@ -81,7 +81,7 @@ static inline NSError* _MakePosixError(int code) { ARC_RELEASE(self); return nil; } - if ((range.location != NSNotFound) || (range.length > 0)) { + if (GCDWebServerIsValidByteRange(range)) { if (range.location != NSNotFound) { range.location = MIN(range.location, (NSUInteger)info.st_size); range.length = MIN(range.length, (NSUInteger)info.st_size - range.location); diff --git a/CGDWebServer/GCDWebServerPrivate.h b/CGDWebServer/GCDWebServerPrivate.h index 736828e..1915aa5 100644 --- a/CGDWebServer/GCDWebServerPrivate.h +++ b/CGDWebServer/GCDWebServerPrivate.h @@ -103,6 +103,10 @@ extern void GCDLogMessage(long level, NSString* format, ...) NS_FORMAT_FUNCTION( #define kGCDWebServerGCDQueue dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0) #define kGCDWebServerErrorDomain @"GCDWebServerErrorDomain" +static inline BOOL GCDWebServerIsValidByteRange(NSRange range) { + return ((range.location != NSNotFound) || (range.length > 0)); +} + extern NSString* GCDWebServerExtractHeaderParameter(NSString* header, NSString* attribute); extern NSStringEncoding GCDWebServerStringEncodingFromCharset(NSString* charset); diff --git a/CGDWebServer/GCDWebServerRequest.h b/CGDWebServer/GCDWebServerRequest.h index 7c6d818..49684b8 100644 --- a/CGDWebServer/GCDWebServerRequest.h +++ b/CGDWebServer/GCDWebServerRequest.h @@ -44,4 +44,5 @@ @property(nonatomic, readonly) NSRange byteRange; // Automatically parsed from headers ([NSNotFound, 0] if request has no "Range" header, [offset, length] for byte range from beginning or [NSNotFound, -bytes] from end) - (id)initWithMethod:(NSString*)method url:(NSURL*)url headers:(NSDictionary*)headers path:(NSString*)path query:(NSDictionary*)query; - (BOOL)hasBody; // Convenience method +- (BOOL)hasByteRange; // Convenience method that checks "byteRange" @end diff --git a/CGDWebServer/GCDWebServerRequest.m b/CGDWebServer/GCDWebServerRequest.m index 449fa34..b3b42ef 100644 --- a/CGDWebServer/GCDWebServerRequest.m +++ b/CGDWebServer/GCDWebServerRequest.m @@ -237,6 +237,10 @@ return _type ? YES : NO; } +- (BOOL)hasByteRange { + return GCDWebServerIsValidByteRange(_range); +} + - (BOOL)open:(NSError**)error { return YES; }