Exemplo n.º 1
0
        /// <summary>
        /// Handle console commands
        /// </summary>
        /// <param name="command"></param>
        public void Command(string[] command)
        {
            if (command.Length > 0)
            {
                switch (command[0].ToLower())
                {
                case "help":
                case "?":
                    MasterServer.LogMessage("cdkeys        CD Key database functions");
                    break;

                case "cdkeys":
                    if (command.Length > 1)
                    {
                        switch (command[1].ToLower())
                        {
                        case "load":
                            CDKeys = null;
                            LoadKeyList();
                            break;
                        }
                    }
                    else
                    {
                        MasterServer.LogMessage("cdkeys load   Reload CD key information from the file");
                    }
                    break;
                }
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// Callback from the module manager when a console command is issued
        /// </summary>
        /// <param name="command"></param>
        public void Command(string[] command)
        {
            if (command.Length > 0 && command[0].Trim() != "")
            {
                switch (command[0].ToLower())
                {
                case "md5":
                    if (command.Length > 1)
                    {
                        switch (command[1].ToLower())
                        {
                        case "load":
                            Load(MasterServer.Settings.MD5DataFile);
                            break;

                        case "sync":
                            MasterServer.Instance.ServerList.SyncMD5(Get(0));
                            break;
                        }
                    }
                    else
                    {
                        MasterServer.LogMessage("md5 load      Reload MD5 database");
                        MasterServer.LogMessage("md5 sync      Force MD5 refresh on all connected servers");
                    }
                    break;

                case "help":
                case "?":
                    MasterServer.LogMessage("md5           MD5 database commands");
                    break;
                }
            }
        }
Exemplo n.º 3
0
        /// <summary>
        /// List bans matching the specified address
        /// </summary>
        /// <param name="address">Address to check</param>
        public void ListMatchingBans(string address)
        {
            IPAddress parsedAddress;

            if (IPAddress.TryParse(address, out parsedAddress))
            {
                if (IsBanned(parsedAddress))
                {
                    MasterServer.LogMessage("The address {0} matches the following IP ban rules:", parsedAddress);

                    lock (banListLock)
                    {
                        foreach (IPBanEntry banEntry in banList)
                        {
                            if (banEntry.Match(parsedAddress))
                            {
                                MasterServer.LogMessage("  {0,-16} {1}", banEntry.Address, banEntry.NetMask);
                            }
                        }
                    }
                }
                else
                {
                    MasterServer.LogMessage("The address {0} does not match any existing ban rules", parsedAddress);
                }
            }
            else
            {
                MasterServer.LogMessage("Invalid address specified.");
            }
        }
Exemplo n.º 4
0
        /// <summary>
        /// Add a new ban entry (if a matching entry does not already exist)
        /// </summary>
        /// <param name="address">Address for the new ban entry</param>
        /// <param name="mask">Net mask for the new ban entry</param>
        public void AddBan(string address, string mask)
        {
            IPAddress parsedAddress;
            IPAddress parsedMask = CIDRToMask(ref address, mask);

            if (IPAddress.TryParse(address, out parsedAddress))
            {
                if (BanExists(parsedAddress, parsedMask))
                {
                    MasterServer.LogMessage("Add ban failed, ban already exists.");
                    return;
                }
                else
                {
                    lock (banListLock)
                    {
                        banList.Add(new IPBanEntry(parsedAddress, parsedMask));
                        MasterServer.LogMessage("{0}/{1} added to ban list.", parsedAddress, parsedMask);
                        Save();
                    }
                }
            }
            else
            {
                MasterServer.LogMessage("Invalid address specified.");
                return;
            }
        }
Exemplo n.º 5
0
        /// <summary>
        /// List the current web server host names to the console
        /// </summary>
        private void ListHostnames()
        {
            MasterServer.LogMessage("Configured host names:");

            foreach (string hostName in MasterServer.Settings.WebServerListenAddresses)
            {
                MasterServer.LogMessage("  {0}", hostName);
            }
        }
Exemplo n.º 6
0
        /// <summary>
        /// List current ban entries to the console
        /// </summary>
        public void ListBans()
        {
            lock (banListLock)
            {
                MasterServer.LogMessage("Current ban list entries:");

                foreach (IPBanEntry banEntry in banList)
                {
                    MasterServer.LogMessage("  {0,-16} {1}", banEntry.Address, banEntry.NetMask);
                }
            }
        }
Exemplo n.º 7
0
        /// <summary>
        /// Handle a console command
        /// </summary>
        /// <param name="command"></param>
        public void Command(string[] command)
        {
            if (command.Length > 0)
            {
                switch (command[0].ToLower())
                {
                case "mode":
                    if (command.Length > 1)
                    {
                        Match modeMatch = Regex.Match(command[1], @"^(?<w>[0-9]+),(?<h>[0-9]+)$");

                        if (modeMatch.Success)
                        {
                            consoleWidth  = Math.Min(Math.Max(int.Parse(modeMatch.Groups["w"].Value), 80), 160);
                            consoleHeight = Math.Min(Math.Max(int.Parse(modeMatch.Groups["h"].Value), 25), 200);
                            SetupConsole();

                            MasterServer.Settings.ConsoleWidth  = consoleWidth;
                            MasterServer.Settings.ConsoleHeight = consoleHeight;
                            MasterServer.Settings.Save();
                        }
                    }
                    else
                    {
                        MasterServer.LogMessage("mode <width>,<height>");
                    }
                    break;

                case "quit":
                case "exit":
                    MasterServer.BeginStop();
                    break;

                case "restart":
                    MasterServer.BeginRestart();
                    break;

                case "?":
                case "help":
                    MasterServer.LogMessage("restart       Restart the master server");
                    MasterServer.LogMessage("mode          Console mode commands");
                    break;
                }
            }
        }
Exemplo n.º 8
0
        /// <summary>
        /// Handle a CheckOption reply packet. Displays the value on screen
        /// </summary>
        /// <param name="serverInfo"></param>
        protected virtual void HandleCheckOptionReply(ServerInfoPacket serverInfo)
        {
            if (serverInfo.ProcessCheckOptionResponse())
            {
                ConnectionLog("STM_CHECKOPTIONREPLY PKG={0} VAR={1} VALUE=\"{2}\"", serverInfo.OptionPackageName, serverInfo.OptionVariableName, serverInfo.OptionVariableValue);

                MasterServer.LogMessage("[{0}] {1} {2}=\"{3}\"", server, serverInfo.OptionPackageName, serverInfo.OptionVariableName, serverInfo.OptionVariableValue);

                CheckOptionReplyEventHandler checkOptionReply = this.CheckOptionReply;

                if (checkOptionReply != null)
                {
                    checkOptionReply(serverInfo.OptionPackageName, serverInfo.OptionVariableName, serverInfo.OptionVariableValue);
                }
            }
            else
            {
                ConnectionLog("STM_CHECKOPTIONREPLY BAD: {0}", serverInfo.Print());
            }
        }
Exemplo n.º 9
0
        /// <summary>
        /// Remove a ban entry from the list (if a matching entry is found)
        /// </summary>
        /// <param name="address">Address of the entry to remove</param>
        /// <param name="mask">Netmask of the entry to remove</param>
        public void RemoveBan(string address, string mask)
        {
            if (address.ToLower() == "all")
            {
                lock (banListLock)
                {
                    banList.Clear();
                    Save();
                    MasterServer.LogMessage("IP ban list cleared");
                }
            }
            else
            {
                IPAddress parsedAddress;
                IPAddress parsedMask = CIDRToMask(ref address, mask);

                if (IPAddress.TryParse(address, out parsedAddress))
                {
                    IPBanEntry existingEntry = FindBan(parsedAddress, parsedMask);

                    if (existingEntry.IsEmpty)
                    {
                        MasterServer.LogMessage("Add ban failed, the specified ban was not found.");
                        return;
                    }
                    else
                    {
                        lock (banListLock)
                        {
                            banList.Remove(existingEntry);
                            MasterServer.LogMessage("{0}/{1} removed from ban list.", parsedAddress, parsedMask);
                            Save();
                        }
                    }
                }
                else
                {
                    MasterServer.LogMessage("Invalid address specified.");
                }
            }
        }
Exemplo n.º 10
0
        public void Command(string[] command)
        {
            if (command.Length > 0 && command[0].Trim() != "")
            {
                switch (command[0].ToLower())
                {
                case "web":
                    if (command.Length > 1)
                    {
                        switch (command[1].ToLower())
                        {
                        case "stop":
                            EndListening();
                            break;

                        case "start":
                            BeginListening();
                            break;

                        case "restart":
                            Restart();
                            break;

                        case "port":
                            if (command.Length > 2)
                            {
                                ushort portNumber = 0;

                                if (ushort.TryParse(command[2], out portNumber))
                                {
                                    MasterServer.Settings.WebServerListenPort = portNumber;
                                    MasterServer.Settings.Save();
                                }
                                else
                                {
                                    MasterServer.LogMessage("[WEB] Invalid port number specified");
                                }
                            }
                            else
                            {
                                MasterServer.LogMessage("web port <number>");
                            }

                            MasterServer.LogMessage("[WEB] Listenport={0}", MasterServer.Settings.WebServerListenPort);
                            break;

                        case "skin":
                            if (command.Length > 2 && command[2] != "")
                            {
                                MasterServer.Settings.WebServerSkinFolder = command[2];
                                MasterServer.Settings.Save();
                            }
                            else
                            {
                                MasterServer.LogMessage("web skin <name>");
                            }

                            MasterServer.LogMessage("[WEB] Skin={0}", MasterServer.Settings.WebServerSkinFolder);

                            break;

                        case "list":
                            ListHostnames();
                            break;

                        case "add":
                            if (command.Length > 2)
                            {
                                if (!MasterServer.Settings.WebServerListenAddresses.Contains(command[2]))
                                {
                                    MasterServer.Settings.WebServerListenAddresses.Add(command[2]);
                                    MasterServer.Settings.Save();
                                    ListHostnames();
                                }
                            }
                            else
                            {
                                MasterServer.LogMessage("web add <host>");
                            }
                            break;

                        case "remove":
                            if (command.Length > 2)
                            {
                                MasterServer.Settings.WebServerListenAddresses.Remove(command[2]);
                                MasterServer.Settings.Save();
                                ListHostnames();
                            }
                            else
                            {
                                MasterServer.LogMessage("web remove <host>");
                            }
                            break;
                        }
                    }
                    else
                    {
                        MasterServer.LogMessage("web stop      Stop web server");
                        MasterServer.LogMessage("web start     Start web server");
                        MasterServer.LogMessage("web restart   Retart web server");
                        MasterServer.LogMessage("web port      Set web server port");
                        MasterServer.LogMessage("web skin      Set web server skin");
                        MasterServer.LogMessage("web list      List host names");
                        MasterServer.LogMessage("web add       Add host name");
                        MasterServer.LogMessage("web remove    Remove host name");
                    }
                    break;

                case "help":
                case "?":
                    MasterServer.LogMessage("web           Web server commands");
                    break;
                }
            }
        }
Exemplo n.º 11
0
        /// <summary>
        /// Process a console command
        /// </summary>
        /// <param name="command"></param>
        public void Command(string[] command)
        {
            if (command.Length > 0 && command[0].Trim() != "")
            {
                switch (command[0].ToLower())
                {
                case "ban":
                    if (command.Length > 1)
                    {
                        switch (command[1].ToLower())
                        {
                        case "add":
                            if (command.Length > 2)
                            {
                                AddBan(command[2], (command.Length > 3) ? command[3] : "255.255.255.255");
                            }
                            else
                            {
                                MasterServer.LogMessage("ban add <address>/<net>");
                                MasterServer.LogMessage("ban add <address> <mask>");
                            }
                            break;

                        case "remove":
                            if (command.Length > 2)
                            {
                                RemoveBan(command[2], (command.Length > 3) ? command[3] : "255.255.255.255");
                            }
                            else
                            {
                                MasterServer.LogMessage("ban remove all");
                                MasterServer.LogMessage("ban remove <address>");
                                MasterServer.LogMessage("ban remove <address>/<net>");
                                MasterServer.LogMessage("ban remove <address> <mask>");
                            }
                            break;

                        case "test":
                            if (command.Length > 2)
                            {
                                ListMatchingBans(command[2]);
                            }
                            else
                            {
                                MasterServer.LogMessage("ban test <address>");
                            }
                            break;

                        case "list":
                            ListBans();
                            break;
                        }
                    }
                    else
                    {
                        MasterServer.LogMessage("ban add       Add an IP ban");
                        MasterServer.LogMessage("ban remove    Remove an IP ban");
                        MasterServer.LogMessage("ban list      List current IP bans");
                        MasterServer.LogMessage("ban test      Check an address against the IP ban list");
                    }
                    break;

                case "help":
                case "?":
                    MasterServer.LogMessage("ban           Global IP ban commands");
                    break;
                }
            }
        }
Exemplo n.º 12
0
        /// <summary>
        /// Handle a console command
        /// </summary>
        /// <param name="command"></param>
        public void Command(string[] command)
        {
            if (command.Length > 0)
            {
                switch (command[0].ToLower())
                {
                case "telnet":
                    if (command.Length > 1)
                    {
                        switch (command[1].ToLower())
                        {
                        case "pass":
                            if (command.Length > 2)
                            {
                                MasterServer.Settings.TelnetPassword = String.Join(" ", command, 2, command.Length - 2);
                                MasterServer.Settings.Save();

                                if (MasterServer.Settings.TelnetPassword.Length < 8)
                                {
                                    MasterServer.LogMessage("[TELNET] WARNING! Telnet password is less than 8 characters!");
                                }

                                MasterServer.LogMessage("[TELNET] Telnet password updated");
                            }
                            else
                            {
                                MasterServer.LogMessage("telnet pass <password>");
                            }
                            break;

                        case "port":
                            if (command.Length > 2)
                            {
                                ushort portNumber = 0;

                                if (ushort.TryParse(command[2], out portNumber))
                                {
                                    MasterServer.Settings.TelnetPort = portNumber;
                                    MasterServer.Settings.Save();

                                    MasterServer.LogMessage("[TELNET] Port number updated, restart the master server to apply changes");
                                }
                                else
                                {
                                    MasterServer.LogMessage("[TELNET] Invalid port number specified");
                                }
                            }
                            else
                            {
                                MasterServer.LogMessage("telnet port <number>");
                            }

                            MasterServer.LogMessage("[TELNET] Port={0}", MasterServer.Settings.TelnetPort);
                            break;
                        }
                    }
                    else
                    {
                        MasterServer.LogMessage("telnet pass   Set the telnet password");
                        MasterServer.LogMessage("telnet port   Set the telnet port (requires restart)");
                    }
                    break;

                case "status":
                    ShowStatus();
                    break;

                case "tail":
                    if (MasterServer.Instance != null)
                    {
                        MasterServer.Instance.TailLog();
                    }
                    break;

                case "quit":
                case "exit":
                case "logout":
                    if (connection != null)
                    {
                        connection.Shutdown();
                    }
                    break;

                case "help":
                case "?":
                    MasterServer.LogMessage("status        Displays server status");
                    MasterServer.LogMessage("tail          Displays the log tail");
                    MasterServer.LogMessage("telnet        Telnet server commands");
                    MasterServer.LogMessage("logout        Close the telnet connection");
                    break;
                }
            }
        }