protected function queryServer($server, &$response)
 {
     gameservers_include_library('lgsl_protocol.php', 'lgsl');
     $config = $server->config['query'];
     // s = STANDARD = info returned in the same format for all games.
     // e = EXTRA    = info that varies between games.
     // p = PLAYER   = info that is player specific.
     $data = lgsl_query_live($config['gametype'], $server->hostname, $server->port, $config['q_port'], $config['s_port'], 'sep');
     $response['raw'] = $data;
     $response['address'] = $data['b']['ip'];
     $response['port'] = $data['b']['c_port'];
     $response['online'] = $data['b']['status'] ? TRUE : FALSE;
     $response['protocol'] = $data['b']['type'];
     $response['game'] = $data['s']['game'];
     $response['servername'] = $data['s']['name'];
     $response['mapname'] = $data['s']['map'];
     $response['numplayers'] = $data['s']['players'];
     $response['maxplayers'] = $data['s']['playersmax'];
     $response['extra'] = $data['e'];
     $response['players'] = array();
     if (!empty($data['p'])) {
         foreach ($data['p'] as $player_info) {
             if (!empty($player_info['name'])) {
                 $player = new stdClass();
                 $player->name = check_plain($player_info['name']);
                 $player->score = $player_info['score'];
                 $player->time = $player_info['time'];
                 $response['players'][] = $player;
             }
         }
     }
     return TRUE;
 }
