Exemplo n.º 1
0
function exec_ogp_module()
{
    global $view, $db;
    require_once 'includes/lib_remote.php';
    $ip = $_REQUEST['ip'];
    $port = $_REQUEST['port'];
    $home_id = $_REQUEST['home_id'];
    $user_id = $_SESSION['user_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);
    }
    $home_path = $home_info['home_path'] . "/";
    if ($home_info === FALSE) {
        print_failure(get_lang('no_rights_to_stop_server'));
        return;
    }
    echo "<h2>" . $home_info['home_name'] . "</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("Could not find the remote server with ID " . $home_info['remote_server_id'] . ".");
    } else {
        $remote = new OGPRemoteLibrary($rserver['agent_ip'], $rserver['agent_port'], $rserver['encryption_key']);
        if (isset($server_xml->control_protocol_type)) {
            $control_type = $server_xml->control_protocol_type;
        } else {
            $control_type = "";
        }
        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";
        }
        $remote_retval = $remote->remote_stop_server($home_id, $ip, $port, $server_xml->control_protocol, $home_info['control_password'], $control_type, $home_path);
        $db->logger(get_lang_f('server_stopped', $home_info['home_name']) . "({$ip}:{$port})");
        if ($remote_retval === 1) {
            print_success(get_lang_f("server_stopped", $home_info['home_name']));
            if (isset($home_info['ufw_status']) and $home_info['ufw_status'] == "enable") {
                $ip_ports = $db->getHomeIpPorts($home_id);
                foreach ($ip_ports as $ip_port) {
                    if ($server_xml->protocol == "gameq") {
                        $query_port = get_query_port($server_xml, $ip_port['port']);
                    } elseif ($server_xml->protocol == "lgsl") {
                        require 'protocol/lgsl/lgsl_protocol.php';
                        $get_ports = lgsl_port_conversion((string) $server_xml->lgsl_query_name, $ip_port['port'], "", "");
                        $query_port = $get_ports['1'];
                    } elseif ($server_xml->protocol == "teamspeak3") {
                        $query_port = "10011";
                    }
                    $remote->sudo_exec("ufw deny " . $ip_port['port']);
                    if (isset($query_port)) {
                        $remote->sudo_exec("ufw deny " . $query_port);
                    }
                }
            }
        } elseif ($remote_retval === 0) {
            $remote_retval = $remote->remote_stop_server($home_info['home_id'], $ip, $port, $server_xml->control_protocol, "", $control_type, $home_path);
            if ($remote_retval === 1) {
                print_success(get_lang_f("server_stopped", $home_info['home_name']));
                if (isset($home_info['ufw_status']) and $home_info['ufw_status'] == "enable") {
                    $ip_ports = $db->getHomeIpPorts($home_id);
                    foreach ($ip_ports as $ip_port) {
                        if ($server_xml->protocol == "gameq") {
                            $query_port = get_query_port($server_xml, $ip_port['port']);
                        } elseif ($server_xml->protocol == "lgsl") {
                            require 'protocol/lgsl/lgsl_protocol.php';
                            $get_ports = lgsl_port_conversion((string) $server_xml->lgsl_query_name, $ip_port['port'], "", "");
                            $query_port = $get_ports['1'];
                        } elseif ($server_xml->protocol == "teamspeak3") {
                            $query_port = "10011";
                        }
                        $remote->sudo_exec("ufw deny " . $ip_port['port']);
                        if (isset($query_port)) {
                            $remote->sudo_exec("ufw deny " . $query_port);
                        }
                    }
                }
            }
        }
        if ($remote_retval === 0) {
            print_failure(get_lang("agent_offline"));
        } elseif ($remote_retval !== 1) {
            print_failure("Error occurred on the remote host.");
        }
    }
    $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'], 3);
}
function exec_operation($action, $home_id, $mod_id, $ip, $port)
{
    global $db;
    $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']);
    if ($home_info === FALSE) {
        return FALSE;
    }
    $home_path = $home_info['home_path'] . "/";
    $server_xml = read_server_config(SERVER_CONFIG_LOCATION . "/" . $home_info['home_cfg_file']);
    if (!$server_xml) {
        return FALSE;
    }
    $rserver = $db->getRemoteServerById($home_info['remote_server_id']);
    if (empty($rserver)) {
        return FALSE;
    } else {
        if ($action != "stop") {
            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";
            }
        }
        if (isset($server_xml->control_protocol_type)) {
            $control_type = $server_xml->control_protocol_type;
        } else {
            $control_type = "";
        }
        $screen_running = $remote->is_screen_running(OGP_SCREEN_TYPE_HOME, $home_info['home_id']);
        if ($action == "stop" and $screen_running) {
            $remote_retval = $remote->remote_stop_server($home_info['home_id'], $ip, $port, $server_xml->control_protocol, $home_info['control_password'], $control_type, $home_path);
            $db->logger(get_lang_f('server_stopped', $home_info['home_name']) . "({$ip}:{$port})");
            if ($remote_retval === -1) {
                return FALSE;
            } else {
                if ($remote_retval === -2) {
                    return FALSE;
                } else {
                    $screen_running = $remote->is_screen_running(OGP_SCREEN_TYPE_HOME, $home_info['home_id']);
                    if ($screen_running == 1) {
                        return FALSE;
                    } else {
                        if (isset($home_info['ufw_status']) and $home_info['ufw_status'] == "enable") {
                            $ip_ports = $db->getHomeIpPorts($home_id);
                            foreach ($ip_ports as $ip_port) {
                                if ($server_xml->protocol == "gameq") {
                                    $query_port = get_query_port($server_xml, $ip_port['port']);
                                } elseif ($server_xml->protocol == "lgsl") {
                                    require 'protocol/lgsl/lgsl_protocol.php';
                                    $get_ports = lgsl_port_conversion((string) $server_xml->lgsl_query_name, $ip_port['port'], "", "");
                                    $query_port = $get_ports['1'];
                                } elseif ($server_xml->protocol == "teamspeak3") {
                                    $query_port = "10011";
                                }
                                $remote->sudo_exec("ufw deny " . $ip_port['port']);
                                if (isset($query_port)) {
                                    $remote->sudo_exec("ufw deny " . $query_port);
                                }
                            }
                        }
                        return TRUE;
                    }
                }
            }
        } elseif ($action == "restart" and $screen_running) {
            $start_cmd = get_sart_cmd($remote, $server_xml, $home_info, $mod_id, $ip, $port);
            $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) {
                return FALSE;
            } else {
                if ($remote_retval === -2) {
                    return FALSE;
                } else {
                    $screen_running = $remote->is_screen_running(OGP_SCREEN_TYPE_HOME, $home_info['home_id']);
                    if ($screen_running == 1) {
                        $ip_id = $db->getIpIdByIp($ip);
                        $db->delServerStatusCache($ip_id, $port);
                        return TRUE;
                    } else {
                        return FALSE;
                    }
                }
            }
        } elseif ($action == "start" and !$screen_running) {
            $start_cmd = get_sart_cmd($remote, $server_xml, $home_info, $mod_id, $ip, $port);
            $start_retval = $remote->universal_start($home_info['home_id'], $home_info['home_path'], $server_xml->server_exec_name, $server_xml->exe_location, $start_cmd, $port, $ip, $home_info['mods'][$mod_id]['cpu_affinity'], $home_info['mods'][$mod_id]['nice']);
            $db->logger(get_lang('server_started') . " (" . $home_info['home_name'] . " {$ip}:{$port})");
            if ($start_retval == AGENT_ERROR_NOT_EXECUTABLE) {
                return FALSE;
            } else {
                if ($start_retval <= 0) {
                    return FALSE;
                } else {
                    if (isset($server_home['ufw_status']) and $server_home['ufw_status'] == "enable") {
                        $ip_ports = $db->getHomeIpPorts($home_id);
                        foreach ($ip_ports as $ip_port) {
                            if ($server_xml->protocol == "gameq") {
                                $query_port = get_query_port($server_xml, $ip_port['port']);
                            } elseif ($server_xml->protocol == "lgsl") {
                                require 'protocol/lgsl/lgsl_protocol.php';
                                $get_ports = lgsl_port_conversion((string) $server_xml->lgsl_query_name, $ip_port['port'], "", "");
                                $query_port = $get_ports['1'];
                            } elseif ($server_xml->protocol == "teamspeak3") {
                                $query_port = "10011";
                            }
                            $remote->sudo_exec("ufw allow " . $ip_port['port']);
                            if (isset($query_port)) {
                                $remote->sudo_exec("ufw allow " . $query_port);
                            }
                        }
                    }
                    $ip_id = $db->getIpIdByIp($ip);
                    $db->delServerStatusCache($ip_id, $port);
                    return TRUE;
                }
            }
        }
    }
}