2022-02-23 10:23:16 +01:00
< ? 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 ;
$Dashboards = array ();
2022-03-04 22:30:16 +01:00
require_once $configDir . " /aliases.php " ;
2022-02-23 10:23:16 +01:00
require_once $configDir . " /dashboard_conf.php " ;
require_once " class/main.php " ;
2022-03-04 22:30:16 +01:00
require_once " webserver/cmd_functions.php " ;
2022-02-23 10:23:16 +01:00
// opening listening server
$socket = stream_socket_server ( " tcp:// " . $listenHost . " : " . $listenPort , $error_code , $error_message ) or logger ( ERROR , _ ( " Could not create socket " ), __FILE__ . " : " . __LINE__ );
stream_set_blocking ( $socket , false );
$read = array ( $socket );
2022-03-04 22:30:16 +01:00
function htmlSend ( $socket , $text , $meta = " " )
2022-02-23 10:23:16 +01:00
{
$httpHeader = " HTTP/1.1 200 OK " . EOLR .
" Date: " . date ( " r " ) . EOLR .
" Connection: close " . EOLR .
" Content-Type: text/html; charset=UTF-8 " . EOLR . EOLR ;
2022-03-04 22:30:16 +01:00
$response = $httpHeader . '<!doctype html>' . EOL . '<html lang="fr">' . EOL . '<head>' . EOL . $meta . EOL . '<meta charset="utf-8">' . EOL . '<title>Moha</title>' . EOL . '</head><body>' . EOL . $text . " </body></html> " ;
2022-02-23 10:23:16 +01:00
stream_socket_sendto ( $socket , $response );
}
function askWebServer ( $read )
{
global $topics , $indexDevices , $devices ;
$array = array ();
$argList = array ();
//logger(DEBUG, _("askWebserver function starting"), __FILE__ . ":" . __LINE__);
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__ );
$input = substr ( $input , 5 );
2022-03-04 22:30:16 +01:00
$page = $input ;
2022-02-23 10:23:16 +01:00
$input = explode ( " " , $input ); // suppress text
if ( ! empty ( $input [ 0 ]))
{
$argTmp = explode ( " & " , urldecode ( $input [ 0 ]));
foreach ( $argTmp as $tmp )
{
logger ( DEBUG , $tmp , __FILE__ . " : " . __LINE__ );
if ( strpos ( $tmp , " = " ) === false )
{
logger ( DEBUG , _ ( " no = " ), __FILE__ . " : " . __LINE__ );
$argList [ " cmd " ] = trim ( $tmp );
} else
{
$argList [ trim ( strchr ( $tmp , " = " , true ))] = trim ( substr ( strchr ( $tmp , " = " ), 1 ));
}
}
logger ( DEBUG , print_r ( $argList , true ), __FILE__ . " : " . __LINE__ );
2022-03-04 22:30:16 +01:00
2022-02-23 10:23:16 +01:00
if ( array_key_exists ( " cmd " , $argList ))
{
$command = strtolower ( $argList [ " cmd " ]);
logger ( DEBUG , _ ( " command is " ) . $command , __FILE__ . " : " . __LINE__ );
switch ( $command )
{
case " dashboard " :
2022-03-04 22:30:16 +01:00
webDashboard ( $spawn , $argList [ " dashboard " ], $argList [ " page " ]);
2022-02-23 10:23:16 +01:00
break ;
case " browse " :
logger ( DEBUG , _ ( " Browsing " ), __FILE__ . " : " . __LINE__ );
2022-03-04 22:30:16 +01:00
webBrowse ( $spawn , $argList , $argList [ " page " ]);
2022-02-23 10:23:16 +01:00
//return true;
break ;
case " get " :
logger ( DEBUG , _ ( " GET reached " ), __FILE__ . " : " . __LINE__ );
htmlSend ( $spawn , webGet ( $argList ));
break ;
case " set " :
logger ( DEBUG , _ ( " SET reached " ), __FILE__ . " : " . __LINE__ );
htmlSend ( $spawn , webSet ( $argList ));
break ;
case " dump " :
case " print " :
logger ( DEBUG , $command . _ ( " reached " ), __FILE__ . " : " . __LINE__ );
htmlSend ( $spawn , webPrint ( $argList , $command ));
break ;
case " notify " :
logger ( DEBUG , $command . _ ( " reached " ), __FILE__ . " : " . __LINE__ );
htmlSend ( $spawn , webNotify ( $argList ));
logger ( DEBUG , print_r ( $monitored , true ), __FILE__ . " : " . __LINE__ );
break ;
default :
2022-03-04 22:30:16 +01:00
if ( is_numeric ( array_key_first ( $argList )))
{
webDashboard ( $spawn , $argList [ 0 ]);
}
}
if ( array_key_exists ( " page " , $argList ))
{
htmlSend ( $spawn , '<meta http-equiv="refresh" content="1; URL=' . $argList [ " page " ] . '" />' );
return ;
2022-02-23 10:23:16 +01:00
}
} else
{
webDashboard ( $spawn );
}
} else
{
webDashboard ( $spawn );
}
}
}
}
?>