@@ -73,7 +73,55 @@ - (dispatch_queue_t)methodQueue
7373 return ;
7474 }
7575
76- [_webServer addGETHandlerForBasePath: @" /" directoryPath: self .www_root indexFilename: @" index.html" cacheAge: 3600 allowRangeRequests: YES ];
76+ // [_webServer addGETHandlerForBasePath:@"/" directoryPath:self.www_root indexFilename:@"index.html" cacheAge:3600 allowRangeRequests:YES];
77+ NSString *basePath = @" /" ;
78+ NSString *directoryPath = self.www_root ;
79+ NSString *indexFilename = @" index.html" ;
80+ NSUInteger cacheAge = 3600 ;
81+ BOOL allowRangeRequests = YES ;
82+ [_webServer addHandlerWithMatchBlock: ^GCDWebServerRequest*(NSString * requestMethod, NSURL * requestURL, NSDictionary <NSString *, NSString *>* requestHeaders, NSString * urlPath, NSDictionary <NSString *, NSString *>* urlQuery) {
83+ if (![requestMethod isEqualToString: @" GET" ]) {
84+ return nil ;
85+ }
86+ if (![urlPath hasPrefix: basePath]) {
87+ return nil ;
88+ }
89+ return [[GCDWebServerRequest alloc ] initWithMethod: requestMethod url: requestURL headers: requestHeaders path: urlPath query: urlQuery];
90+ }
91+ processBlock: ^GCDWebServerResponse*(GCDWebServerRequest* request) {
92+ GCDWebServerResponse* response = nil ;
93+ NSString * filePath = [directoryPath stringByAppendingPathComponent: GCDWebServerNormalizePath ([request.path substringFromIndex: basePath.length])];
94+ NSString * fileType = [[[NSFileManager defaultManager ] attributesOfItemAtPath: filePath error: NULL ] fileType ];
95+ if (fileType) {
96+ if ([fileType isEqualToString: NSFileTypeDirectory ]) {
97+ if (indexFilename) {
98+ NSString * indexPath = [filePath stringByAppendingPathComponent: indexFilename];
99+ NSString * indexType = [[[NSFileManager defaultManager ] attributesOfItemAtPath: indexPath error: NULL ] fileType ];
100+ if ([indexType isEqualToString: NSFileTypeRegular ]) {
101+ response = [GCDWebServerFileResponse responseWithFile: indexPath];
102+ }
103+ } else {
104+ response = [GCDWebServerResponse responseWithStatusCode: kGCDWebServerHTTPStatusCode_NotFound ];
105+ }
106+ } else if ([fileType isEqualToString: NSFileTypeRegular ]) {
107+ if (allowRangeRequests) {
108+ response = [GCDWebServerFileResponse responseWithFile: filePath byteRange: request.byteRange];
109+ [response setValue: @" bytes" forAdditionalHeader: @" Accept-Ranges" ];
110+ } else {
111+ response = [GCDWebServerFileResponse responseWithFile: filePath];
112+ }
113+ }
114+ }
115+ if (response) {
116+ response.cacheControlMaxAge = cacheAge;
117+ [response setValue: @" GET" forAdditionalHeader: @" Access-Control-Request-Method" ];
118+ [response setValue: @" OriginX-Requested-With, Content-Type, Accept, Cache-Control, Range,Access-Control-Allow-Origin" forAdditionalHeader: @" Access-Control-Request-Headers" ];
119+ [response setValue: @" *" forAdditionalHeader: @" Access-Control-Allow-Origin" ];
120+ } else {
121+ response = [GCDWebServerResponse responseWithStatusCode: kGCDWebServerHTTPStatusCode_NotFound ];
122+ }
123+ return response;
124+ }];
77125
78126 NSError *error;
79127 NSMutableDictionary * options = [NSMutableDictionary dictionary ];
0 commit comments