Host process cleanup.
This commit is contained in:
parent
dd835d5503
commit
7a19b6a2b3
|
@ -1,5 +1,6 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
|
using NLog;
|
||||||
using NzbDrone.Common.EnvironmentInfo;
|
using NzbDrone.Common.EnvironmentInfo;
|
||||||
using NzbDrone.Host;
|
using NzbDrone.Host;
|
||||||
|
|
||||||
|
@ -7,6 +8,8 @@ namespace NzbDrone.Console
|
||||||
{
|
{
|
||||||
public static class ConsoleApp
|
public static class ConsoleApp
|
||||||
{
|
{
|
||||||
|
private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
|
||||||
|
|
||||||
public static void Main(string[] args)
|
public static void Main(string[] args)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
|
@ -18,7 +21,7 @@ namespace NzbDrone.Console
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
System.Console.WriteLine(e.ToString());
|
Logger.FatalException(e.Message, e);
|
||||||
System.Console.ReadLine();
|
System.Console.ReadLine();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
using System;
|
using System;
|
||||||
using NetFwTypeLib;
|
using NetFwTypeLib;
|
||||||
using NLog;
|
using NLog;
|
||||||
|
using NzbDrone.Common.EnvironmentInfo;
|
||||||
using NzbDrone.Core.Configuration;
|
using NzbDrone.Core.Configuration;
|
||||||
|
|
||||||
namespace NzbDrone.Host.AccessControl
|
namespace NzbDrone.Host.AccessControl
|
||||||
|
@ -31,9 +32,6 @@ namespace NzbDrone.Host.AccessControl
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
CloseFirewallPort();
|
|
||||||
|
|
||||||
//Open the new port
|
|
||||||
OpenFirewallPort(_configFileProvider.Port);
|
OpenFirewallPort(_configFileProvider.Port);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -91,38 +89,10 @@ namespace NzbDrone.Host.AccessControl
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void CloseFirewallPort()
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
var netFwMgrType = Type.GetTypeFromProgID("HNetCfg.FwMgr", false);
|
|
||||||
var mgr = (INetFwMgr)Activator.CreateInstance(netFwMgrType);
|
|
||||||
var ports = mgr.LocalPolicy.CurrentProfile.GloballyOpenPorts;
|
|
||||||
|
|
||||||
var portNumber = 8989;
|
|
||||||
|
|
||||||
foreach (INetFwOpenPort p in ports)
|
|
||||||
{
|
|
||||||
if (p.Name == "NzbDrone")
|
|
||||||
{
|
|
||||||
portNumber = p.Port;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (portNumber != _configFileProvider.Port)
|
|
||||||
{
|
|
||||||
ports.Remove(portNumber, NET_FW_IP_PROTOCOL_.NET_FW_IP_PROTOCOL_TCP);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
_logger.WarnException("Failed to close port in firewall for NzbDrone", ex);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private bool IsFirewallEnabled()
|
private bool IsFirewallEnabled()
|
||||||
{
|
{
|
||||||
|
if (OsInfo.IsLinux) return false;
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var netFwMgrType = Type.GetTypeFromProgID("HNetCfg.FwMgr", false);
|
var netFwMgrType = Type.GetTypeFromProgID("HNetCfg.FwMgr", false);
|
||||||
|
@ -135,7 +105,5 @@ namespace NzbDrone.Host.AccessControl
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,6 +9,7 @@ namespace NzbDrone.Host.AccessControl
|
||||||
public interface IUrlAclAdapter
|
public interface IUrlAclAdapter
|
||||||
{
|
{
|
||||||
void RefreshRegistration();
|
void RefreshRegistration();
|
||||||
|
string UrlAcl { get; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public class UrlAclAdapter : IUrlAclAdapter
|
public class UrlAclAdapter : IUrlAclAdapter
|
||||||
|
@ -24,18 +25,25 @@ namespace NzbDrone.Host.AccessControl
|
||||||
_logger = logger;
|
_logger = logger;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public string UrlAcl
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return "http://*:" + _configFileProvider.Port + "/";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void RefreshRegistration()
|
public void RefreshRegistration()
|
||||||
{
|
{
|
||||||
if (OsInfo.Version.Major < 6)
|
if (OsInfo.Version.Major < 6)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
RegisterUrl(_configFileProvider.Port);
|
RegisterUrl();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void RegisterUrl()
|
||||||
private void RegisterUrl(int portNumber)
|
|
||||||
{
|
{
|
||||||
var arguments = String.Format("http add urlacl http://*:{0}/ sddl=D:(A;;GX;;;S-1-1-0)", portNumber);
|
var arguments = String.Format("http add urlacl {0} sddl=D:(A;;GX;;;S-1-1-0)", UrlAcl);
|
||||||
RunNetsh(arguments);
|
RunNetsh(arguments);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,6 @@ using NLog;
|
||||||
using NzbDrone.Common;
|
using NzbDrone.Common;
|
||||||
using NzbDrone.Common.EnvironmentInfo;
|
using NzbDrone.Common.EnvironmentInfo;
|
||||||
using NzbDrone.Core.Configuration;
|
using NzbDrone.Core.Configuration;
|
||||||
using NzbDrone.Host.AccessControl;
|
|
||||||
using NzbDrone.Host.Owin;
|
using NzbDrone.Host.Owin;
|
||||||
|
|
||||||
namespace NzbDrone.Host
|
namespace NzbDrone.Host
|
||||||
|
@ -23,13 +22,10 @@ namespace NzbDrone.Host
|
||||||
private readonly IProcessProvider _processProvider;
|
private readonly IProcessProvider _processProvider;
|
||||||
private readonly PriorityMonitor _priorityMonitor;
|
private readonly PriorityMonitor _priorityMonitor;
|
||||||
private readonly IStartupArguments _startupArguments;
|
private readonly IStartupArguments _startupArguments;
|
||||||
private readonly IFirewallAdapter _firewallAdapter;
|
|
||||||
private readonly IUrlAclAdapter _urlAclAdapter;
|
|
||||||
private readonly Logger _logger;
|
private readonly Logger _logger;
|
||||||
|
|
||||||
public NzbDroneServiceFactory(IConfigFileProvider configFileProvider, IHostController hostController, IRuntimeInfo runtimeInfo,
|
public NzbDroneServiceFactory(IConfigFileProvider configFileProvider, IHostController hostController, IRuntimeInfo runtimeInfo,
|
||||||
IProcessProvider processProvider, PriorityMonitor priorityMonitor, IStartupArguments startupArguments,
|
IProcessProvider processProvider, PriorityMonitor priorityMonitor, IStartupArguments startupArguments, Logger logger)
|
||||||
IFirewallAdapter firewallAdapter, IUrlAclAdapter urlAclAdapter, Logger logger)
|
|
||||||
{
|
{
|
||||||
_configFileProvider = configFileProvider;
|
_configFileProvider = configFileProvider;
|
||||||
_hostController = hostController;
|
_hostController = hostController;
|
||||||
|
@ -37,8 +33,6 @@ namespace NzbDrone.Host
|
||||||
_processProvider = processProvider;
|
_processProvider = processProvider;
|
||||||
_priorityMonitor = priorityMonitor;
|
_priorityMonitor = priorityMonitor;
|
||||||
_startupArguments = startupArguments;
|
_startupArguments = startupArguments;
|
||||||
_firewallAdapter = firewallAdapter;
|
|
||||||
_urlAclAdapter = urlAclAdapter;
|
|
||||||
_logger = logger;
|
_logger = logger;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -49,11 +43,6 @@ namespace NzbDrone.Host
|
||||||
|
|
||||||
public void Start()
|
public void Start()
|
||||||
{
|
{
|
||||||
if (OsInfo.IsWindows && _runtimeInfo.IsAdmin)
|
|
||||||
{
|
|
||||||
_urlAclAdapter.RefreshRegistration();
|
|
||||||
_firewallAdapter.MakeAccessible();
|
|
||||||
}
|
|
||||||
_hostController.StartServer();
|
_hostController.StartServer();
|
||||||
|
|
||||||
if (!_startupArguments.Flags.Contains(StartupArguments.NO_BROWSER) &&
|
if (!_startupArguments.Flags.Contains(StartupArguments.NO_BROWSER) &&
|
||||||
|
|
|
@ -4,7 +4,6 @@
|
||||||
{
|
{
|
||||||
string AppUrl { get; }
|
string AppUrl { get; }
|
||||||
void StartServer();
|
void StartServer();
|
||||||
void RestartServer();
|
|
||||||
void StopServer();
|
void StopServer();
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -3,8 +3,10 @@ using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using Microsoft.Owin.Hosting;
|
using Microsoft.Owin.Hosting;
|
||||||
using NLog;
|
using NLog;
|
||||||
|
using NzbDrone.Common.EnvironmentInfo;
|
||||||
using NzbDrone.Common.Security;
|
using NzbDrone.Common.Security;
|
||||||
using NzbDrone.Core.Configuration;
|
using NzbDrone.Core.Configuration;
|
||||||
|
using NzbDrone.Host.AccessControl;
|
||||||
using NzbDrone.Host.Owin.MiddleWare;
|
using NzbDrone.Host.Owin.MiddleWare;
|
||||||
using Owin;
|
using Owin;
|
||||||
|
|
||||||
|
@ -14,13 +16,20 @@ namespace NzbDrone.Host.Owin
|
||||||
{
|
{
|
||||||
private readonly IConfigFileProvider _configFileProvider;
|
private readonly IConfigFileProvider _configFileProvider;
|
||||||
private readonly IEnumerable<IOwinMiddleWare> _owinMiddleWares;
|
private readonly IEnumerable<IOwinMiddleWare> _owinMiddleWares;
|
||||||
|
private readonly IRuntimeInfo _runtimeInfo;
|
||||||
|
private readonly IUrlAclAdapter _urlAclAdapter;
|
||||||
|
private readonly IFirewallAdapter _firewallAdapter;
|
||||||
private readonly Logger _logger;
|
private readonly Logger _logger;
|
||||||
private IDisposable _host;
|
private IDisposable _host;
|
||||||
|
|
||||||
public OwinHostController(IConfigFileProvider configFileProvider, IEnumerable<IOwinMiddleWare> owinMiddleWares, Logger logger)
|
public OwinHostController(IConfigFileProvider configFileProvider, IEnumerable<IOwinMiddleWare> owinMiddleWares,
|
||||||
|
IRuntimeInfo runtimeInfo, IUrlAclAdapter urlAclAdapter, IFirewallAdapter firewallAdapter, Logger logger)
|
||||||
{
|
{
|
||||||
_configFileProvider = configFileProvider;
|
_configFileProvider = configFileProvider;
|
||||||
_owinMiddleWares = owinMiddleWares;
|
_owinMiddleWares = owinMiddleWares;
|
||||||
|
_runtimeInfo = runtimeInfo;
|
||||||
|
_urlAclAdapter = urlAclAdapter;
|
||||||
|
_firewallAdapter = firewallAdapter;
|
||||||
_logger = logger;
|
_logger = logger;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -28,14 +37,18 @@ namespace NzbDrone.Host.Owin
|
||||||
{
|
{
|
||||||
IgnoreCertErrorPolicy.Register();
|
IgnoreCertErrorPolicy.Register();
|
||||||
|
|
||||||
var url = "http://*:" + _configFileProvider.Port;
|
if (OsInfo.IsWindows && _runtimeInfo.IsAdmin)
|
||||||
|
{
|
||||||
|
_urlAclAdapter.RefreshRegistration();
|
||||||
|
_firewallAdapter.MakeAccessible();
|
||||||
|
}
|
||||||
|
|
||||||
var options = new StartOptions(url)
|
var options = new StartOptions(_urlAclAdapter.UrlAcl)
|
||||||
{
|
{
|
||||||
ServerFactory = "Microsoft.Owin.Host.HttpListener"
|
ServerFactory = "Microsoft.Owin.Host.HttpListener"
|
||||||
};
|
};
|
||||||
|
|
||||||
_logger.Info("starting server on {0}", url);
|
_logger.Info("starting server on {0}", _urlAclAdapter.UrlAcl);
|
||||||
|
|
||||||
_host = WebApp.Start(OwinServiceProviderFactory.Create(), options, BuildApp);
|
_host = WebApp.Start(OwinServiceProviderFactory.Create(), options, BuildApp);
|
||||||
}
|
}
|
||||||
|
@ -56,14 +69,6 @@ namespace NzbDrone.Host.Owin
|
||||||
get { return string.Format("http://localhost:{0}", _configFileProvider.Port); }
|
get { return string.Format("http://localhost:{0}", _configFileProvider.Port); }
|
||||||
}
|
}
|
||||||
|
|
||||||
public void RestartServer()
|
|
||||||
{
|
|
||||||
_logger.Warn("Attempting to restart server.");
|
|
||||||
|
|
||||||
StopServer();
|
|
||||||
StartServer();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void StopServer()
|
public void StopServer()
|
||||||
{
|
{
|
||||||
if (_host == null) return;
|
if (_host == null) return;
|
||||||
|
|
|
@ -83,6 +83,10 @@
|
||||||
<SpecificVersion>False</SpecificVersion>
|
<SpecificVersion>False</SpecificVersion>
|
||||||
<HintPath>..\packages\Newtonsoft.Json.5.0.6\lib\net40\Newtonsoft.Json.dll</HintPath>
|
<HintPath>..\packages\Newtonsoft.Json.5.0.6\lib\net40\Newtonsoft.Json.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
|
<Reference Include="NLog, Version=2.0.1.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
|
||||||
|
<SpecificVersion>False</SpecificVersion>
|
||||||
|
<HintPath>..\packages\NLog.2.0.1.2\lib\net40\NLog.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
<Reference Include="Owin, Version=1.0.0.0, Culture=neutral, PublicKeyToken=f0ebd12fd5e55cc5, processorArchitecture=MSIL">
|
<Reference Include="Owin, Version=1.0.0.0, Culture=neutral, PublicKeyToken=f0ebd12fd5e55cc5, processorArchitecture=MSIL">
|
||||||
<SpecificVersion>False</SpecificVersion>
|
<SpecificVersion>False</SpecificVersion>
|
||||||
<HintPath>..\packages\Owin.1.0\lib\net40\Owin.dll</HintPath>
|
<HintPath>..\packages\Owin.1.0\lib\net40\Owin.dll</HintPath>
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
|
using NLog;
|
||||||
using NzbDrone.Common.EnvironmentInfo;
|
using NzbDrone.Common.EnvironmentInfo;
|
||||||
using NzbDrone.Host;
|
using NzbDrone.Host;
|
||||||
using NzbDrone.SysTray;
|
using NzbDrone.SysTray;
|
||||||
|
@ -8,6 +9,8 @@ namespace NzbDrone
|
||||||
{
|
{
|
||||||
public static class WindowsApp
|
public static class WindowsApp
|
||||||
{
|
{
|
||||||
|
private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
|
||||||
|
|
||||||
public static void Main(string[] args)
|
public static void Main(string[] args)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
|
@ -21,6 +24,7 @@ namespace NzbDrone
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
|
Logger.FatalException(e.Message, e);
|
||||||
var message = string.Format("{0}: {1}", e.GetType().Name, e.Message);
|
var message = string.Format("{0}: {1}", e.GetType().Name, e.Message);
|
||||||
MessageBox.Show(text: message, buttons: MessageBoxButtons.OK, icon: MessageBoxIcon.Error, caption: "Epic Fail!");
|
MessageBox.Show(text: message, buttons: MessageBoxButtons.OK, icon: MessageBoxIcon.Error, caption: "Epic Fail!");
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,5 +5,6 @@
|
||||||
<package id="Microsoft.Owin" version="1.1.0-beta2" targetFramework="net40" />
|
<package id="Microsoft.Owin" version="1.1.0-beta2" targetFramework="net40" />
|
||||||
<package id="Microsoft.Owin.Hosting" version="1.1.0-beta2" targetFramework="net40" />
|
<package id="Microsoft.Owin.Hosting" version="1.1.0-beta2" targetFramework="net40" />
|
||||||
<package id="Newtonsoft.Json" version="5.0.6" targetFramework="net40" />
|
<package id="Newtonsoft.Json" version="5.0.6" targetFramework="net40" />
|
||||||
|
<package id="NLog" version="2.0.1.2" targetFramework="net40" />
|
||||||
<package id="Owin" version="1.0" targetFramework="net40" />
|
<package id="Owin" version="1.0" targetFramework="net40" />
|
||||||
</packages>
|
</packages>
|
Loading…
Reference in New Issue