120 lines
3.6 KiB
PHP
120 lines
3.6 KiB
PHP
<?php
|
|
|
|
// server init: No Timeout
|
|
set_time_limit(0);
|
|
ob_implicit_flush();
|
|
|
|
$error_message = null;
|
|
$error_code = null;
|
|
$listenHost = "0.0.0.0";
|
|
$listenPort = 1025;
|
|
$socket = stream_socket_server("tcp://" . $listenHost . ":" . $listenPort, $error_code, $error_message) or logger(ERROR, _("Could not create socket") . EOL);
|
|
stream_set_blocking($socket, false);
|
|
|
|
$read = array( $socket );
|
|
|
|
function askWebServer($read)
|
|
{
|
|
$array = array();
|
|
$argList =array();
|
|
|
|
if ( stream_select( $read, $array, $array, 0 ))
|
|
{
|
|
logger(DEBUG, _("socket ready to read"), __FILE__ . ":" . __LINE__);
|
|
$spawn = stream_socket_accept($read[0]);
|
|
if ($spawn !== false)
|
|
{
|
|
logger(DEBUG, _("socket accepted"), __FILE__ . ":" . __LINE__);
|
|
$input = fgets($spawn, 4096);
|
|
logger(DEBUG, $input, __FILE__ . ":" . __LINE__);
|
|
if (!empty($input))
|
|
{
|
|
$input = substr($input,5);
|
|
$input = explode(" ", $input); // suppress text
|
|
$argTmp = explode("&", $input[0]);
|
|
foreach($argTmp as $tmp)
|
|
{
|
|
logger(DEBUG, $tmp, __FILE__ . ":" . __LINE__);
|
|
$array = explode("=", $tmp);
|
|
//print_r($array);
|
|
if (isset($array[1])) $argList[$array[0]] = $array[1];
|
|
}
|
|
if(array_key_exists("cmd", $argList))
|
|
{
|
|
$command = strtolower($argList["cmd"]);
|
|
switch($command)
|
|
{
|
|
case "get":
|
|
logger(DEBUG, _("GET reached"), __FILE__ . ":" . __LINE__);
|
|
if(empty($argList["device"]))
|
|
{
|
|
$response = "<html><header><body>get passed</body></header><html>";
|
|
}
|
|
fwrite($spawn, $response);
|
|
break;
|
|
case "set":
|
|
logger(DEBUG, _("SET reached"), __FILE__ . ":" . __LINE__);
|
|
$response = "<html><header><body>set passed</body></header><html>";
|
|
fwrite($spawn, $response);
|
|
break;
|
|
case "dump":
|
|
case "print":
|
|
logger(DEBUG, $command . _(" reached"), __FILE__ . ":" . __LINE__);
|
|
$var = $GLOBALS[$argList["object"]];
|
|
if (isset($argList["topic"]))
|
|
{
|
|
$topic = $argList["topic"];
|
|
}
|
|
if (isset($argList["address"]))
|
|
{
|
|
$var = $var[$argList["address"]];
|
|
}elseif (isset($argList["fn"]))
|
|
{
|
|
if(!empty($topic))
|
|
{
|
|
$var = getDevice($topic, $argList["fn"]);
|
|
}else
|
|
{
|
|
$str = _("topic is not defining: add &topic=\nThese topics are availables: ");
|
|
foreach($topics as $key => $value)
|
|
{
|
|
$str .= $key . EOL;
|
|
}
|
|
logger(ERROR, $str, __FILE__ . ":" . __LINE__);
|
|
}
|
|
}
|
|
$error = error_get_last();
|
|
if($error !== null)
|
|
{
|
|
$response = "<html><header><body>" . $error["message"] . " file: " . $error["file"] . " line: " . $error["line"] . "</body></header><html>";
|
|
}
|
|
if ($command === "print")
|
|
{
|
|
$response = print_r($var, true);
|
|
}elseif($command === "dump")
|
|
{
|
|
$response = "Dump" . EOL;
|
|
$response .= var_export($var, true);
|
|
}
|
|
fwrite($spawn, $response);
|
|
break;
|
|
case "notify":
|
|
if (!array_key_exists("topic", $argList) or !array_key_exists("fn", $argList) or !array_key_exists("property", $argList) or !array_key_exists("condition", $argList) or !array_key_exists("value", $argList))
|
|
{
|
|
fwrite($spawn, _("Error: With 'notify' command, you need 4 parameters: topic, fn, property, condition, value"));
|
|
}else
|
|
{
|
|
$monitored[] = new watch($argList["topic"], $argList["fn"], $argList["property"], $argList["condition"], $argList["value"]);
|
|
}
|
|
break;
|
|
default:
|
|
logger(DEBUG, _("unknown command"), __FILE__ . ":" . __LINE__);
|
|
fwrite($spawn, _("unknown command"));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
?>
|