| 1 | <?php |
|---|
| 2 | /* |
|---|
| 3 | * |
|---|
| 4 | * OGP - Open Game Panel |
|---|
| 5 | * Copyright (C) Copyright (C) 2008 - 2012 The OGP Development Team |
|---|
| 6 | * |
|---|
| 7 | * http://www.opengamepanel.org/ |
|---|
| 8 | * |
|---|
| 9 | * This program is free software; you can redistribute it and/or |
|---|
| 10 | * modify it under the terms of the GNU General Public License |
|---|
| 11 | * as published by the Free Software Foundation; either version 2 |
|---|
| 12 | * of the License, or any later version. |
|---|
| 13 | * |
|---|
| 14 | * This program is distributed in the hope that it will be useful, |
|---|
| 15 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
|---|
| 16 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|---|
| 17 | * GNU General Public License for more details. |
|---|
| 18 | * |
|---|
| 19 | * You should have received a copy of the GNU General Public License |
|---|
| 20 | * along with this program; if not, write to the Free Software |
|---|
| 21 | * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
|---|
| 22 | * |
|---|
| 23 | */ |
|---|
| 24 | |
|---|
| 25 | require_once('home_handling_functions.php'); |
|---|
| 26 | require_once("modules/config_games/server_config_parser.php"); |
|---|
| 27 | |
|---|
| 28 | function exec_ogp_module() { |
|---|
| 29 | |
|---|
| 30 | global $view,$db; |
|---|
| 31 | |
|---|
| 32 | |
|---|
| 33 | $ip = $_REQUEST['ip']; |
|---|
| 34 | $port = $_REQUEST['port']; |
|---|
| 35 | $home_id = $_REQUEST['home_id']; |
|---|
| 36 | $user_id = $_SESSION['user_id']; |
|---|
| 37 | |
|---|
| 38 | $home_info = $db->getUserGameHome($user_id, $home_id); |
|---|
| 39 | |
|---|
| 40 | require_once('includes/lib_remote.php'); |
|---|
| 41 | $remote = new OGPRemoteLibrary($home_info['agent_ip'],$home_info['agent_port'],$home_info['encryption_key']); |
|---|
| 42 | |
|---|
| 43 | $mod_id = $_REQUEST['mod_id']; |
|---|
| 44 | |
|---|
| 45 | if ( $home_info === FALSE ) |
|---|
| 46 | { |
|---|
| 47 | print_failure(get_lang('no_rights_to_stop_server')); |
|---|
| 48 | return; |
|---|
| 49 | } |
|---|
| 50 | |
|---|
| 51 | echo "<h2>".$home_info['home_name']."</h2>"; |
|---|
| 52 | |
|---|
| 53 | $server_xml = read_server_config(SERVER_CONFIG_LOCATION."/".$home_info['home_cfg_file']); |
|---|
| 54 | |
|---|
| 55 | if ( !$server_xml ) |
|---|
| 56 | { |
|---|
| 57 | echo create_back_button("gamemanager","game_monitor"); |
|---|
| 58 | return; |
|---|
| 59 | } |
|---|
| 60 | |
|---|
| 61 | $rserver = $db->getRemoteServerById($home_info['remote_server_id']); |
|---|
| 62 | |
|---|
| 63 | if ( empty($rserver) ) |
|---|
| 64 | { |
|---|
| 65 | print_failure("".get_lang('not_found_server')." ".$home_info['remote_server_id']."."); |
|---|
| 66 | } |
|---|
| 67 | else |
|---|
| 68 | { |
|---|
| 69 | if (isset($_REQUEST['refresh'])) |
|---|
| 70 | { |
|---|
| 71 | $home_log = ""; |
|---|
| 72 | $log_retval = $remote->get_log(OGP_SCREEN_TYPE_HOME,$home_info['home_id'], |
|---|
| 73 | clean_path($home_info['home_path']."/".$server_xml->exe_location), |
|---|
| 74 | $home_log); |
|---|
| 75 | |
|---|
| 76 | if ($log_retval > 0) |
|---|
| 77 | { |
|---|
| 78 | if ( $log_retval == 2 ) |
|---|
| 79 | print_failure(get_lang('server_not_running_log_found')); |
|---|
| 80 | echo "<pre class='log'>".$home_log."</pre>"; |
|---|
| 81 | |
|---|
| 82 | if ($log_retval == 2) |
|---|
| 83 | return; |
|---|
| 84 | } |
|---|
| 85 | else |
|---|
| 86 | { |
|---|
| 87 | print_failure(get_lang_f('unable_to_get_log',$log_retval)); |
|---|
| 88 | } |
|---|
| 89 | |
|---|
| 90 | // If game is not supported by lgsl we skip the lgsl checks and |
|---|
| 91 | // assume successfull start. |
|---|
| 92 | if ( $server_xml->lgsl_query_name ) |
|---|
| 93 | { |
|---|
| 94 | require('protocol/lgsl/lgsl_protocol.php'); |
|---|
| 95 | $get_q_and_s = lgsl_port_conversion((string)$server_xml->lgsl_query_name, $port, "", ""); |
|---|
| 96 | |
|---|
| 97 | //Connection port |
|---|
| 98 | $c_port = $get_q_and_s['0']; |
|---|
| 99 | //query port |
|---|
| 100 | $q_port = $get_q_and_s['1']; |
|---|
| 101 | //software port |
|---|
| 102 | $s_port = $get_q_and_s['2']; |
|---|
| 103 | |
|---|
| 104 | $data = lgsl_query_live((string)$server_xml->lgsl_query_name,$ip,$c_port,$q_port,$s_port, "sa"); |
|---|
| 105 | |
|---|
| 106 | |
|---|
| 107 | if( $data['b']['status'] == "0" AND isset( $_GET['retry'] ) AND $_GET['retry'] >= 4 ) |
|---|
| 108 | $data = lgsl_query_live((string)$server_xml->lgsl_query_name, $home_info['agent_ip'], $c_port, $q_port, $s_port, "sa"); |
|---|
| 109 | |
|---|
| 110 | |
|---|
| 111 | if ( $data['b']['status'] == "0" ) |
|---|
| 112 | { |
|---|
| 113 | if (!isset($_GET['retry'])) |
|---|
| 114 | $retry = 0; |
|---|
| 115 | else |
|---|
| 116 | $retry = $_GET['retry']; |
|---|
| 117 | if ($retry >= 5) |
|---|
| 118 | { |
|---|
| 119 | echo "<p>".get_lang('server_running_not_responding')." |
|---|
| 120 | <a href=?m=gamemanager&p=stop&home_id=".$home_info['home_id']. |
|---|
| 121 | "&ip=".$ip."&port=". |
|---|
| 122 | $port.">".get_lang('already_running_stop_server')."</a></p>"; |
|---|
| 123 | } |
|---|
| 124 | echo "</b>".get_lang('retry')." #".$retry.".</b>"; |
|---|
| 125 | $retry++; |
|---|
| 126 | print("<p class='note'>".get_lang('starting_server')."</p>"); |
|---|
| 127 | $view->refresh("?m=gamemanager&p=restart&refresh&ip=$ip&port=$port&home_id=$home_id&mod_id=$mod_id&retry=".$retry,3); |
|---|
| 128 | return; |
|---|
| 129 | } |
|---|
| 130 | } |
|---|
| 131 | elseif ( $server_xml->gameq_query_name ) |
|---|
| 132 | { |
|---|
| 133 | require('protocol/GameQ/GameQ.php'); |
|---|
| 134 | $qport = get_query_port($server_xml, $port); |
|---|
| 135 | $qport = get_query_port($server_xml, $port); |
|---|
| 136 | $servers['server'] = array((string)$server_xml->gameq_query_name,$ip, $port); |
|---|
| 137 | $gq = new GameQ(); |
|---|
| 138 | $gq->addServers($servers); |
|---|
| 139 | $gq->setOption('timeout', 200); |
|---|
| 140 | $gq->setFilter('normalise'); |
|---|
| 141 | $gq->setFilter('sortplayers', 'gq_ping'); |
|---|
| 142 | $game = $gq->requestData(); |
|---|
| 143 | |
|---|
| 144 | if ( !$game['server']['gq_online'] AND isset( $_GET['retry'] ) AND $_GET['retry'] >= 4 ) |
|---|
| 145 | { |
|---|
| 146 | $servers['server'] = array((string)$server_xml->gameq_query_name, $home_info['agent_ip'], $port); |
|---|
| 147 | $gq = new GameQ(); |
|---|
| 148 | $gq->addServers($servers); |
|---|
| 149 | $gq->setOption('timeout', 200); |
|---|
| 150 | $gq->setFilter('normalise'); |
|---|
| 151 | $gq->setFilter('sortplayers', 'gq_ping'); |
|---|
| 152 | $game = $gq->requestData(); |
|---|
| 153 | } |
|---|
| 154 | |
|---|
| 155 | if ( !$game['server']['gq_online'] ) |
|---|
| 156 | { |
|---|
| 157 | if (!isset($_GET['retry'])) |
|---|
| 158 | $retry = 0; |
|---|
| 159 | else |
|---|
| 160 | $retry = $_GET['retry']; |
|---|
| 161 | if ($retry >= 5) |
|---|
| 162 | { |
|---|
| 163 | echo "<p>".get_lang('server_running_not_responding')." |
|---|
| 164 | <a href=?m=gamemanager&p=stop&home_id=".$home_info['home_id']. |
|---|
| 165 | "&ip=".$ip."&port=". |
|---|
| 166 | $port.">".get_lang('already_running_stop_server')."</a></p>"; |
|---|
| 167 | } |
|---|
| 168 | echo "</b>".get_lang('retry')." #".$retry.".</b>"; |
|---|
| 169 | $retry++; |
|---|
| 170 | print("<p class='note'>".get_lang('starting_server')."</p>"); |
|---|
| 171 | $view->refresh("?m=gamemanager&p=restart&refresh&ip=$ip&port=$port&home_id=$home_id&mod_id=$mod_id&retry=".$retry,3); |
|---|
| 172 | return; |
|---|
| 173 | } |
|---|
| 174 | } |
|---|
| 175 | print_success(get_lang_f('server_restarted',$home_info['home_name'])); |
|---|
| 176 | $view->refresh("?m=gamemanager&p=game_monitor&home_id=".$home_info['home_id']); |
|---|
| 177 | echo "<p>".get_lang('follow_server_status')." <a href='?m=gamemanager&p=game_monitor&home_id=". |
|---|
| 178 | $home_info['home_id']."'>".get_lang('game_monitor')."</a> ".get_lang('page').".</p>"; |
|---|
| 179 | |
|---|
| 180 | return; |
|---|
| 181 | } |
|---|
| 182 | else |
|---|
| 183 | { |
|---|
| 184 | if(isset($server_xml->control_protocol_type))$control_type = $server_xml->control_protocol_type; else $control_type = ""; |
|---|
| 185 | |
|---|
| 186 | $remote_retval = $remote->remote_restart_server($home_info['home_id'], |
|---|
| 187 | $ip, $port, $server_xml->control_protocol, |
|---|
| 188 | $home_info['control_password'],$control_type); |
|---|
| 189 | |
|---|
| 190 | if ( $remote_retval === 1 ) |
|---|
| 191 | { |
|---|
| 192 | print("<p class='note'>".get_lang('restarting_server')."</p>"); |
|---|
| 193 | $view->refresh("?m=gamemanager&p=restart&refresh&ip=$ip&port=$port&home_id=$home_id&mod_id=$mod_id",3); |
|---|
| 194 | return; |
|---|
| 195 | } |
|---|
| 196 | else if ( $remote_retval === -1 ) |
|---|
| 197 | { |
|---|
| 198 | print_failure(get_lang('server_cant_start')); |
|---|
| 199 | $view->refresh("?m=gamemanager&p=game_monitor&home_id=".$home_info['home_id'],3); |
|---|
| 200 | } |
|---|
| 201 | else if ( $remote_retval === -2 ) |
|---|
| 202 | { |
|---|
| 203 | print_failure(get_lang('server_cant_stop')); |
|---|
| 204 | $view->refresh("?m=gamemanager&p=game_monitor&home_id=".$home_info['home_id'],3); |
|---|
| 205 | } |
|---|
| 206 | else |
|---|
| 207 | { |
|---|
| 208 | $screen_running = $remote->is_screen_running(OGP_SCREEN_TYPE_HOME,$home_info['home_id']); |
|---|
| 209 | if ( $screen_running == 1 ) |
|---|
| 210 | { |
|---|
| 211 | print("<p class='note'>".get_lang('restarting_server')."</p>"); |
|---|
| 212 | $view->refresh("?m=gamemanager&p=restart&refresh&ip=$ip&port=$port&home_id=$home_id&mod_id=$mod_id",3); |
|---|
| 213 | return; |
|---|
| 214 | } |
|---|
| 215 | else |
|---|
| 216 | { |
|---|
| 217 | print_failure("".get_lang('error_occured_remote_host').".$remote_retval"); |
|---|
| 218 | $view->refresh("?m=gamemanager&p=game_monitor&home_id=".$home_info['home_id'],3); |
|---|
| 219 | } |
|---|
| 220 | } |
|---|
| 221 | } |
|---|
| 222 | } |
|---|
| 223 | } |
|---|
| 224 | ?> |
|---|