aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Server.Implementations/EntryPoints/ExternalPortForwarding.cs
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Server.Implementations/EntryPoints/ExternalPortForwarding.cs')
-rw-r--r--MediaBrowser.Server.Implementations/EntryPoints/ExternalPortForwarding.cs81
1 files changed, 50 insertions, 31 deletions
diff --git a/MediaBrowser.Server.Implementations/EntryPoints/ExternalPortForwarding.cs b/MediaBrowser.Server.Implementations/EntryPoints/ExternalPortForwarding.cs
index e32068905..5c69db3e1 100644
--- a/MediaBrowser.Server.Implementations/EntryPoints/ExternalPortForwarding.cs
+++ b/MediaBrowser.Server.Implementations/EntryPoints/ExternalPortForwarding.cs
@@ -5,6 +5,7 @@ using MediaBrowser.Model.Logging;
using Mono.Nat;
using System;
using System.Collections.Generic;
+using System.Globalization;
using System.IO;
using System.Text;
using System.Threading;
@@ -17,30 +18,44 @@ namespace MediaBrowser.Server.Implementations.EntryPoints
private readonly ILogger _logger;
private readonly IServerConfigurationManager _config;
- private bool _isStarted;
-
private Timer _timer;
+ private bool _isStarted;
public ExternalPortForwarding(ILogManager logmanager, IServerApplicationHost appHost, IServerConfigurationManager config)
{
_logger = logmanager.GetLogger("PortMapper");
_appHost = appHost;
_config = config;
+ }
- _config.ConfigurationUpdated += _config_ConfigurationUpdated;
+ private string _lastConfigIdentifier;
+ private string GetConfigIdentifier()
+ {
+ var values = new List<string>();
+ var config = _config.Configuration;
+
+ values.Add(config.EnableUPnP.ToString());
+ values.Add(config.PublicPort.ToString(CultureInfo.InvariantCulture));
+ values.Add(_appHost.HttpPort.ToString(CultureInfo.InvariantCulture));
+ values.Add(_appHost.HttpsPort.ToString(CultureInfo.InvariantCulture));
+ values.Add(config.EnableHttps.ToString());
+ values.Add(_appHost.EnableHttps.ToString());
+
+ return string.Join("|", values.ToArray());
}
void _config_ConfigurationUpdated(object sender, EventArgs e)
{
- var enable = _config.Configuration.EnableUPnP;
-
- if (enable && !_isStarted)
- {
- Reload();
- }
- else if (!enable && _isStarted)
+ _config.ConfigurationUpdated -= _config_ConfigurationUpdated;
+
+ if (!string.Equals(_lastConfigIdentifier, GetConfigIdentifier(), StringComparison.OrdinalIgnoreCase))
{
- DisposeNat();
+ if (_isStarted)
+ {
+ DisposeNat();
+ }
+
+ Run();
}
}
@@ -48,31 +63,36 @@ namespace MediaBrowser.Server.Implementations.EntryPoints
{
//NatUtility.Logger = new LogWriter(_logger);
- Reload();
+ if (_config.Configuration.EnableUPnP)
+ {
+ Start();
+ }
+
+ _config.ConfigurationUpdated -= _config_ConfigurationUpdated;
+ _config.ConfigurationUpdated += _config_ConfigurationUpdated;
}
- private void Reload()
+ private void Start()
{
- if (_config.Configuration.EnableUPnP)
- {
- _logger.Debug("Starting NAT discovery");
+ _logger.Debug("Starting NAT discovery");
- NatUtility.DeviceFound += NatUtility_DeviceFound;
+ NatUtility.DeviceFound += NatUtility_DeviceFound;
- // Mono.Nat does never rise this event. The event is there however it is useless.
- // You could remove it with no risk.
- NatUtility.DeviceLost += NatUtility_DeviceLost;
+ // Mono.Nat does never rise this event. The event is there however it is useless.
+ // You could remove it with no risk.
+ NatUtility.DeviceLost += NatUtility_DeviceLost;
- // it is hard to say what one should do when an unhandled exception is raised
- // because there isn't anything one can do about it. Probably save a log or ignored it.
- NatUtility.UnhandledException += NatUtility_UnhandledException;
- NatUtility.StartDiscovery();
+ // it is hard to say what one should do when an unhandled exception is raised
+ // because there isn't anything one can do about it. Probably save a log or ignored it.
+ NatUtility.UnhandledException += NatUtility_UnhandledException;
+ NatUtility.StartDiscovery();
- _isStarted = true;
+ _timer = new Timer(s => _createdRules = new List<string>(), null, TimeSpan.FromMinutes(5), TimeSpan.FromMinutes(5));
- _timer = new Timer(s => _createdRules = new List<string>(), null, TimeSpan.FromMinutes(10), TimeSpan.FromMinutes(10));
- }
+ _lastConfigIdentifier = GetConfigIdentifier();
+
+ _isStarted = true;
}
void NatUtility_UnhandledException(object sender, UnhandledExceptionEventArgs e)
@@ -124,9 +144,8 @@ namespace MediaBrowser.Server.Implementations.EntryPoints
{
_createdRules.Add(address);
- var info = _appHost.GetSystemInfo();
-
- CreatePortMap(device, info.HttpServerPortNumber, _config.Configuration.PublicPort);
+ CreatePortMap(device, _appHost.HttpPort, _config.Configuration.PublicPort);
+ CreatePortMap(device, _appHost.HttpsPort, _config.Configuration.PublicHttpsPort);
}
}
@@ -136,7 +155,7 @@ namespace MediaBrowser.Server.Implementations.EntryPoints
device.CreatePortMap(new Mapping(Protocol.Tcp, privatePort, publicPort)
{
- Description = "Media Browser Server"
+ Description = _appHost.Name
});
}