function exec_ogp_module()
{
    global $db;
    global $view;
    $home_id = $_REQUEST['home_id'];
    $isAdmin = $db->isAdmin($_SESSION['user_id']);
    if ($isAdmin) {
        $home_info = $db->getGameHome($home_id);
    } else {
        $home_info = $db->getUserGameHome($_SESSION['user_id'], $home_id);
    }
    if ($home_info == FALSE) {
        print_failure(get_lang('no_rights_to_start_server'));
        echo "<table class='center'><tr><td><a href='?m=gamemanager&amp;p=game_monitor&amp;home_id-mod_id-ip-port=" . $home_info['home_id'] . "-" . $home_info['mod_id'] . "-" . $_REQUEST['ip'] . "-" . $_REQUEST['port'] . "'><< " . get_lang('back') . "</a></td></tr></table>";
        return;
    }
    $mod_id = $_REQUEST['mod_id'];
    if (!array_key_exists($mod_id, $home_info['mods'])) {
        print_failure("Unable to retrieve mod information from database.");
        return;
    }
    echo "<h2>";
    echo empty($home_info['home_name']) ? get_lang('not_available') : $home_info['home_name'];
    echo "</h2>";
    require_once 'includes/lib_remote.php';
    $remote = new OGPRemoteLibrary($home_info['agent_ip'], $home_info['agent_port'], $home_info['encryption_key']);
    $server_xml = read_server_config(SERVER_CONFIG_LOCATION . "/" . $home_info['home_cfg_file']);
    if (!$server_xml) {
        echo "<table class='center'><tr><td><a href='?m=gamemanager&amp;p=game_monitor&amp;home_id-mod_id-ip-port=" . $home_info['home_id'] . "-" . $home_info['mod_id'] . "-" . $_REQUEST['ip'] . "-" . $_REQUEST['port'] . "'><< " . get_lang('back') . "</a></td></tr></table>";
        return;
    }
    // It compares ip and port on POST with the pair on DB for security reasons (URL HACKING)
    $home_id = $home_info['home_id'];
    $ip_info = $db->getHomeIpPorts($home_id);
    foreach ($ip_info as $ip_ports_row) {
        if ($ip_ports_row['ip'] == $_REQUEST['ip'] && $ip_ports_row['port'] == $_REQUEST['port']) {
            $ip = $ip_ports_row['ip'];
            $port = $ip_ports_row['port'];
        }
    }
    if (!isset($ip) or !isset($port)) {
        echo "<h2>" . get_lang_f('ip_port_pair_not_owned') . "</h2>";
        echo "<table class='center'><tr><td><a href='?m=gamemanager&amp;p=game_monitor&amp;home_id-mod_id-ip-port={$home_id}-{$mod_id}-{$ip}-{$port}'><< " . get_lang('back') . "</a></td></tr></table>";
        return;
    }
    if (isset($server_xml->console_log)) {
        $log_retval = $remote->remote_readfile($home_info['home_path'] . '/' . $server_xml->console_log, $home_log);
    } else {
        $log_retval = $remote->get_log(OGP_SCREEN_TYPE_HOME, $home_info['home_id'], clean_path($home_info['home_path'] . "/" . $server_xml->exe_location), $home_log);
    }
    function getLastLines($string, $n = 1)
    {
        $lines = explode("\n", $string);
        $lines = array_slice($lines, -$n);
        return implode("\n", $lines);
    }
    $home_log = getLastLines($home_log, 40);
    if ($log_retval > 0) {
        if ($log_retval == 2) {
            print_failure(get_lang('server_not_running_log_found'));
        }
        echo "<pre style='background:black;color:white;'>" . $home_log . "</pre>";
        if ($log_retval == 2) {
            return;
        }
    } else {
        print_failure(get_lang_f('unable_to_get_log', $log_retval));
    }
    // If game is not supported by lgsl we skip the lgsl checks and
    // assume successfull start.
    if ($home_info['use_nat'] == 1) {
        $query_ip = $home_info['agent_ip'];
    } else {
        $query_ip = $ip;
    }
    $running = $remote->is_screen_running(OGP_SCREEN_TYPE_HOME, $home_info['home_id']);
    if ($server_xml->lgsl_query_name) {
        require 'protocol/lgsl/lgsl_protocol.php';
        $get_q_and_s = lgsl_port_conversion((string) $server_xml->lgsl_query_name, $port, "", "");
        //Connection port
        $c_port = $get_q_and_s['0'];
        //query port
        $q_port = $get_q_and_s['1'];
        //software port
        $s_port = $get_q_and_s['2'];
        $data = lgsl_query_live((string) $server_xml->lgsl_query_name, $query_ip, $c_port, $q_port, $s_port, "sa");
        if ($data['b']['status'] == "0") {
            $running = FALSE;
        }
    } elseif ($server_xml->gameq_query_name) {
        require 'protocol/GameQ/GameQ.php';
        $query_port = get_query_port($server_xml, $port);
        $servers = array(array('id' => 'server', 'type' => (string) $server_xml->gameq_query_name, 'host' => $query_ip . ":" . $query_port));
        $gq = new GameQ();
        $gq->addServers($servers);
        $gq->setOption('timeout', 4);
        $gq->setOption('debug', FALSE);
        $gq->setFilter('normalise');
        $game = $gq->requestData();
        if (!$game['server']['gq_online']) {
            $running = FALSE;
        }
    }
    if (!$running) {
        if (!isset($_GET['retry'])) {
            $retry = 0;
        } else {
            $retry = $_GET['retry'];
        }
        if ($retry >= 5) {
            echo "<p>" . get_lang('server_running_not_responding') . "\n\t\t\t<a href=?m=gamemanager&amp;p=stop&amp;home_id=" . $home_info['home_id'] . "&amp;ip=" . $ip . "&amp;port=" . $port . ">" . get_lang('already_running_stop_server') . ".</a></p>";
            echo "<table class='center'><tr><td><a href='?m=gamemanager&amp;p=game_monitor&amp;home_id-mod_id-ip-port={$home_id}-{$mod_id}-{$ip}-{$port}'><< " . get_lang('back') . "</a></td></tr></table>";
        }
        echo "</b>Retry #" . $retry . ".</b>";
        $retry++;
        print "<p class='note'>" . get_lang('starting_server') . "</p>";
        $view->refresh("?m=gamemanager&amp;p=start&amp;refresh&amp;ip={$ip}&amp;port={$port}&amp;home_id={$home_id}&amp;mod_id={$mod_id}&amp;retry=" . $retry, 3);
        return;
    }
    print_success(get_lang('server_started'));
    $ip_id = $db->getIpIdByIp($ip);
    $db->delServerStatusCache($ip_id, $port);
    $view->refresh("?m=gamemanager&amp;p=game_monitor&amp;home_id-mod_id-ip-port={$home_id}-{$mod_id}-{$ip}-{$port}");
    return;
}
Exemplo n.º 3
0
function update_server_cache($ignoretime = false)
{
    global $db;
    if ($ignoretime) {
        $result = $db->query('SELECT serverID, gametype, ip, port, queryport, sport FROM ' . DB_PRE . 'ecp_server WHERE aktiv = 1 AND stat = 1');
    } else {
        $result = $db->query('SELECT serverID, gametype, ip, port, queryport, sport FROM ' . DB_PRE . 'ecp_server WHERE aktiv = 1 AND datum < ' . (time() - SERVER_CACHE_REFRESH));
    }
    while ($row = mysql_fetch_assoc($result)) {
        $response = lgsl_query_live($row['gametype'], $row['ip'], $row['port'], $row['queryport'], $row['sport'], 'spe');
        if ($response['s']['game'] == "Call of Duty: World at War") {
            $response['s']['game'] = $row['gametype'];
        }
        $db->query('UPDATE ' . DB_PRE . 'ecp_server SET response = \'' . strsave(serialize($response)) . '\', datum = ' . time() . ' WHERE serverID = ' . $row['serverID']);
    }
}
Exemplo n.º 4
0
     $data = $statusCache;
 } else {
     $port = $server_home['port'];
     if ($server_home['use_nat'] == 1) {
         $ip = $server_home['agent_ip'];
     } else {
         $ip = $server_home['ip'];
     }
     $get_q_and_s = lgsl_port_conversion((string) $server_xml->lgsl_query_name, $port, "", "");
     //Connection port
     $c_port = $get_q_and_s['0'];
     //query port
     $q_port = $get_q_and_s['1'];
     //software port
     $s_port = $get_q_and_s['2'];
     $data = lgsl_query_live((string) $server_xml->lgsl_query_name, $ip, $c_port, $q_port, $s_port, "sp");
     //-----------------------------------+
     $data['s']['game'] = preg_replace("/[^A-Za-z0-9 \\_\\-]/", "_", strtolower($data['s']['game']));
     //-----------------------------------+
     if ($data['b']['status'] == "1") {
         if (!isset($data['s']['password'])) {
             $data['status'] = "ONLINE";
         } else {
             $data['status'] = "ONLINE WITH PASSWORD";
         }
     }
     $db->saveServerStatusCache($ip_id, $port, $data);
 }
 if ($data['status'] == 'ONLINE' or $data['status'] == 'ONLINE WITH PASSWORD') {
     $status = "online";
     $stats_players += $data['s']['players'];
Exemplo n.º 5
0
 function lgsl_query_cached($type, $ip, $c_port, $q_port, $s_port, $request, $id = NULL)
 {
     global $lgsl_config;
     lgsl_database();
     // LOOKUP SERVER
     if ($id != NULL) {
         $id = intval($id);
         $mysql_query = "SELECT * FROM `{$lgsl_config['db']['prefix']}{$lgsl_config['db']['table']}` WHERE `id`='{$id}' LIMIT 1";
         $mysql_result = mysql_query($mysql_query) or die(mysql_error());
         $mysql_row = mysql_fetch_array($mysql_result, MYSQL_ASSOC);
         if (!$mysql_row) {
             return FALSE;
         }
         list($type, $ip, $c_port, $q_port, $s_port) = array($mysql_row['type'], $mysql_row['ip'], $mysql_row['c_port'], $mysql_row['q_port'], $mysql_row['s_port']);
     } else {
         list($type, $ip, $c_port, $q_port, $s_port) = array(mysql_real_escape_string($type), mysql_real_escape_string($ip), intval($c_port), intval($q_port), intval($s_port));
         if (!$type || !$ip || !$c_port || !$q_port) {
             exit("LGSL PROBLEM: INVALID SERVER '{$type} : {$ip} : {$c_port} : {$q_port} : {$s_port}'");
         }
         $mysql_query = "SELECT * FROM `{$lgsl_config['db']['prefix']}{$lgsl_config['db']['table']}` WHERE `type`='{$type}' AND `ip`='{$ip}' AND `q_port`='{$q_port}' LIMIT 1";
         $mysql_result = mysql_query($mysql_query) or die(mysql_error());
         $mysql_row = mysql_fetch_array($mysql_result, MYSQL_ASSOC);
         if (!$mysql_row) {
             if (strpos($request, "a") === FALSE) {
                 exit("LGSL PROBLEM: SERVER NOT IN DATABASE '{$type} : {$ip} : {$c_port} : {$q_port} : {$s_port}'");
             }
             $mysql_query = "INSERT INTO `{$lgsl_config['db']['prefix']}{$lgsl_config['db']['table']}` (`type`,`ip`,`c_port`,`q_port`,`s_port`,`cache`,`cache_time`) VALUES ('{$type}','{$ip}','{$c_port}','{$q_port}','{$s_port}','','')";
             $mysql_result = mysql_query($mysql_query) or die(mysql_error());
             $mysql_row = array("id" => mysql_insert_id(), "zone" => "0", "comment" => "");
         }
     }
     // UNPACK CACHE AND CACHE TIMES
     $cache = empty($mysql_row['cache']) ? array() : unserialize(base64_decode($mysql_row['cache']));
     $cache_time = empty($mysql_row['cache_time']) ? array(0, 0, 0) : explode("_", $mysql_row['cache_time']);
     // SET THE SERVER AS OFFLINE AND PENDING WHEN THERE IS NO CACHE
     if (empty($cache['b']) || !is_array($cache)) {
         $cache = array();
         $cache['b'] = array();
         $cache['b']['status'] = 0;
         $cache['b']['pending'] = 1;
     }
     // CONVERT HOSTNAME TO IP WHEN NEEDED
     if ($lgsl_config['host_to_ip']) {
         $ip = gethostbyname($ip);
     }
     // UPDATE CACHE WITH FIXED VALUES
     $cache['b']['type'] = $type;
     $cache['b']['ip'] = $ip;
     $cache['b']['c_port'] = $c_port;
     $cache['b']['q_port'] = $q_port;
     $cache['b']['s_port'] = $s_port;
     $cache['o']['request'] = $request;
     $cache['o']['id'] = $mysql_row['id'];
     $cache['o']['zone'] = $mysql_row['zone'];
     $cache['o']['comment'] = $mysql_row['comment'];
     // UPDATE CACHE WITH LOCATION
     if (empty($cache['o']['location'])) {
         $cache['o']['location'] = $lgsl_config['locations'] ? lgsl_query_location($ip) : "";
     }
     // UPDATE CACHE WITH DEFAULT OFFLINE VALUES
     if (!isset($cache['s'])) {
         $cache['s'] = array();
         $cache['s']['game'] = $type;
         $cache['s']['name'] = $lgsl_config['text']['nnm'];
         $cache['s']['map'] = $lgsl_config['text']['nmp'];
         $cache['s']['players'] = 0;
         $cache['s']['playersmax'] = 0;
         $cache['s']['password'] = 0;
     }
     if (!isset($cache['e'])) {
         $cache['e'] = array();
     }
     if (!isset($cache['p'])) {
         $cache['p'] = array();
     }
     // CHECK AND GET THE NEEDED DATA
     $needed = "";
     if (strpos($request, "c") === FALSE) {
         if (strpos($request, "s") !== FALSE && time() > $cache_time[0] + $lgsl_config['cache_time']) {
             $needed .= "s";
         }
         if (strpos($request, "e") !== FALSE && time() > $cache_time[1] + $lgsl_config['cache_time']) {
             $needed .= "e";
         }
         if (strpos($request, "p") !== FALSE && time() > $cache_time[2] + $lgsl_config['cache_time']) {
             $needed .= "p";
         }
     }
     if ($needed) {
         // UPDATE CACHE TIMES BEFORE QUERY - PREVENTS OTHER INSTANCES FROM QUERY FLOODING THE SAME SERVER
         $packed_times = time() + $lgsl_config['cache_time'] + 10;
         $packed_times = "{$packed_times}_{$packed_times}_{$packed_times}";
         $mysql_query = "UPDATE `{$lgsl_config['db']['prefix']}{$lgsl_config['db']['table']}` SET `cache_time`='{$packed_times}' WHERE `id`='{$mysql_row['id']}' LIMIT 1";
         $mysql_result = mysql_query($mysql_query) or die(mysql_error());
         // GET WHAT IS NEEDED
         $live = lgsl_query_live($type, $ip, $c_port, $q_port, $s_port, $needed);
         if (!$live['b']['status'] && $lgsl_config['retry_offline'] && !$lgsl_config['feed']['method']) {
             $live = lgsl_query_live($type, $ip, $c_port, $q_port, $s_port, $needed);
         }
         // CHECK AND CONVERT TO UTF-8 WHERE NEEDED
         $live = lgsl_charset_convert($live, lgsl_charset_detect($live));
         // IF SERVER IS OFFLINE PRESERVE SOME OF THE CACHE AND CLEAR THE REST
         if (!$live['b']['status']) {
             $live['s']['game'] = $cache['s']['game'];
             $live['s']['name'] = $cache['s']['name'];
             $live['s']['map'] = $cache['s']['map'];
             $live['s']['password'] = $cache['s']['password'];
             $live['s']['players'] = 0;
             $live['s']['playersmax'] = $cache['s']['playersmax'];
             $live['e'] = array();
             $live['p'] = array();
         }
         // MERGE LIVE INTO CACHE
         if (isset($live['b'])) {
             $cache['b'] = $live['b'];
             $cache['b']['pending'] = 0;
         }
         if (isset($live['s'])) {
             $cache['s'] = $live['s'];
             $cache_time[0] = time();
         }
         if (isset($live['e'])) {
             $cache['e'] = $live['e'];
             $cache_time[1] = time();
         }
         if (isset($live['p'])) {
             $cache['p'] = $live['p'];
             $cache_time[2] = time();
         }
         // UPDATE CACHE
         $packed_cache = mysql_real_escape_string(base64_encode(serialize($cache)));
         $packed_times = mysql_real_escape_string(implode("_", $cache_time));
         $mysql_query = "UPDATE `{$lgsl_config['db']['prefix']}{$lgsl_config['db']['table']}` SET `status`='{$cache['b']['status']}',`cache`='{$packed_cache}',`cache_time`='{$packed_times}' WHERE `id`='{$mysql_row['id']}' LIMIT 1";
         $mysql_result = mysql_query($mysql_query) or die(mysql_error());
     }
     // RETURN ONLY THE REQUESTED
     if (strpos($request, "s") === FALSE) {
         unset($cache['s']);
     }
     if (strpos($request, "e") === FALSE) {
         unset($cache['e']);
     }
     if (strpos($request, "p") === FALSE) {
         unset($cache['p']);
     }
     return $cache;
 }
Exemplo n.º 6
0
							<tr>
								<td><?php 
echo T_('Panel Status');
?>
</td>
								<td><?php 
echo formatStatus($rows['panelstatus']);
?>
</td>
							</tr>
<?php 
if ($rows['status'] == 'Active' && $rows['panelstatus'] == 'Started') {
    //---------------------------------------------------------+
    //Querying the server
    include_once "../libs/lgsl/lgsl_class.php";
    $server = lgsl_query_live($type['querytype'], $serverIp['ip'], NULL, $rows['queryport'], NULL, 's');
    //
    //---------------------------------------------------------+
}
?>
							<tr>
								<td><?php 
echo T_('Net Status');
?>
</td>
								<td><?php 
if (@$server['b']['status'] == '1') {
    echo formatStatus('Online');
} else {
    echo formatStatus('Offline');
}
Exemplo n.º 7
0
$ip_check = gethostbyname($ip);
$mysql_result = mysql_query("SELECT `ip`,`disabled` FROM `{$lgsl_config['db']['prefix']}{$lgsl_config['db']['table']}` WHERE `type`='{$type}' AND `q_port`='{$q_port}'");
while ($mysql_row = mysql_fetch_array($mysql_result, MYSQL_ASSOC)) {
    if ($ip_check == gethostbyname($mysql_row['ip'])) {
        $output .= "\n      <div style='text-align:center;" . lgsl_bg() . "'>\n        <br />";
        if ($mysql_row['disabled']) {
            $output .= $lgsl_config['text']['aaa'];
        } else {
            $output .= $lgsl_config['text']['aan'];
        }
        $output .= "\n        <br />\n        <br />\n      </div>\n\n      <div>\n      <br />\n      </div>";
        return;
    }
}
//-----------------------------------------------------------------------------------------------------------+
$server = lgsl_query_live($type, $ip, $c_port, $q_port, $s_port, "s");
$server = lgsl_server_html($server);
if (!$server['b']['status']) {
    $output .= "\n    <div style='text-align:center;" . lgsl_bg() . "'>\n      <br />\n      {$lgsl_config['text']['anr']}\n      <br />\n      <br />\n    </div>\n\n    <div>\n    <br />\n    </div>";
    return;
}
//-----------------------------------------------------------------------------------------------------------+
if (!empty($_POST['lgsl_submit_add'])) {
    $disabled = $lgsl_config['public_add'] == "2" ? "0" : "1";
    $mysql_query = "INSERT INTO `{$lgsl_config['db']['prefix']}{$lgsl_config['db']['table']}` (`type`,`ip`,`c_port`,`q_port`,`s_port`,`disabled`,`cache`,`cache_time`) VALUES ('{$type}','{$ip}','{$c_port}','{$q_port}','{$s_port}','{$disabled}','','')";
    $mysql_result = mysql_query($mysql_query) or die(mysql_error());
    $output .= "\n    <div style='text-align:center;" . lgsl_bg() . "'>\n      <br />";
    if ($disabled) {
        $output .= $lgsl_config['text']['ada'];
    } else {
        $output .= $lgsl_config['text']['adn'];
function exec_ogp_module()
{
    global $view, $db;
    $ip = $_REQUEST['ip'];
    $port = $_REQUEST['port'];
    $home_id = $_REQUEST['home_id'];
    $user_id = $_SESSION['user_id'];
    $home_id = $_REQUEST['home_id'];
    $isAdmin = $db->isAdmin($_SESSION['user_id']);
    if ($isAdmin) {
        $home_info = $db->getGameHome($home_id);
    } else {
        $home_info = $db->getUserGameHome($_SESSION['user_id'], $home_id);
    }
    require_once 'includes/lib_remote.php';
    $remote = new OGPRemoteLibrary($home_info['agent_ip'], $home_info['agent_port'], $home_info['encryption_key']);
    $mod_id = $_REQUEST['mod_id'];
    if ($home_info === FALSE) {
        print_failure(get_lang('no_rights_to_stop_server'));
        return;
    }
    echo "<h2>";
    echo empty($home_info['home_name']) ? get_lang('not_available') : $home_info['home_name'];
    echo "</h2>";
    $server_xml = read_server_config(SERVER_CONFIG_LOCATION . "/" . $home_info['home_cfg_file']);
    if (!$server_xml) {
        echo create_back_button("gamemanager", "game_monitor");
        return;
    }
    $rserver = $db->getRemoteServerById($home_info['remote_server_id']);
    if (empty($rserver)) {
        print_failure("" . get_lang('not_found_server') . " " . $home_info['remote_server_id'] . ".");
    } else {
        if (isset($_REQUEST['refresh'])) {
            if (isset($server_xml->console_log)) {
                $log_retval = $remote->remote_readfile($home_info['home_path'] . '/' . $server_xml->console_log, $home_log);
            } else {
                $log_retval = $remote->get_log(OGP_SCREEN_TYPE_HOME, $home_info['home_id'], clean_path($home_info['home_path'] . "/" . $server_xml->exe_location), $home_log);
            }
            function getLastLines($string, $n = 1)
            {
                $lines = explode("\n", $string);
                $lines = array_slice($lines, -$n);
                return implode("\n", $lines);
            }
            $home_log = getLastLines($home_log, 40);
            if ($log_retval > 0) {
                if ($log_retval == 2) {
                    print_failure(get_lang('server_not_running_log_found'));
                }
                echo "<pre style='background:black;color:white;'>" . $home_log . "</pre>";
                if ($log_retval == 2) {
                    return;
                }
            } else {
                print_failure(get_lang_f('unable_to_get_log', $log_retval));
            }
            // If game is not supported by lgsl we skip the lgsl checks and
            // assume successfull start.
            if ($home_info['use_nat'] == 1) {
                $query_ip = $home_info['agent_ip'];
            } else {
                $query_ip = $ip;
            }
            $running = TRUE;
            if ($server_xml->lgsl_query_name) {
                require 'protocol/lgsl/lgsl_protocol.php';
                $get_q_and_s = lgsl_port_conversion((string) $server_xml->lgsl_query_name, $port, "", "");
                //Connection port
                $c_port = $get_q_and_s['0'];
                //query port
                $q_port = $get_q_and_s['1'];
                //software port
                $s_port = $get_q_and_s['2'];
                $data = lgsl_query_live((string) $server_xml->lgsl_query_name, $query_ip, $c_port, $q_port, $s_port, "sa");
                if ($data['b']['status'] == "0") {
                    $running = FALSE;
                }
            } elseif ($server_xml->gameq_query_name) {
                require 'protocol/GameQ/GameQ.php';
                $query_port = get_query_port($server_xml, $port);
                $servers = array(array('id' => 'server', 'type' => (string) $server_xml->gameq_query_name, 'host' => $query_ip . ":" . $query_port));
                $gq = new GameQ();
                $gq->addServers($servers);
                $gq->setOption('timeout', 4);
                $gq->setOption('debug', FALSE);
                $gq->setFilter('normalise');
                $game = $gq->requestData();
                if (!$game['server']['gq_online']) {
                    $running = FALSE;
                }
            }
            if (!$running) {
                if (!isset($_GET['retry'])) {
                    $retry = 0;
                } else {
                    $retry = $_GET['retry'];
                }
                if ($retry >= 5) {
                    echo "<p>" . get_lang('server_running_not_responding') . "\n\t\t\t\t\t<a href=?m=gamemanager&amp;p=stop&amp;home_id=" . $home_info['home_id'] . "&amp;ip=" . $ip . "&amp;port=" . $port . ">" . get_lang('already_running_stop_server') . ".</a></p>";
                    echo "<table class='center'><tr><td><a href='?m=gamemanager&amp;p=game_monitor&amp;home_id-mod_id-ip-port={$home_id}-{$mod_id}-{$ip}-{$port}'><< " . get_lang('back') . "</a></td></tr></table>";
                }
                echo "</b>Retry #" . $retry . ".</b>";
                $retry++;
                print "<p class='note'>" . get_lang('starting_server') . "</p>";
                $view->refresh("?m=gamemanager&amp;p=start&amp;refresh&amp;ip={$ip}&amp;port={$port}&amp;home_id={$home_id}&amp;mod_id={$mod_id}&amp;retry=" . $retry, 3);
                return;
            }
            print_success(get_lang_f('server_restarted', $home_info['home_name']));
            $ip_id = $db->getIpIdByIp($ip);
            $db->delServerStatusCache($ip_id, $port);
            $view->refresh("?m=gamemanager&amp;p=game_monitor&amp;home_id-mod_id-ip-port=" . $home_info['home_id'] . "-" . $home_info['mod_id'] . "-" . $_REQUEST['ip'] . "-" . $_REQUEST['port']);
            echo "<p>" . get_lang('follow_server_status') . " <a href='?m=gamemanager&amp;p=game_monitor&amp;home_id-mod_id-ip-port=" . $home_info['home_id'] . "-" . $home_info['mod_id'] . "-" . $_REQUEST['ip'] . "-" . $_REQUEST['port'] . "'>" . get_lang('game_monitor') . "</a> " . get_lang('page') . ".</p>";
            return;
        } else {
            if ($server_xml->replace_texts) {
                $server_home = $home_info;
                if (isset($server_xml->lgsl_query_name)) {
                    require_once 'protocol/lgsl/lgsl_protocol.php';
                }
                require_once "modules/gamemanager/cfg_text_replace.php";
            }
            $control_type = isset($server_xml->control_protocol_type) ? $server_xml->control_protocol_type : "";
            $run_dir = isset($server_xml->exe_location) ? $server_xml->exe_location : "";
            $last_param = json_decode($home_info['last_param'], True);
            $cli_param_data['GAME_TYPE'] = $home_info['mods'][$mod_id]['mod_key'];
            $cli_param_data['IP'] = $ip;
            $cli_param_data['PORT'] = $port;
            $cli_param_data['HOSTNAME'] = $home_info['home_name'];
            $cli_param_data['PID_FILE'] = "ogp_game_startup.pid";
            $os = $remote->what_os();
            // Linux
            if (preg_match("/Linux/", $os)) {
                $cli_param_data['BASE_PATH'] = $home_info['home_path'];
                $cli_param_data['HOME_PATH'] = $home_info['home_path'];
                $cli_param_data['SAVE_PATH'] = $home_info['home_path'];
                $cli_param_data['OUTPUT_PATH'] = $home_info['home_path'];
                $cli_param_data['USER_PATH'] = $home_info['home_path'];
            } elseif (preg_match("/CYGWIN/", $os)) {
                $home_path_win = $remote->exec("cygpath -w " . $home_info['home_path']);
                $home_path_win = str_replace("\\", "\\\\", $home_path_win);
                $home_path_win = trim($home_path_win);
                $cli_param_data['BASE_PATH'] = $home_path_win;
                $cli_param_data['HOME_PATH'] = $home_path_win;
                $cli_param_data['SAVE_PATH'] = $home_path_win;
                $cli_param_data['OUTPUT_PATH'] = $home_path_win;
                $cli_param_data['USER_PATH'] = $home_path_win;
            }
            if ($server_xml->protocol == "gameq") {
                $cli_param_data['QUERY_PORT'] = get_query_port($server_xml, $port);
            } elseif ($server_xml->protocol == "lgsl") {
                require 'protocol/lgsl/lgsl_protocol.php';
                $get_ports = lgsl_port_conversion((string) $server_xml->lgsl_query_name, $port, "", "");
                $cli_param_data['QUERY_PORT'] = $get_ports['1'];
            } elseif ($server_xml->protocol == "teamspeak3") {
                $cli_param_data['QUERY_PORT'] = "10011";
            }
            $cli_param_data['MAP'] = empty($last_param['map']) ? "" : $last_param['map'];
            $cli_param_data['PLAYERS'] = empty($last_param['players']) ? $home_info['mods'][$mod_id]['max_players'] : $last_param['players'];
            $start_cmd = "";
            // If the template is empty then these are not needed.
            if ($server_xml->cli_template) {
                $start_cmd = $server_xml->cli_template;
                if ($server_xml->cli_params) {
                    foreach ($server_xml->cli_params->cli_param as $cli) {
                        // If s is found the param is seperated with space
                        $add_space = preg_match("/s/", $cli['options']) > 0 ? " " : "";
                        $cli_value = $cli_param_data[(string) $cli['id']];
                        // If q is found we add quotes around the value.
                        if (preg_match("/q/", $cli['options']) > 0) {
                            $cli_value = "\"" . $cli_value . "\"";
                        }
                        $start_cmd = preg_replace("/%" . $cli['id'] . "%/", $cli['cli_string'] . $add_space . $cli_value, $start_cmd);
                    }
                }
            }
            if ($isAdmin) {
                $home_info['access_rights'] = "ufpet";
            }
            $param_access_enabled = preg_match("/p/", $home_info['access_rights']) > 0 ? TRUE : FALSE;
            if ($param_access_enabled && isset($last_param)) {
                foreach ($server_xml->server_params->param as $param) {
                    foreach ($last_param as $paramKey => $paramValue) {
                        if (!isset($paramValue)) {
                            $paramValue = (string) $param->default;
                        }
                        if ($param['key'] == $paramKey) {
                            if (0 == strlen($paramValue)) {
                                continue;
                            }
                            if ($param['key'] == $paramValue) {
                                // it's a checkbox
                                $new_param = $paramKey;
                            } elseif ($param->option == "ns" or $param->options == "ns") {
                                $new_param = $paramKey . $paramValue;
                            } else {
                                $new_param = $paramKey . ' "' . $paramValue . '"';
                            }
                            if ($param['id'] == NULL || $param['id'] == "") {
                                $start_cmd .= ' ' . $new_param;
                            } else {
                                $start_cmd = preg_replace("/%" . $param['id'] . "%/", $new_param, $start_cmd);
                            }
                        }
                    }
                    $start_cmd = preg_replace("/%" . $param['id'] . "%/", '', $start_cmd);
                }
            }
            $extra_param_access_enabled = preg_match("/e/", $home_info['access_rights']) > 0 ? TRUE : FALSE;
            if (array_key_exists('extra', $last_param) && $extra_param_access_enabled) {
                $extra_default = $last_param['extra'];
            } else {
                $extra_default = $home_info['mods'][$mod_id]['extra_params'];
            }
            $start_cmd .= " " . $extra_default;
            $remote_retval = $remote->remote_restart_server($home_info['home_id'], $ip, $port, $server_xml->control_protocol, $home_info['control_password'], $control_type, $home_info['home_path'], $server_xml->server_exec_name, $run_dir, $start_cmd, $home_info['cpu_affinity'], $home_info['nice']);
            $db->logger(get_lang_f('server_restarted', $home_info['home_name']) . "({$ip}:{$port})");
            if ($remote_retval === 1) {
                print "<p class='note'>" . get_lang('restarting_server') . "</p>";
                $view->refresh("?m=gamemanager&amp;p=restart&amp;refresh&amp;ip={$ip}&amp;port={$port}&amp;home_id={$home_id}&amp;mod_id={$mod_id}", 3);
                return;
            } else {
                if ($remote_retval === -1) {
                    print_failure(get_lang('server_cant_start'));
                    $view->refresh("?m=gamemanager&amp;p=game_monitor&amp;home_id-mod_id-ip-port=" . $home_info['home_id'] . "-" . $home_info['mod_id'] . "-" . $ip . "-" . $port, 3);
                } else {
                    if ($remote_retval === -2) {
                        print_failure(get_lang('server_cant_stop'));
                        $view->refresh("?m=gamemanager&amp;p=game_monitor&amp;home_id-mod_id-ip-port=" . $home_info['home_id'] . "-" . $home_info['mod_id'] . "-" . $ip . "-" . $port, 3);
                    } else {
                        $screen_running = $remote->is_screen_running(OGP_SCREEN_TYPE_HOME, $home_info['home_id']);
                        if ($screen_running == 1) {
                            print "<p class='note'>" . get_lang('restarting_server') . "</p>";
                            $view->refresh("?m=gamemanager&amp;p=restart&amp;refresh&amp;ip={$ip}&amp;port={$port}&amp;home_id={$home_id}&amp;mod_id={$mod_id}", 3);
                            return;
                        } else {
                            print_failure("" . get_lang('error_occured_remote_host') . ".{$remote_retval}");
                            $view->refresh("?m=gamemanager&amp;p=game_monitor&amp;home_id-mod_id-ip-port=" . $home_info['home_id'] . "-" . $home_info['mod_id'] . "-" . $ip . "-" . $port, 3);
                        }
                    }
                }
            }
        }
    }
}
Exemplo n.º 9
0
 function QueryServer($server)
 {
     $benchmark = new Benchmark();
     $benchmark->StartTimer("lgsl");
     $result = lgsl_query_live($server->protocol, $server->address, $server->cport, $server->qport, $server->sport, "sep");
     $benchmark->EndTimer("lgsl");
     $queryinfo = $result["b"];
     $serverinfo = $result["s"];
     $servervars = $result["e"];
     $players = $result["p"];
     /*foreach($result as $k => $v)
     	 {
     		echo "<br/><br/>$k<br/>";
     		var_dump($v);
     		}*/
     //If the server is online then copy the data over.
     if ($queryinfo["status"] == 1) {
         $server->ping = $benchmark->GetBenchmarkMilliSeconds("lgsl");
         $server->hostname = $serverinfo["name"];
         $server->game = $serverinfo["game"];
         $server->map = $serverinfo["map"];
         $server->maxplayers = $serverinfo["playersmax"];
         $server->password = $serverinfo["password"];
         if (isset($servervars["dedicated"])) {
             $server->dedicated = streq($servervars["dedicated"], "d");
         } else {
             $server->dedicated = 1;
         }
         if (isset($servervars["description"])) {
             $server->gamename = $servervars["description"];
         } else {
             $server->gamename = $server->game;
         }
         $server->setServerVars($servervars);
         $playerlist = array();
         foreach ($players as $k => $v) {
             $player = new Lan_servers_player();
             $player->name = $v["name"];
             if (isset($v["score"])) {
                 $player->score = $v["score"];
             } else {
                 if (isset($v["frags"])) {
                     $player->score = $v["frags"];
                 } else {
                     if (isset($v["rank"])) {
                         $player->score = $v["rank"];
                     } else {
                         $player->Score = "0";
                     }
                 }
             }
             if (isset($v["time"])) {
                 $player->time = $v["time"];
             } else {
                 $player->time = "";
             }
             $playerlist[] = $player;
         }
         $server->setPlayers($playerlist);
         $server->playercount = count($playerlist);
     } else {
         $server->ping = "-1";
         $playerlist = array();
         $server->setPlayers($playerlist);
         $server->maxplayers = "";
         $server->playercount = "";
     }
     return $server;
 }
Exemplo n.º 10
0
     }
 }
 if ($server_xml->protocol == "gameq") {
     $query_port = get_query_port($server_xml, $port);
 } elseif ($server_xml->protocol == "lgsl") {
     require 'protocol/lgsl/lgsl_protocol.php';
     $get_ports = lgsl_port_conversion((string) $server_xml->lgsl_query_name, $port, "", "");
     $query_port = $get_ports['1'];
 } elseif ($server_xml->protocol == "teamspeak3") {
     $query_port = "10011";
 }
 $cli_param_data['QUERY_PORT'] = $query_port;
 // Check if the game is supported by lgsl or not.
 if ($server_xml->lgsl_query_name) {
     //error_reporting(E_ERROR);
     $data = lgsl_query_live((string) $server_xml->lgsl_query_name, $ip, $port, $query_port, $port, "s");
     //error_reporting(E_ALL);
     if ($data['b']['status'] == '1') {
         print_failure("" . get_lang_f('error_server_already_running') . " <b>{$port}</b>.");
         return;
     }
 }
 $cli_param_data['GAME_TYPE'] = $home_info['mods'][$mod_id]['mod_key'];
 $start_cmd = "";
 // If the template is empty then these are not needed.
 if ($server_xml->cli_template) {
     $start_cmd = $server_xml->cli_template;
     if ($server_xml->cli_params) {
         foreach ($server_xml->cli_params->cli_param as $cli) {
             // If s is found the param is seperated with space
             $add_space = preg_match("/s/", $cli['options']) > 0 ? " " : "";
Exemplo n.º 11
0
							<td colspan="7"><div style="text-align: center;"><span class="label label-warning"><?php 
        echo $error2;
        ?>
</span></div></td>
						</tr>
<?php 
    }
}
if (!empty($servers)) {
    foreach ($servers as $key => $value) {
        $ip = query_fetch_assoc("SELECT `ip` FROM `" . DBPREFIX . "boxIp` WHERE `ipid` = '" . $value['ipid'] . "' LIMIT 1");
        $game = query_fetch_assoc("SELECT `game` FROM `" . DBPREFIX . "server` WHERE `serverid` = '" . $value['serverid'] . "' LIMIT 1");
        $type = query_fetch_assoc("SELECT `querytype` FROM `" . DBPREFIX . "game` WHERE `game` = '" . mysql_real_escape_string($game['game']) . "' LIMIT 1");
        //---------------------------------------------------------+
        //Querying the server
        $server = lgsl_query_live($type['querytype'], $ip['ip'], NULL, $value['queryport'], NULL, 's');
        //---------------------------------------------------------+
        ?>
						<tr>
							<td><?php 
        echo htmlspecialchars($value['name'], ENT_QUOTES);
        ?>
</td>
							<td><?php 
        if (@$server['b']['status'] == '1') {
            echo formatStatus('Online');
        } else {
            echo formatStatus('Offline');
        }
        ?>
</td>