From 205c45198cb2486841da4f78ce14af5d4dce8e7a Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Fri, 22 Dec 2017 13:13:50 +0000 Subject: [PATCH] Remove secondary AllowPortForward setting. The global setting is fine, and this simplifies both the code and the UI. --- OpenRA.Game/Game.cs | 11 ++----- OpenRA.Game/Network/UPnP.cs | 7 +++++ OpenRA.Game/Server/Server.cs | 5 ++- OpenRA.Game/Settings.cs | 3 -- .../Widgets/Logic/ServerCreationLogic.cs | 16 ---------- mods/cnc/chrome/multiplayer-createserver.yaml | 25 --------------- .../chrome/multiplayer-createserver.yaml | 31 ++----------------- 7 files changed, 14 insertions(+), 84 deletions(-) diff --git a/OpenRA.Game/Game.cs b/OpenRA.Game/Game.cs index eb001a2cbf..67a7b7a8d5 100644 --- a/OpenRA.Game/Game.cs +++ b/OpenRA.Game/Game.cs @@ -327,13 +327,8 @@ namespace OpenRA GeoIP.Initialize(); - if (!Settings.Server.DiscoverNatDevices) - Settings.Server.AllowPortForward = false; - else - { + if (Settings.Server.DiscoverNatDevices) discoverNat = UPnP.DiscoverNatDevices(Settings.Server.NatDiscoveryTimeout); - Settings.Server.AllowPortForward = true; - } var modSearchArg = args.GetValue("Engine.ModSearchPaths", null); var modSearchPaths = modSearchArg != null ? @@ -461,7 +456,6 @@ namespace OpenRA { Console.WriteLine("NAT discovery failed: {0}", e.Message); Log.Write("nat", e.ToString()); - Settings.Server.AllowPortForward = false; } ModData.LoadScreen.StartGame(args); @@ -871,8 +865,7 @@ namespace OpenRA { Name = "Skirmish Game", Map = map, - AdvertiseOnline = false, - AllowPortForward = false + AdvertiseOnline = false }; server = new Server.Server(new IPEndPoint(IPAddress.Loopback, 0), settings, ModData, false); diff --git a/OpenRA.Game/Network/UPnP.cs b/OpenRA.Game/Network/UPnP.cs index f2593b7356..23ec0c8f88 100644 --- a/OpenRA.Game/Network/UPnP.cs +++ b/OpenRA.Game/Network/UPnP.cs @@ -20,15 +20,22 @@ using Open.Nat; namespace OpenRA.Network { + public enum UPnPStatus { Enabled, Disabled, NotSupported } + public class UPnP { static NatDevice natDevice; static Mapping mapping; + static bool initialized; public static IPAddress ExternalIP { get; private set; } + public static UPnPStatus Status { get { return initialized ? natDevice != null ? + UPnPStatus.Enabled : UPnPStatus.NotSupported : UPnPStatus.Disabled; } } public static async Task DiscoverNatDevices(int timeout) { + initialized = true; + NatDiscoverer.TraceSource.Switch.Level = SourceLevels.Verbose; var logChannel = Log.Channel("nat"); NatDiscoverer.TraceSource.Listeners.Add(new TextWriterTraceListener(logChannel.Writer)); diff --git a/OpenRA.Game/Server/Server.cs b/OpenRA.Game/Server/Server.cs index 9c5712b744..6c556a3805 100644 --- a/OpenRA.Game/Server/Server.cs +++ b/OpenRA.Game/Server/Server.cs @@ -134,8 +134,7 @@ namespace OpenRA.Server randomSeed = (int)DateTime.Now.ToBinary(); - // UPnP is only supported for servers created by the game client. - if (!dedicated && Settings.AllowPortForward) + if (UPnP.Status == UPnPStatus.Enabled) UPnP.ForwardPort(Settings.ListenPort, Settings.ExternalPort).Wait(); foreach (var trait in modData.Manifest.ServerTraits) @@ -206,7 +205,7 @@ namespace OpenRA.Server if (State == ServerState.ShuttingDown) { EndGame(); - if (!dedicated && Settings.AllowPortForward) + if (UPnP.Status == UPnPStatus.Enabled) UPnP.RemovePortForward().Wait(); break; } diff --git a/OpenRA.Game/Settings.cs b/OpenRA.Game/Settings.cs index f64f9af418..5b38325697 100644 --- a/OpenRA.Game/Settings.cs +++ b/OpenRA.Game/Settings.cs @@ -54,9 +54,6 @@ namespace OpenRA [Desc("Allow users to enable NAT discovery for external IP detection and automatic port forwarding.")] public bool DiscoverNatDevices = false; - [Desc("Set this to false to disable UPnP even if compatible devices are found.")] - public bool AllowPortForward = true; - [Desc("Time in milliseconds to search for UPnP enabled NAT devices.")] public int NatDiscoveryTimeout = 1000; diff --git a/OpenRA.Mods.Common/Widgets/Logic/ServerCreationLogic.cs b/OpenRA.Mods.Common/Widgets/Logic/ServerCreationLogic.cs index 68763d68af..940a12c1a4 100644 --- a/OpenRA.Mods.Common/Widgets/Logic/ServerCreationLogic.cs +++ b/OpenRA.Mods.Common/Widgets/Logic/ServerCreationLogic.cs @@ -22,7 +22,6 @@ namespace OpenRA.Mods.Common.Widgets.Logic Action onExit; MapPreview preview = MapCache.UnknownMap; bool advertiseOnline; - bool allowPortForward; [ObjectCreator.UseCtor] public ServerCreationLogic(Widget widget, ModData modData, Action onExit, Action openLobby) @@ -84,20 +83,6 @@ namespace OpenRA.Mods.Common.Widgets.Logic advertiseCheckbox.IsChecked = () => advertiseOnline; advertiseCheckbox.OnClick = () => advertiseOnline ^= true; - allowPortForward = Game.Settings.Server.AllowPortForward; - var checkboxUPnP = panel.Get("UPNP_CHECKBOX"); - checkboxUPnP.IsChecked = () => allowPortForward; - checkboxUPnP.OnClick = () => allowPortForward ^= true; - checkboxUPnP.IsDisabled = () => !Game.Settings.Server.AllowPortForward; - - var labelUPnP = panel.GetOrNull("UPNP_NOTICE"); - if (labelUPnP != null) - labelUPnP.IsVisible = () => !Game.Settings.Server.DiscoverNatDevices; - - var labelUPnPUnsupported = panel.GetOrNull("UPNP_UNSUPPORTED_NOTICE"); - if (labelUPnPUnsupported != null) - labelUPnPUnsupported.IsVisible = () => Game.Settings.Server.DiscoverNatDevices && !Game.Settings.Server.AllowPortForward; - var passwordField = panel.GetOrNull("PASSWORD"); if (passwordField != null) passwordField.Text = Game.Settings.Server.Password; @@ -121,7 +106,6 @@ namespace OpenRA.Mods.Common.Widgets.Logic Game.Settings.Server.ListenPort = listenPort; Game.Settings.Server.ExternalPort = externalPort; Game.Settings.Server.AdvertiseOnline = advertiseOnline; - Game.Settings.Server.AllowPortForward = allowPortForward; Game.Settings.Server.Map = preview.Uid; Game.Settings.Server.Password = password; Game.Settings.Save(); diff --git a/mods/cnc/chrome/multiplayer-createserver.yaml b/mods/cnc/chrome/multiplayer-createserver.yaml index 5d6ef78af1..fab582ee34 100644 --- a/mods/cnc/chrome/multiplayer-createserver.yaml +++ b/mods/cnc/chrome/multiplayer-createserver.yaml @@ -85,31 +85,6 @@ Container@MULTIPLAYER_CREATESERVER_PANEL: Height: 20 Font: Regular Text: Advertise Online - Checkbox@UPNP_CHECKBOX: - X: 100 - Y: 165 - Width: 300 - Height: 20 - Font: Regular - Text: Automatic port forwarding - Label@UPNP_NOTICE: - X: 130 - Y: 180 - Width: 200 - Height: 25 - Font: Tiny - Align: Left - WordWrap: True - Text: Requires Network Discovery (UPnP). Enable in Settings - Advanced. - Label@UPNP_UNSUPPORTED_NOTICE: - X: 130 - Y: 180 - Width: 220 - Height: 25 - Font: Tiny - Align: Left - WordWrap: True - Text: Your router does not seem to support UPnP. Please consult your router's manual. Container@SIDEBAR: X: PARENT_RIGHT - WIDTH Y: 30 diff --git a/mods/common/chrome/multiplayer-createserver.yaml b/mods/common/chrome/multiplayer-createserver.yaml index e0f528cb62..87ec464428 100644 --- a/mods/common/chrome/multiplayer-createserver.yaml +++ b/mods/common/chrome/multiplayer-createserver.yaml @@ -13,7 +13,7 @@ Container@MULTIPLAYER_CREATESERVER_PANEL: ScrollPanel: Y: 30 Width: 583 - Height: 279 + Height: PARENT_BOTTOM - 30 Children: Container: X: 185 @@ -85,31 +85,6 @@ Container@MULTIPLAYER_CREATESERVER_PANEL: Height: 20 Font: Regular Text: Advertise Online - Checkbox@UPNP_CHECKBOX: - X: 100 - Y: 165 - Width: 300 - Height: 20 - Font: Regular - Text: Automatic port forwarding - Label@UPNP_NOTICE: - X: 130 - Y: 180 - Width: 200 - Height: 25 - Font: Tiny - Align: Left - WordWrap: True - Text: Requires Network Discovery (UPnP). Enable in Settings - Advanced. - Label@UPNP_UNSUPPORTED_NOTICE: - X: 130 - Y: 180 - Width: 220 - Height: 25 - Font: Tiny - Align: Left - WordWrap: True - Text: Your router does not seem to support UPnP. Please consult your router's manual. Container@SIDEBAR: X: PARENT_RIGHT - WIDTH Y: 30 @@ -134,7 +109,7 @@ Container@MULTIPLAYER_CREATESERVER_PANEL: Align: Center Button@MAP_BUTTON: X: PARENT_RIGHT - WIDTH - Y: 284 - 30 + Y: 240 Width: 174 Height: 25 Text: Choose Map @@ -142,7 +117,7 @@ Container@MULTIPLAYER_CREATESERVER_PANEL: Button@CREATE_BUTTON: Key: return X: PARENT_RIGHT - WIDTH - Y: 284 + Y: PARENT_BOTTOM - 25 Width: 174 Height: 25 Text: Create