@@ -73,7 +73,55 @@ - (dispatch_queue_t)methodQueue
73
73
return ;
74
74
}
75
75
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
+ }];
77
125
78
126
NSError *error;
79
127
NSMutableDictionary * options = [NSMutableDictionary dictionary ];
0 commit comments