/// <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; } } }
/// <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; } } }
/// <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."); } }
/// <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; } }
/// <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); } }
/// <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); } } }
/// <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; } } }
/// <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()); } }
/// <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."); } } }
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; } } }
/// <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; } } }
/// <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; } } }