aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke <luke.pulverenti@gmail.com>2016-05-14 11:56:59 -0400
committerLuke <luke.pulverenti@gmail.com>2016-05-14 11:56:59 -0400
commit7d716dd94b5736821add5b34c35fc4536beb30ff (patch)
treea17c392da0d6f309db8fe4361868daa22bf89b53
parent187b1099bc0ce50b8b2bef8ff37fa4be6e1b3739 (diff)
parent1bb287ccff73901b48fc089bca68f510ede9e5be (diff)
Merge pull request #1679 from nfnty/ssdp
Dlna: Stop SSDP if disabled, Fixes #1578
-rw-r--r--MediaBrowser.Dlna/Main/DlnaEntryPoint.cs49
1 files changed, 46 insertions, 3 deletions
diff --git a/MediaBrowser.Dlna/Main/DlnaEntryPoint.cs b/MediaBrowser.Dlna/Main/DlnaEntryPoint.cs
index 733bda9ae..dfec8baaa 100644
--- a/MediaBrowser.Dlna/Main/DlnaEntryPoint.cs
+++ b/MediaBrowser.Dlna/Main/DlnaEntryPoint.cs
@@ -41,6 +41,7 @@ namespace MediaBrowser.Dlna.Main
private readonly IDeviceDiscovery _deviceDiscovery;
private readonly List<string> _registeredServerIds = new List<string>();
+ private bool _ssdpHandlerStarted;
private bool _dlnaServerStarted;
public DlnaEntryPoint(IServerConfigurationManager config,
@@ -78,12 +79,22 @@ namespace MediaBrowser.Dlna.Main
public void Run()
{
- StartSsdpHandler();
ReloadComponents();
+ _config.ConfigurationUpdated += _config_ConfigurationUpdated;
_config.NamedConfigurationUpdated += _config_NamedConfigurationUpdated;
}
+ private bool _lastEnableUPnP;
+ void _config_ConfigurationUpdated(object sender, EventArgs e)
+ {
+ if (_lastEnableUPnP != _config.Configuration.EnableUPnP)
+ {
+ ReloadComponents();
+ }
+ _lastEnableUPnP = _config.Configuration.EnableUPnP;
+ }
+
void _config_NamedConfigurationUpdated(object sender, ConfigurationUpdateEventArgs e)
{
if (string.Equals(e.Key, "dlna", StringComparison.OrdinalIgnoreCase))
@@ -94,10 +105,24 @@ namespace MediaBrowser.Dlna.Main
private void ReloadComponents()
{
- var isServerStarted = _dlnaServerStarted;
-
var options = _config.GetDlnaConfiguration();
+ if (!options.EnableServer && !options.EnablePlayTo && !_config.Configuration.EnableUPnP)
+ {
+ if (_ssdpHandlerStarted)
+ {
+ StopSsdpHandler();
+ }
+ return;
+ }
+
+ if (!_ssdpHandlerStarted)
+ {
+ StartSsdpHandler();
+ }
+
+ var isServerStarted = _dlnaServerStarted;
+
if (options.EnableServer && !isServerStarted)
{
StartDlnaServer();
@@ -126,6 +151,8 @@ namespace MediaBrowser.Dlna.Main
_ssdpHandler.Start();
((DeviceDiscovery)_deviceDiscovery).Start(_ssdpHandler);
+
+ _ssdpHandlerStarted = true;
}
catch (Exception ex)
{
@@ -133,6 +160,22 @@ namespace MediaBrowser.Dlna.Main
}
}
+ private void StopSsdpHandler()
+ {
+ try
+ {
+ ((DeviceDiscovery)_deviceDiscovery).Dispose();
+
+ _ssdpHandler.Dispose();
+
+ _ssdpHandlerStarted = false;
+ }
+ catch (Exception ex)
+ {
+ _logger.ErrorException("Error stopping ssdp handlers", ex);
+ }
+ }
+
public void StartDlnaServer()
{
try