| OLD | NEW |
| 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 part of http_server; | 5 part of http_server; |
| 6 | 6 |
| 7 | 7 |
| 8 // Used for signal a directory redirecting, where a tailing slash is missing. | 8 // Used for signal a directory redirecting, where a tailing slash is missing. |
| 9 class _DirectoryRedirect { | 9 class _DirectoryRedirect { |
| 10 const _DirectoryRedirect(); | 10 const _DirectoryRedirect(); |
| (...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 164 * This is usefull when e.g. overriding [directoryHandler] to redirect to | 164 * This is usefull when e.g. overriding [directoryHandler] to redirect to |
| 165 * some index file. | 165 * some index file. |
| 166 * | 166 * |
| 167 * In the request contains the [HttpStatus.IF_MODIFIED_SINCE] header, | 167 * In the request contains the [HttpStatus.IF_MODIFIED_SINCE] header, |
| 168 * [serveFile] will send a [HttpStatus.NOT_MODIFIED] response if the file | 168 * [serveFile] will send a [HttpStatus.NOT_MODIFIED] response if the file |
| 169 * was not changed. | 169 * was not changed. |
| 170 * | 170 * |
| 171 * Note that if it was unabled to read from [file], the [request]s response | 171 * Note that if it was unabled to read from [file], the [request]s response |
| 172 * is closed with error-code [HttpStatus.NOT_FOUND]. | 172 * is closed with error-code [HttpStatus.NOT_FOUND]. |
| 173 */ | 173 */ |
| 174 void serveFile(File file, HttpRequest request) { | 174 Future serveFile(File file, HttpRequest request) { |
| 175 var response = request.response; | 175 var response = request.response; |
| 176 // TODO(ajohnsen): Set up Zone support for these errors. | 176 // TODO(ajohnsen): Set up Zone support for these errors. |
| 177 file.lastModified().then((lastModified) { | 177 file.lastModified().then((lastModified) { |
| 178 if (request.headers.ifModifiedSince != null && | 178 if (request.headers.ifModifiedSince != null && |
| 179 !lastModified.isAfter(request.headers.ifModifiedSince)) { | 179 !lastModified.isAfter(request.headers.ifModifiedSince)) { |
| 180 response.statusCode = HttpStatus.NOT_MODIFIED; | 180 response.statusCode = HttpStatus.NOT_MODIFIED; |
| 181 response.close(); | 181 response.close(); |
| 182 return null; | 182 return null; |
| 183 } | 183 } |
| 184 | 184 |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 231 file.openRead() | 231 file.openRead() |
| 232 .pipe(new _VirtualDirectoryFileStream(response, file.path)) | 232 .pipe(new _VirtualDirectoryFileStream(response, file.path)) |
| 233 .catchError((_) { | 233 .catchError((_) { |
| 234 // TODO(kevmoo): log errors | 234 // TODO(kevmoo): log errors |
| 235 }); | 235 }); |
| 236 }); | 236 }); |
| 237 }).catchError((_) { | 237 }).catchError((_) { |
| 238 response.statusCode = HttpStatus.NOT_FOUND; | 238 response.statusCode = HttpStatus.NOT_FOUND; |
| 239 response.close(); | 239 response.close(); |
| 240 }); | 240 }); |
| 241 |
| 242 return response.done; |
| 241 } | 243 } |
| 242 | 244 |
| 243 void _serveDirectory(Directory dir, HttpRequest request) { | 245 void _serveDirectory(Directory dir, HttpRequest request) { |
| 244 if (_dirCallback != null) { | 246 if (_dirCallback != null) { |
| 245 _dirCallback(dir, request); | 247 _dirCallback(dir, request); |
| 246 return; | 248 return; |
| 247 } | 249 } |
| 248 var response = request.response; | 250 var response = request.response; |
| 249 dir.stat().then((stats) { | 251 dir.stat().then((stats) { |
| 250 if (request.headers.ifModifiedSince != null && | 252 if (request.headers.ifModifiedSince != null && |
| (...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 401 | 403 |
| 402 Future close() => new Future.value(); | 404 Future close() => new Future.value(); |
| 403 | 405 |
| 404 void setMimeType(List<int> bytes) { | 406 void setMimeType(List<int> bytes) { |
| 405 var mimeType = lookupMimeType(path, headerBytes: bytes); | 407 var mimeType = lookupMimeType(path, headerBytes: bytes); |
| 406 if (mimeType != null) { | 408 if (mimeType != null) { |
| 407 response.headers.contentType = ContentType.parse(mimeType); | 409 response.headers.contentType = ContentType.parse(mimeType); |
| 408 } | 410 } |
| 409 } | 411 } |
| 410 } | 412 } |
| OLD | NEW |