User:Pizzahut/test.php: Difference between revisions

From Valve Developer Community
Jump to navigation Jump to search
(A test script in PHP to check which master servers respond.)
 
(added new IPs)
 
(2 intermediate revisions by the same user not shown)
Line 1: Line 1:
A test script in PHP to check which master servers respond.
A test script in PHP to check which master servers respond.<br>
The results can vary on a daily basis.
The results can vary on a daily basis.
<pre>
<pre>
<?php
<?php


$master_servers = array("69.28.158.131", "68.177.101.62");
$master_servers = array("68.177.101.62", "69.28.158.131", "208.64.200.117", "208.64.200.118");
define("MIN_PORT", 27010);
define("MIN_PORT", 27010);
define("MAX_PORT", 27015);
define("MAX_PORT", 27013);
define("FILTER", '\gamedir\tfc');
define("FILTER", '\gamedir\tfc');
define("REGION", "\xFF");
define("REGION", "\xFF");
Line 24: Line 24:
   $info = stream_get_meta_data($socket);
   $info = stream_get_meta_data($socket);
   if ($info['timed_out'])
   if ($info['timed_out'])
       echo "Master server timed out.\n";
       echo "UNKNOWN (time out occurred)\n";
   else
   else
   {
   {
Line 30: Line 30:
       {
       {
         if ($s == "")
         if ($s == "")
             echo "Expected ff ff ff ff 66 0a (hex) but got nothing.\n";
             echo "DOWN\n";
         else
         else
             echo "Expected ff ff ff ff 66 0a (hex) but got $s.\n";
             echo "MALFUNCTION (expected ff ff ff ff 66 0a (hex) but got $s)\n";
         return True;
         return True;
       }
       }
       else
       else
         echo "Server OK.\n";
         echo "UP\n";
   }
   }
   return $info['timed_out'];
   return $info['timed_out'];

Latest revision as of 07:35, 17 July 2012

A test script in PHP to check which master servers respond.
The results can vary on a daily basis.

<?php

$master_servers = array("68.177.101.62", "69.28.158.131", "208.64.200.117", "208.64.200.118");
define("MIN_PORT", 27010);
define("MAX_PORT", 27013);
define("FILTER", '\gamedir\tfc');
define("REGION", "\xFF");
define("TIMEOUT", 2.0);

function query_timeout(&$socket, $seed)
{
   stream_set_timeout($socket, TIMEOUT);
   if (!fwrite($socket, "1".REGION."$seed\0".FILTER."\0"))
   {
      fclose($socket);
      exit("fwrite error\n");
   }

   stream_set_timeout($socket, TIMEOUT);
   $s = bin2hex(fread($socket, 6));
   $info = stream_get_meta_data($socket);
   if ($info['timed_out'])
      echo "UNKNOWN (time out occurred)\n";
   else
   {
      if ($s !== "ffffffff660a")
      {
         if ($s == "")
            echo "DOWN\n";
         else
            echo "MALFUNCTION (expected ff ff ff ff 66 0a (hex) but got $s)\n";
         return True;
      }
      else
         echo "UP\n";
   }
   return $info['timed_out'];
}

// Connect to master server, return timeout info.
// The socket is passed as reference and thus returned as well.

function master_server_timeout(&$socket, $ip)
{
   $port = MIN_PORT;
   do {
      echo "Connecting to master server \"$ip:$port\".\n";
      $socket = fsockopen("udp://$ip", $port, $errno, $errstr, TIMEOUT);
      if (!$socket) exit("Error $errno : $errstr \n");
      $timeout = query_timeout($socket, "0.0.0.0:0");
      fclose($socket);
      $port = $port + 1;
   } while ($port <= MAX_PORT);
   return $timeout;
}

// Try all master servers.

foreach ($master_servers as $ip)
   $timeout=master_server_timeout($socket, $ip)

?>