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&p=game_monitor&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&p=game_monitor&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&p=game_monitor&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&p=stop&home_id=" . $home_info['home_id'] . "&ip=" . $ip . "&port=" . $port . ">" . get_lang('already_running_stop_server') . ".</a></p>"; echo "<table class='center'><tr><td><a href='?m=gamemanager&p=game_monitor&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&p=start&refresh&ip={$ip}&port={$port}&home_id={$home_id}&mod_id={$mod_id}&retry=" . $retry, 3); return; } print_success(get_lang('server_started')); $ip_id = $db->getIpIdByIp($ip); $db->delServerStatusCache($ip_id, $port); $view->refresh("?m=gamemanager&p=game_monitor&home_id-mod_id-ip-port={$home_id}-{$mod_id}-{$ip}-{$port}"); return; }
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']); } }
$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'];
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; }
<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'); }
$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&p=stop&home_id=" . $home_info['home_id'] . "&ip=" . $ip . "&port=" . $port . ">" . get_lang('already_running_stop_server') . ".</a></p>"; echo "<table class='center'><tr><td><a href='?m=gamemanager&p=game_monitor&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&p=start&refresh&ip={$ip}&port={$port}&home_id={$home_id}&mod_id={$mod_id}&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&p=game_monitor&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&p=game_monitor&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&p=restart&refresh&ip={$ip}&port={$port}&home_id={$home_id}&mod_id={$mod_id}", 3); return; } else { if ($remote_retval === -1) { print_failure(get_lang('server_cant_start')); $view->refresh("?m=gamemanager&p=game_monitor&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&p=game_monitor&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&p=restart&refresh&ip={$ip}&port={$port}&home_id={$home_id}&mod_id={$mod_id}", 3); return; } else { print_failure("" . get_lang('error_occured_remote_host') . ".{$remote_retval}"); $view->refresh("?m=gamemanager&p=game_monitor&home_id-mod_id-ip-port=" . $home_info['home_id'] . "-" . $home_info['mod_id'] . "-" . $ip . "-" . $port, 3); } } } } } } }
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; }
} } 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 ? " " : "";
<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>