Created
July 16, 2010 22:17
-
-
Save pifantastic/479000 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
=== modified file 'evented-daemon.php' (properties changed: -x to +x) | |
--- evented-daemon.php 2010-07-13 08:01:54 +0000 | |
+++ evented-daemon.php 2010-07-16 19:41:54 +0000 | |
@@ -18,13 +18,20 @@ | |
} | |
/** | |
+ * Generate an HTTP error | |
+ */ | |
+function daemon_error($evhttp_request, $code, $message) { | |
+ evhttp_response_add_header($evhttp_request, 'Content-Type', 'text/html; charset=utf-8'); | |
+ return evhttp_response_set($message . '.', $code, $message); | |
+} | |
+ | |
+/** | |
* Handle an individual request. | |
*/ | |
function daemon_request_callback($evhttp_request) { | |
// Begin per-request handling. | |
- evhttp_response_add_header($evhttp_request, 'Content-Type', 'text/html; charset=utf-8'); | |
- $uri = evhttp_request_uri($evhttp_request); | |
- $_GET['q'] = parse_url($uri, PHP_URL_PATH); | |
+ $uri = evhttp_request_uri($evhttp_request); | |
+ $_GET['q'] = parse_url($uri, PHP_URL_PATH); | |
$_SERVER['REQUEST_METHOD'] = 'GET'; | |
drupal_session_initialize(); | |
bootstrap_invoke_all('boot'); | |
@@ -33,8 +40,11 @@ | |
drupal_init_path(); | |
module_invoke_all('init'); | |
+ $static_file_types = array('js' => 'application/x-javascript', 'css' => 'text/css', 'png' => 'image/png', | |
+ 'jpg' => 'image/jpeg', 'jpeg' => 'image/jpeg', 'gif' => 'image/gif', 'bmp' => 'image/bmp', | |
+ 'ico' => 'image/x-icon'); | |
+ | |
echo '[Pressflow] Per-request bootstrap complete' . "\n"; | |
- | |
echo '[Pressflow] Using path: ' . $_GET['q'] . "\n"; | |
// Execute the appropriate menu handler. | |
@@ -44,18 +54,25 @@ | |
if (is_int($return)) { | |
switch ($return) { | |
case MENU_NOT_FOUND: | |
- echo '[Pressflow] Response: Not found' . PHP_EOL; | |
- return evhttp_response_set('Not found.', 404, 'Not found'); | |
+ // Hack to handle static files | |
+ $ext = pathinfo($_GET['q'], PATHINFO_EXTENSION); | |
+ if (isset($static_file_types[$ext]) && file_exists($_GET['q']) && strpos(realpath($_GET['q']), getcwd()) === 0) { | |
+ evhttp_response_add_header($evhttp_request, 'Content-Type', $static_file_types[$ext]); | |
+ return evhttp_response_set(file_get_contents($_GET['q']), 200, 'OK'); | |
+ } | |
+ echo '[Pressflow] Response: Not found' . PHP_EOL; | |
+ return daemon_error($evhttp_request, 404, 'Not found'); | |
case MENU_ACCESS_DENIED: | |
- echo '[Pressflow] Response: Access denied' . PHP_EOL; | |
- return evhttp_response_set('Access denied.', 403, 'Access denied'); | |
+ echo '[Pressflow] Response: Access denied' . PHP_EOL; | |
+ return daemon_error($evhttp_request, 403, 'Access denied'); | |
case MENU_SITE_OFFLINE: | |
- echo '[Pressflow] Response: Site offline' . PHP_EOL; | |
- return evhttp_response_set('Service unavailable.', 503, 'Service unavailable'); | |
+ echo '[Pressflow] Response: Site offline' . PHP_EOL; | |
+ return daemon_error($evhttp_request, 503, 'Service unavailable'); | |
} | |
} | |
elseif (isset($return)) { | |
// Print any value (including an empty string) except NULL or undefined: | |
+ evhttp_response_add_header($evhttp_request, 'Content-Type', 'text/html; charset=utf-8'); | |
$res = theme('page', $return); | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment