$MASTER_SERVER = 'infmaster.sobservers.com:28900'; //$MASTER_SERVER = 'utmaster.epicgames.com:28900'; /* $RULE_FILTERS = array ( 'gamename' => 'ut', 'gamestyle' => 'Infiltration' ); */ $DEFAULT_SERVERS = array ( 'inf.cerberon.net:17777', 'inf.cerberon.net:27777', 'xplod.de:7777', 'xplod.de:8888', ); $QSTAT = '/usr/bin/quakestat'; define ('SERVER_TYPE_UNREAL', 'uns' ); define ('SERVER_TYPE_UNREAL_MASTER', 'gsm,uns'); function qstat_query($address, $type, $options = NULL) { global $QSTAT; $cmd = $QSTAT.' -nocfg -xml -utf8'; if (isset ($options)) $cmd .= ' '.$options; $cmd .= ' -'.$type.' '.escapeshellarg($address); if (($ph = popen('exec '.$cmd, 'r')) === FALSE) return FALSE; if (($xml = stream_get_contents($ph)) === FALSE) { pclose($ph); return FALSE; } if (pclose($ph)) return FALSE; $dom = new DOMDocument(); $dom->recover = TRUE; if (!$dom->loadXML($xml)) return FALSE; if (($data = simplexml_import_dom($dom)) === FALSE) return FALSE; return $data; } function unreal_server_query($address) { if (($data = qstat_query($address, SERVER_TYPE_UNREAL, '-R -P')) === FALSE) return FALSE; return $data->server; } function unreal_master_query($address) { if (($data = qstat_query($address, SERVER_TYPE_UNREAL_MASTER, '-R -P')) === FALSE) return FALSE; $servers = array (); foreach ($data as $server) if (strtolower($server['type']) == SERVER_TYPE_UNREAL) $servers[(string)$server['address']] = $server; return $servers; } if (@$_REQUEST['nomaster']) { $servers = array (); $master_failed = FALSE; } else { if ($master_failed = (($servers = unreal_master_query($MASTER_SERVER)) === FALSE)) $servers = array (); } foreach ($DEFAULT_SERVERS as $address) if (!array_key_exists($address, $servers)) $servers[$address] = unreal_server_query($address); //TODO sort servers $html_charset = 'UTF-8'; function html_content_type() { global $html_charset; return 'text/html;charset='.$html_charset; } function html_encode($str) { global $html_charset; $str = strtr((string)$str, array ("\r\n" => "\n", "\r" => "\n")); $html = htmlspecialchars($str, ENT_COMPAT, $html_charset); return $html; } function html_text($str) { $html = html_encode($str); $html = str_replace(' ', '  ', $html); // preserve white space return nl2br($html); } header('Content-Type: '.html_content_type()); ?> INF Server Browser

Master server query failed - using default server list!

$server):?>
Servers
Priv. Name Address Ping Game Type Map Players
xpath("rules/rule[@name='password']")[0] == 'True') ? 'Yes' : 'No')?> name)?> ping)?> gametype)?> map.' ('.@$server->xpath("rules/rule[@name='maptitle']")[0].')')?> numplayers.'/'.$server->maxplayers)?>