After the recent update and the server crashing non stop I made a little php
script so I could go to sleep....
<?php
define('PACKET_SIZE', '1400');
define('SERVERQUERY_INFO', "\xFF\xFF\xFF\xFFTSource Engine Query");
define ('REPLY_INFO', "\x49");
define('SERVERQUERY_GETCHALLENGE', "\xFF\xFF\xFF\xFF\x57");
define ('REPLY_GETCHALLENGE', "\x41");
define('SERVERDATA_AUTH', 3) ;
define ('SERVERDATA_EXECCOMMAND', 2) ;
class srcds_rcon
{
private function getByte(&$string)
{
$data = substr($string, 0, 1);
$string = substr($string, 1);
$data = unpack('Cvalue', $data);
return $data['value'];
}
private function getShortUnsigned(&$string)
{
$data = substr($string, 0, 2);
$string = substr($string, 2);
$data = unpack('nvalue', $data);
return $data['value'];
}
private function getShortSigned(&$string)
{
$data = substr($string, 0, 2);
$string = substr($string, 2);
$data = unpack('svalue', $data);
return $data['value'];
}
private function getLong(&$string)
{
$data = substr($string, 0, 4);
$string = substr($string, 4);
$data = unpack('Vvalue', $data);
return $data['value'];
}
private function getFloat(&$string)
{
$data = substr($string, 0, 4);
$string = substr($string, 4);
$array = unpack("fvalue", $data);
return $array['value'];
}
private function getString(&$string)
{
$data = "";
$byte = substr($string, 0, 1);
$string = substr($string, 1);
while (ord($byte) != "0")
{
$data .= $byte;
$byte = substr($string, 0, 1);
$string = substr($string, 1);
}
return $data;
}
public function rcon_command($ip, $port, $password, $command)
{
$requestId = 1;
$s2 = '';
$socket = @fsockopen ('tcp://'.$ip, $port, $errno, $errstr, 30);
if (!$socket)
return('Unable to connect!');
$data = pack("VV", $requestId,
SERVERDATA_AUTH).$password.chr(0).$s2.chr(0);
$data = pack("V",strlen($data)).$data;
fwrite ($socket, $data, strlen($data));
$requestId++ ;
$junk = fread ($socket, PACKET_SIZE);
$string = fread ($socket, PACKET_SIZE);
$size = $this->getLong($string);
$id = $this->getLong($string) ;
if ($id == -1)
{
return 'Authentication Failed!';
}
$data = pack ("VV", $requestId,
SERVERDATA_EXECCOMMAND).$command.chr(0).$s2.chr(0) ;
$data = pack ("V", strlen ($data)).$data ;
fwrite ($socket, $data, strlen($data)) ;
$requestId++ ;
$i = 0 ;
$text = '' ;
while ($string = fread($socket, 4))
{
$info[$i]['size'] = $this->getLong($string) ;
$string = fread($socket, $info[$i]['size']) ;
$info[$i]['id'] = $this->getLong ($string) ;
$info[$i]['type'] = $this->getLong ($string) ;
$info[$i]['s1'] = $this->getString ($string) ;
$info[$i]['s2'] = $this->getString ($string) ;
$text .= $info[$i]['s1'];
$i++ ;
return $text;
}
}
}
while (true)
{
echo '---- Server Check ----'.PHP_EOL;
$srcds_rcon = new srcds_rcon ();
$result =
$srcds_rcon->rcon_command ("SERVERIP", "27015", "RCONPASSWORD",
"status");
if ($result == "Unable to connect!")
{
echo 'ERROR: Can not connect to the server!'.PHP_EOL;
$today = date ("F j, Y, g:i a");
passthru ('killall srcds_linux');
echo 'Killed all srcds_linux'.PHP_EOL;
passthru ('ulimit -c 2097152 &&
/home/srcds/srcds_new_surf/orangebox/srcds_run -debug -console -game tf +ip
65.18.168.205 +port 27015 +map surf_supersurf_v2 +maxplayers 32
-autoupdate'); //fu** you autoupdate breakn my shit
echo 'Reloaded server.'.PHP_EOL;
$message = "Surf Server Crashed (again fml) ".$today;
mail ('[email protected],[email protected]', 'Surf Crashed',
$message);
}
else
{
echo escapeshellarg ($result).PHP_EOL;
}
echo '---- Waiting 60 Seconds ----'.PHP_EOL;
sleep (60);
}
?>
Some may find it usefull... run as php5 script.php.
_______________________________________________
To unsubscribe, edit your list preferences, or view the list archives, please
visit:
http://list.valvesoftware.com/mailman/listinfo/hlds_linux