6
+ − 1
#!/usr/bin/env php
0
c63de9eb7045
First commit. Basic things are working and implemented (webserver, templating, DCOP interface)
Dan
parents:
diff
changeset
+ − 2
<?php
c63de9eb7045
First commit. Basic things are working and implemented (webserver, templating, DCOP interface)
Dan
parents:
diff
changeset
+ − 3
c63de9eb7045
First commit. Basic things are working and implemented (webserver, templating, DCOP interface)
Dan
parents:
diff
changeset
+ − 4
/**
6
+ − 5
* Greyhound - real web management for Amarok
5
9b96265b5918
Relicensed to GPLv2. Previous revisions should not be downloaded as they do not contain copies of appropriate licenses, which will be added in a later commit. Completed interface for mobile devices.
Dan
diff
changeset
+ − 6
* Copyright (C) 2008 Dan Fuhry
0
c63de9eb7045
First commit. Basic things are working and implemented (webserver, templating, DCOP interface)
Dan
parents:
diff
changeset
+ − 7
*
5
9b96265b5918
Relicensed to GPLv2. Previous revisions should not be downloaded as they do not contain copies of appropriate licenses, which will be added in a later commit. Completed interface for mobile devices.
Dan
diff
changeset
+ − 8
* This program is Free Software; you can redistribute and/or modify it under the terms of the GNU General Public License
9b96265b5918
Relicensed to GPLv2. Previous revisions should not be downloaded as they do not contain copies of appropriate licenses, which will be added in a later commit. Completed interface for mobile devices.
Dan
diff
changeset
+ − 9
* as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
9b96265b5918
Relicensed to GPLv2. Previous revisions should not be downloaded as they do not contain copies of appropriate licenses, which will be added in a later commit. Completed interface for mobile devices.
Dan
diff
changeset
+ − 10
*
9b96265b5918
Relicensed to GPLv2. Previous revisions should not be downloaded as they do not contain copies of appropriate licenses, which will be added in a later commit. Completed interface for mobile devices.
Dan
diff
changeset
+ − 11
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
9b96265b5918
Relicensed to GPLv2. Previous revisions should not be downloaded as they do not contain copies of appropriate licenses, which will be added in a later commit. Completed interface for mobile devices.
Dan
diff
changeset
+ − 12
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for details.
0
c63de9eb7045
First commit. Basic things are working and implemented (webserver, templating, DCOP interface)
Dan
parents:
diff
changeset
+ − 13
*/
c63de9eb7045
First commit. Basic things are working and implemented (webserver, templating, DCOP interface)
Dan
parents:
diff
changeset
+ − 14
12
b3fcc21e557f
Backend improvement to webserver that causes interrupts to work properly; made pcntl_signal only be called if it's supported
Dan
diff
changeset
+ − 15
// Try to trap termination signals to cleanly close the socket when needed
b3fcc21e557f
Backend improvement to webserver that causes interrupts to work properly; made pcntl_signal only be called if it's supported
Dan
diff
changeset
+ − 16
// AmaroK sends a SIGTERM when it is shut down or the user requests to stop
b3fcc21e557f
Backend improvement to webserver that causes interrupts to work properly; made pcntl_signal only be called if it's supported
Dan
diff
changeset
+ − 17
// the script
b3fcc21e557f
Backend improvement to webserver that causes interrupts to work properly; made pcntl_signal only be called if it's supported
Dan
diff
changeset
+ − 18
if ( function_exists('pcntl_signal') )
b3fcc21e557f
Backend improvement to webserver that causes interrupts to work properly; made pcntl_signal only be called if it's supported
Dan
diff
changeset
+ − 19
{
b3fcc21e557f
Backend improvement to webserver that causes interrupts to work properly; made pcntl_signal only be called if it's supported
Dan
diff
changeset
+ − 20
// required for signal handling to work
b3fcc21e557f
Backend improvement to webserver that causes interrupts to work properly; made pcntl_signal only be called if it's supported
Dan
diff
changeset
+ − 21
declare(ticks=1);
b3fcc21e557f
Backend improvement to webserver that causes interrupts to work properly; made pcntl_signal only be called if it's supported
Dan
diff
changeset
+ − 22
b3fcc21e557f
Backend improvement to webserver that causes interrupts to work properly; made pcntl_signal only be called if it's supported
Dan
diff
changeset
+ − 23
// trap SIGTERM
b3fcc21e557f
Backend improvement to webserver that causes interrupts to work properly; made pcntl_signal only be called if it's supported
Dan
diff
changeset
+ − 24
pcntl_signal(SIGTERM, 'sigterm');
b3fcc21e557f
Backend improvement to webserver that causes interrupts to work properly; made pcntl_signal only be called if it's supported
Dan
diff
changeset
+ − 25
pcntl_signal(SIGINT, 'sigterm');
32
86140ed9087d
Experimental: upon change to playlist, send SIGUSR1 to parent process and branch out to all children to force a playlist refresh
Dan
diff
changeset
+ − 26
pcntl_signal(SIGUSR1, 'handle_refresh_signal');
12
b3fcc21e557f
Backend improvement to webserver that causes interrupts to work properly; made pcntl_signal only be called if it's supported
Dan
diff
changeset
+ − 27
}
8
a8d108f37363
Modified to trap signals properly and not write to the root directory (only working directory)
Dan
diff
changeset
+ − 28
15
2adca0f363fd
Added multi-threading/forking/keep-alive support to webserver. w00t, feeling all POSIX-happy today!
Dan
diff
changeset
+ − 29
//
2adca0f363fd
Added multi-threading/forking/keep-alive support to webserver. w00t, feeling all POSIX-happy today!
Dan
diff
changeset
+ − 30
// CONFIGURATION
2adca0f363fd
Added multi-threading/forking/keep-alive support to webserver. w00t, feeling all POSIX-happy today!
Dan
diff
changeset
+ − 31
//
2adca0f363fd
Added multi-threading/forking/keep-alive support to webserver. w00t, feeling all POSIX-happy today!
Dan
diff
changeset
+ − 32
2adca0f363fd
Added multi-threading/forking/keep-alive support to webserver. w00t, feeling all POSIX-happy today!
Dan
diff
changeset
+ − 33
// Listen on all interfaces. If this is false, it will only listen on
2adca0f363fd
Added multi-threading/forking/keep-alive support to webserver. w00t, feeling all POSIX-happy today!
Dan
diff
changeset
+ − 34
// 127.0.0.1 (the loopback interface)
0
c63de9eb7045
First commit. Basic things are working and implemented (webserver, templating, DCOP interface)
Dan
parents:
diff
changeset
+ − 35
$public = true;
15
2adca0f363fd
Added multi-threading/forking/keep-alive support to webserver. w00t, feeling all POSIX-happy today!
Dan
diff
changeset
+ − 36
// Allow control of playback. By default this is turned on but if you
2adca0f363fd
Added multi-threading/forking/keep-alive support to webserver. w00t, feeling all POSIX-happy today!
Dan
diff
changeset
+ − 37
// set this to false, it will only display the playlist.
4
+ − 38
$allowcontrol = true;
15
2adca0f363fd
Added multi-threading/forking/keep-alive support to webserver. w00t, feeling all POSIX-happy today!
Dan
diff
changeset
+ − 39
// The default theme. This should be a name of a directory in ./themes.
29
+ − 40
$theme = 'grey';
15
2adca0f363fd
Added multi-threading/forking/keep-alive support to webserver. w00t, feeling all POSIX-happy today!
Dan
diff
changeset
+ − 41
// Allow forking when an HTTP request is received. This has advantages
2adca0f363fd
Added multi-threading/forking/keep-alive support to webserver. w00t, feeling all POSIX-happy today!
Dan
diff
changeset
+ − 42
// and disadvantages. If this experimental option is enabled, it will
2adca0f363fd
Added multi-threading/forking/keep-alive support to webserver. w00t, feeling all POSIX-happy today!
Dan
diff
changeset
+ − 43
// result in faster responses and load times but more memory usage.
25
+ − 44
$allow_fork = true;
21
74edc873234f
Made the webserver a bit smarter. It handles running as root properly (only allows it if user/group specified and port < 1024) and directory listing is massively smarter.
Dan
diff
changeset
+ − 45
// set to true to enable authentication
74edc873234f
Made the webserver a bit smarter. It handles running as root properly (only allows it if user/group specified and port < 1024) and directory listing is massively smarter.
Dan
diff
changeset
+ − 46
// WARNING: THIS HAS SOME SERIOUS SECURITY PROBLEMS RIGHT NOW. I don't
74edc873234f
Made the webserver a bit smarter. It handles running as root properly (only allows it if user/group specified and port < 1024) and directory listing is massively smarter.
Dan
diff
changeset
+ − 47
// know what's causing it to not prompt for authentication from any
74edc873234f
Made the webserver a bit smarter. It handles running as root properly (only allows it if user/group specified and port < 1024) and directory listing is massively smarter.
Dan
diff
changeset
+ − 48
// client after the first successful auth.
74edc873234f
Made the webserver a bit smarter. It handles running as root properly (only allows it if user/group specified and port < 1024) and directory listing is massively smarter.
Dan
diff
changeset
+ − 49
$use_auth = false;
74edc873234f
Made the webserver a bit smarter. It handles running as root properly (only allows it if user/group specified and port < 1024) and directory listing is massively smarter.
Dan
diff
changeset
+ − 50
// valid users and passwords
74edc873234f
Made the webserver a bit smarter. It handles running as root properly (only allows it if user/group specified and port < 1024) and directory listing is massively smarter.
Dan
diff
changeset
+ − 51
$auth_data = array(
74edc873234f
Made the webserver a bit smarter. It handles running as root properly (only allows it if user/group specified and port < 1024) and directory listing is massively smarter.
Dan
diff
changeset
+ − 52
'funky' => 'monkey',
74edc873234f
Made the webserver a bit smarter. It handles running as root properly (only allows it if user/group specified and port < 1024) and directory listing is massively smarter.
Dan
diff
changeset
+ − 53
'fast' => 'forward'
74edc873234f
Made the webserver a bit smarter. It handles running as root properly (only allows it if user/group specified and port < 1024) and directory listing is massively smarter.
Dan
diff
changeset
+ − 54
);
0
c63de9eb7045
First commit. Basic things are working and implemented (webserver, templating, DCOP interface)
Dan
parents:
diff
changeset
+ − 55
c63de9eb7045
First commit. Basic things are working and implemented (webserver, templating, DCOP interface)
Dan
parents:
diff
changeset
+ − 56
@ini_set('display_errors', 'on');
c63de9eb7045
First commit. Basic things are working and implemented (webserver, templating, DCOP interface)
Dan
parents:
diff
changeset
+ − 57
c63de9eb7045
First commit. Basic things are working and implemented (webserver, templating, DCOP interface)
Dan
parents:
diff
changeset
+ − 58
// include files
c63de9eb7045
First commit. Basic things are working and implemented (webserver, templating, DCOP interface)
Dan
parents:
diff
changeset
+ − 59
require('functions.php');
c63de9eb7045
First commit. Basic things are working and implemented (webserver, templating, DCOP interface)
Dan
parents:
diff
changeset
+ − 60
8
a8d108f37363
Modified to trap signals properly and not write to the root directory (only working directory)
Dan
diff
changeset
+ − 61
// get the root
a8d108f37363
Modified to trap signals properly and not write to the root directory (only working directory)
Dan
diff
changeset
+ − 62
define('GREY_ROOT', dirname(__FILE__));
a8d108f37363
Modified to trap signals properly and not write to the root directory (only working directory)
Dan
diff
changeset
+ − 63
a8d108f37363
Modified to trap signals properly and not write to the root directory (only working directory)
Dan
diff
changeset
+ − 64
// create directories
a8d108f37363
Modified to trap signals properly and not write to the root directory (only working directory)
Dan
diff
changeset
+ − 65
@mkdir('./compiled');
a8d108f37363
Modified to trap signals properly and not write to the root directory (only working directory)
Dan
diff
changeset
+ − 66
34
+ − 67
// what kind of terminal do we have?
+ − 68
$use_colors = ( @in_array(@$_SERVER['TERM'], array('linux', 'xterm', 'vt100')) ) ? true : false;
+ − 69
0
c63de9eb7045
First commit. Basic things are working and implemented (webserver, templating, DCOP interface)
Dan
parents:
diff
changeset
+ − 70
// start up...
c63de9eb7045
First commit. Basic things are working and implemented (webserver, templating, DCOP interface)
Dan
parents:
diff
changeset
+ − 71
33
3b4aef1efff6
Removed requirement for detecting home directory; artwork fetcher relies on return from saveCurrentPlaylist now
Dan
diff
changeset
+ − 72
status('Starting Greyhound Web Control v0.1a3');
0
c63de9eb7045
First commit. Basic things are working and implemented (webserver, templating, DCOP interface)
Dan
parents:
diff
changeset
+ − 73
status('loading files');
c63de9eb7045
First commit. Basic things are working and implemented (webserver, templating, DCOP interface)
Dan
parents:
diff
changeset
+ − 74
c63de9eb7045
First commit. Basic things are working and implemented (webserver, templating, DCOP interface)
Dan
parents:
diff
changeset
+ − 75
require('webserver.php');
8
a8d108f37363
Modified to trap signals properly and not write to the root directory (only working directory)
Dan
diff
changeset
+ − 76
define('SMARTY_DIR', GREY_ROOT . '/smarty/');
a8d108f37363
Modified to trap signals properly and not write to the root directory (only working directory)
Dan
diff
changeset
+ − 77
require(GREY_ROOT . '/smarty/Smarty.class.php');
a8d108f37363
Modified to trap signals properly and not write to the root directory (only working directory)
Dan
diff
changeset
+ − 78
require(GREY_ROOT . '/playlist.php');
a8d108f37363
Modified to trap signals properly and not write to the root directory (only working directory)
Dan
diff
changeset
+ − 79
require(GREY_ROOT . '/json.php');
a8d108f37363
Modified to trap signals properly and not write to the root directory (only working directory)
Dan
diff
changeset
+ − 80
require(GREY_ROOT . '/ajax.php');
25
+ − 81
require(GREY_ROOT . '/imagetools.php');
0
c63de9eb7045
First commit. Basic things are working and implemented (webserver, templating, DCOP interface)
Dan
parents:
diff
changeset
+ − 82
8
a8d108f37363
Modified to trap signals properly and not write to the root directory (only working directory)
Dan
diff
changeset
+ − 83
// signal handler
a8d108f37363
Modified to trap signals properly and not write to the root directory (only working directory)
Dan
diff
changeset
+ − 84
function sigterm($signal)
a8d108f37363
Modified to trap signals properly and not write to the root directory (only working directory)
Dan
diff
changeset
+ − 85
{
a8d108f37363
Modified to trap signals properly and not write to the root directory (only working directory)
Dan
diff
changeset
+ − 86
global $httpd;
36
+ − 87
if ( !defined('HTTPD_WS_CHILD') )
+ − 88
status("Caught SIGTERM, cleaning up.");
+ − 89
16
+ − 90
exit(0);
8
a8d108f37363
Modified to trap signals properly and not write to the root directory (only working directory)
Dan
diff
changeset
+ − 91
}
a8d108f37363
Modified to trap signals properly and not write to the root directory (only working directory)
Dan
diff
changeset
+ − 92
31
+ − 93
status('doing PHP capabilities check');
+ − 94
if ( !function_exists('pcntl_signal') )
+ − 95
{
+ − 96
warning('System does not support POSIX functions. Termination signals will result in unclean shutdown.');
+ − 97
}
+ − 98
+ − 99
if ( !function_exists('simplexml_load_file') )
+ − 100
{
+ − 101
warning('Can\'t find support for SimpleXML, which is needed to parse the Amarok playlist file.');
+ − 102
burnout('SimpleXML required to continue. You may have an outdated version of PHP; most versions of PHP 5 have SimpleXML built-in. Check your distribution\'s documentation to find out how to enable PHP\'s SimpleXML support.');
+ − 103
}
+ − 104
0
c63de9eb7045
First commit. Basic things are working and implemented (webserver, templating, DCOP interface)
Dan
parents:
diff
changeset
+ − 105
status('initializing playlist');
c63de9eb7045
First commit. Basic things are working and implemented (webserver, templating, DCOP interface)
Dan
parents:
diff
changeset
+ − 106
c63de9eb7045
First commit. Basic things are working and implemented (webserver, templating, DCOP interface)
Dan
parents:
diff
changeset
+ − 107
// init playlist object
c63de9eb7045
First commit. Basic things are working and implemented (webserver, templating, DCOP interface)
Dan
parents:
diff
changeset
+ − 108
$playlist = array();
33
3b4aef1efff6
Removed requirement for detecting home directory; artwork fetcher relies on return from saveCurrentPlaylist now
Dan
diff
changeset
+ − 109
$amarok_home = false;
0
c63de9eb7045
First commit. Basic things are working and implemented (webserver, templating, DCOP interface)
Dan
parents:
diff
changeset
+ − 110
rebuild_playlist();
c63de9eb7045
First commit. Basic things are working and implemented (webserver, templating, DCOP interface)
Dan
parents:
diff
changeset
+ − 111
c63de9eb7045
First commit. Basic things are working and implemented (webserver, templating, DCOP interface)
Dan
parents:
diff
changeset
+ − 112
// startup webserver
c63de9eb7045
First commit. Basic things are working and implemented (webserver, templating, DCOP interface)
Dan
parents:
diff
changeset
+ − 113
$ip = ( $public ) ? '0.0.0.0' : '127.0.0.1';
3
e7447a6044ec
$allowcontrol = false working and turned on now; switched default port back to 7447 instead of random; added favicon and apple-touch-icon
Dan
diff
changeset
+ − 114
$port = 7447;
0
c63de9eb7045
First commit. Basic things are working and implemented (webserver, templating, DCOP interface)
Dan
parents:
diff
changeset
+ − 115
c63de9eb7045
First commit. Basic things are working and implemented (webserver, templating, DCOP interface)
Dan
parents:
diff
changeset
+ − 116
try
c63de9eb7045
First commit. Basic things are working and implemented (webserver, templating, DCOP interface)
Dan
parents:
diff
changeset
+ − 117
{
c63de9eb7045
First commit. Basic things are working and implemented (webserver, templating, DCOP interface)
Dan
parents:
diff
changeset
+ − 118
status('starting PhpHttpd');
c63de9eb7045
First commit. Basic things are working and implemented (webserver, templating, DCOP interface)
Dan
parents:
diff
changeset
+ − 119
$httpd = new WebServer($ip, $port);
c63de9eb7045
First commit. Basic things are working and implemented (webserver, templating, DCOP interface)
Dan
parents:
diff
changeset
+ − 120
c63de9eb7045
First commit. Basic things are working and implemented (webserver, templating, DCOP interface)
Dan
parents:
diff
changeset
+ − 121
// setup handlers
c63de9eb7045
First commit. Basic things are working and implemented (webserver, templating, DCOP interface)
Dan
parents:
diff
changeset
+ − 122
status('initializing handlers');
8
a8d108f37363
Modified to trap signals properly and not write to the root directory (only working directory)
Dan
diff
changeset
+ − 123
$httpd->add_handler('index', 'function', 'amarok_playlist');
a8d108f37363
Modified to trap signals properly and not write to the root directory (only working directory)
Dan
diff
changeset
+ − 124
$httpd->add_handler('action.json', 'function', 'ajax_request_handler');
25
+ − 125
$httpd->add_handler('artwork', 'function', 'artwork_request_handler');
8
a8d108f37363
Modified to trap signals properly and not write to the root directory (only working directory)
Dan
diff
changeset
+ − 126
$httpd->add_handler('scripts', 'dir', GREY_ROOT . '/scripts');
a8d108f37363
Modified to trap signals properly and not write to the root directory (only working directory)
Dan
diff
changeset
+ − 127
$httpd->add_handler('favicon.ico', 'file', GREY_ROOT . '/amarok_icon.ico');
a8d108f37363
Modified to trap signals properly and not write to the root directory (only working directory)
Dan
diff
changeset
+ − 128
$httpd->add_handler('apple-touch-icon.png', 'file', GREY_ROOT . '/apple-touch-icon.png');
15
2adca0f363fd
Added multi-threading/forking/keep-alive support to webserver. w00t, feeling all POSIX-happy today!
Dan
diff
changeset
+ − 129
// load all themes if forking is enabled
2adca0f363fd
Added multi-threading/forking/keep-alive support to webserver. w00t, feeling all POSIX-happy today!
Dan
diff
changeset
+ − 130
// Themes are loaded when the playlist is requested. This is fine for
2adca0f363fd
Added multi-threading/forking/keep-alive support to webserver. w00t, feeling all POSIX-happy today!
Dan
diff
changeset
+ − 131
// single-threaded operation, but if the playlist handler is only loaded
2adca0f363fd
Added multi-threading/forking/keep-alive support to webserver. w00t, feeling all POSIX-happy today!
Dan
diff
changeset
+ − 132
// in a child process, we need to preload all themes into the parent before
2adca0f363fd
Added multi-threading/forking/keep-alive support to webserver. w00t, feeling all POSIX-happy today!
Dan
diff
changeset
+ − 133
// children can respond to theme resource requests.
2adca0f363fd
Added multi-threading/forking/keep-alive support to webserver. w00t, feeling all POSIX-happy today!
Dan
diff
changeset
+ − 134
if ( $allow_fork )
2adca0f363fd
Added multi-threading/forking/keep-alive support to webserver. w00t, feeling all POSIX-happy today!
Dan
diff
changeset
+ − 135
{
2adca0f363fd
Added multi-threading/forking/keep-alive support to webserver. w00t, feeling all POSIX-happy today!
Dan
diff
changeset
+ − 136
status('Preloading themes');
2adca0f363fd
Added multi-threading/forking/keep-alive support to webserver. w00t, feeling all POSIX-happy today!
Dan
diff
changeset
+ − 137
2adca0f363fd
Added multi-threading/forking/keep-alive support to webserver. w00t, feeling all POSIX-happy today!
Dan
diff
changeset
+ − 138
$dh = @opendir(GREY_ROOT . '/themes');
2adca0f363fd
Added multi-threading/forking/keep-alive support to webserver. w00t, feeling all POSIX-happy today!
Dan
diff
changeset
+ − 139
if ( !$dh )
2adca0f363fd
Added multi-threading/forking/keep-alive support to webserver. w00t, feeling all POSIX-happy today!
Dan
diff
changeset
+ − 140
burnout('Could not open themes directory');
2adca0f363fd
Added multi-threading/forking/keep-alive support to webserver. w00t, feeling all POSIX-happy today!
Dan
diff
changeset
+ − 141
while ( $dir = @readdir($dh) )
2adca0f363fd
Added multi-threading/forking/keep-alive support to webserver. w00t, feeling all POSIX-happy today!
Dan
diff
changeset
+ − 142
{
2adca0f363fd
Added multi-threading/forking/keep-alive support to webserver. w00t, feeling all POSIX-happy today!
Dan
diff
changeset
+ − 143
if ( $dir == '.' || $dir == '..' )
2adca0f363fd
Added multi-threading/forking/keep-alive support to webserver. w00t, feeling all POSIX-happy today!
Dan
diff
changeset
+ − 144
continue;
2adca0f363fd
Added multi-threading/forking/keep-alive support to webserver. w00t, feeling all POSIX-happy today!
Dan
diff
changeset
+ − 145
if ( is_dir( GREY_ROOT . "/themes/$dir" ) )
2adca0f363fd
Added multi-threading/forking/keep-alive support to webserver. w00t, feeling all POSIX-happy today!
Dan
diff
changeset
+ − 146
load_theme($dir);
2adca0f363fd
Added multi-threading/forking/keep-alive support to webserver. w00t, feeling all POSIX-happy today!
Dan
diff
changeset
+ − 147
}
2adca0f363fd
Added multi-threading/forking/keep-alive support to webserver. w00t, feeling all POSIX-happy today!
Dan
diff
changeset
+ − 148
}
0
c63de9eb7045
First commit. Basic things are working and implemented (webserver, templating, DCOP interface)
Dan
parents:
diff
changeset
+ − 149
$httpd->allow_dir_list = true;
17
+ − 150
$httpd->allow_fork = ( $allow_fork ) ? true : false;
0
c63de9eb7045
First commit. Basic things are working and implemented (webserver, templating, DCOP interface)
Dan
parents:
diff
changeset
+ − 151
$httpd->default_document = 'index';
c63de9eb7045
First commit. Basic things are working and implemented (webserver, templating, DCOP interface)
Dan
parents:
diff
changeset
+ − 152
c63de9eb7045
First commit. Basic things are working and implemented (webserver, templating, DCOP interface)
Dan
parents:
diff
changeset
+ − 153
status("Entering main server loop - ^C to interrupt, listening on port $port");
c63de9eb7045
First commit. Basic things are working and implemented (webserver, templating, DCOP interface)
Dan
parents:
diff
changeset
+ − 154
$httpd->serve();
c63de9eb7045
First commit. Basic things are working and implemented (webserver, templating, DCOP interface)
Dan
parents:
diff
changeset
+ − 155
}
c63de9eb7045
First commit. Basic things are working and implemented (webserver, templating, DCOP interface)
Dan
parents:
diff
changeset
+ − 156
catch( Exception $e )
c63de9eb7045
First commit. Basic things are working and implemented (webserver, templating, DCOP interface)
Dan
parents:
diff
changeset
+ − 157
{
34
+ − 158
if ( strstr(strval($e), "Could not bind") )
+ − 159
{
+ − 160
burnout("Could not bind to the port $ip:$port. Is Greyhound already running? Sometimes browsers don't close off their connections until Greyhound has been dead for about a minute, so try starting Greyhound again in roughly 60 seconds. If that doesn't work, type \"killall -9 php\" at a terminal and try starting Greyhound again in 60 seconds.");
+ − 161
}
0
c63de9eb7045
First commit. Basic things are working and implemented (webserver, templating, DCOP interface)
Dan
parents:
diff
changeset
+ − 162
burnout("Exception caught while running webserver:\n$e");
c63de9eb7045
First commit. Basic things are working and implemented (webserver, templating, DCOP interface)
Dan
parents:
diff
changeset
+ − 163
}
32
86140ed9087d
Experimental: upon change to playlist, send SIGUSR1 to parent process and branch out to all children to force a playlist refresh
Dan
diff
changeset
+ − 164
86140ed9087d
Experimental: upon change to playlist, send SIGUSR1 to parent process and branch out to all children to force a playlist refresh
Dan
diff
changeset
+ − 165
function handle_refresh_signal()
86140ed9087d
Experimental: upon change to playlist, send SIGUSR1 to parent process and branch out to all children to force a playlist refresh
Dan
diff
changeset
+ − 166
{
86140ed9087d
Experimental: upon change to playlist, send SIGUSR1 to parent process and branch out to all children to force a playlist refresh
Dan
diff
changeset
+ − 167
global $httpd;
86140ed9087d
Experimental: upon change to playlist, send SIGUSR1 to parent process and branch out to all children to force a playlist refresh
Dan
diff
changeset
+ − 168
if ( !is_object($httpd) )
86140ed9087d
Experimental: upon change to playlist, send SIGUSR1 to parent process and branch out to all children to force a playlist refresh
Dan
diff
changeset
+ − 169
// we're not serving yet.
86140ed9087d
Experimental: upon change to playlist, send SIGUSR1 to parent process and branch out to all children to force a playlist refresh
Dan
diff
changeset
+ − 170
return false;
86140ed9087d
Experimental: upon change to playlist, send SIGUSR1 to parent process and branch out to all children to force a playlist refresh
Dan
diff
changeset
+ − 171
86140ed9087d
Experimental: upon change to playlist, send SIGUSR1 to parent process and branch out to all children to force a playlist refresh
Dan
diff
changeset
+ − 172
// we've got an httpd instance; rebuild the playlist
86140ed9087d
Experimental: upon change to playlist, send SIGUSR1 to parent process and branch out to all children to force a playlist refresh
Dan
diff
changeset
+ − 173
rebuild_playlist();
86140ed9087d
Experimental: upon change to playlist, send SIGUSR1 to parent process and branch out to all children to force a playlist refresh
Dan
diff
changeset
+ − 174
86140ed9087d
Experimental: upon change to playlist, send SIGUSR1 to parent process and branch out to all children to force a playlist refresh
Dan
diff
changeset
+ − 175
// if this is the parent, also ask the children to rebuild.
86140ed9087d
Experimental: upon change to playlist, send SIGUSR1 to parent process and branch out to all children to force a playlist refresh
Dan
diff
changeset
+ − 176
if ( !defined('HTTPD_WS_CHILD') )
86140ed9087d
Experimental: upon change to playlist, send SIGUSR1 to parent process and branch out to all children to force a playlist refresh
Dan
diff
changeset
+ − 177
{
86140ed9087d
Experimental: upon change to playlist, send SIGUSR1 to parent process and branch out to all children to force a playlist refresh
Dan
diff
changeset
+ − 178
foreach ( $httpd->child_list as $pid )
86140ed9087d
Experimental: upon change to playlist, send SIGUSR1 to parent process and branch out to all children to force a playlist refresh
Dan
diff
changeset
+ − 179
{
86140ed9087d
Experimental: upon change to playlist, send SIGUSR1 to parent process and branch out to all children to force a playlist refresh
Dan
diff
changeset
+ − 180
posix_kill($pid, SIGUSR1);
86140ed9087d
Experimental: upon change to playlist, send SIGUSR1 to parent process and branch out to all children to force a playlist refresh
Dan
diff
changeset
+ − 181
}
86140ed9087d
Experimental: upon change to playlist, send SIGUSR1 to parent process and branch out to all children to force a playlist refresh
Dan
diff
changeset
+ − 182
}
86140ed9087d
Experimental: upon change to playlist, send SIGUSR1 to parent process and branch out to all children to force a playlist refresh
Dan
diff
changeset
+ − 183
}