using System; using System.Net; using NzbDrone.Common.Http; using NzbDrone.Common.Http.Proxy; using NzbDrone.Core.Configuration; namespace NzbDrone.Core.Http { public class HttpProxySettingsProvider : IHttpProxySettingsProvider { private readonly IConfigService _configService; public HttpProxySettingsProvider(IConfigService configService) { _configService = configService; } public HttpProxySettings GetProxySettings(HttpRequest request) { if (!_configService.ProxyEnabled) { return null; } var proxySettings = new HttpProxySettings(_configService.ProxyType, _configService.ProxyHostname, _configService.ProxyPort, _configService.ProxyBypassFilter, _configService.ProxyBypassLocalAddresses, _configService.ProxyUsername, _configService.ProxyPassword); if (ShouldProxyBeBypassed(proxySettings, request.Url)) { return null; } return proxySettings; } public bool ShouldProxyBeBypassed(HttpProxySettings proxySettings, HttpUri url) { //We are utilising the WebProxy implementation here to save us having to reimplement it. This way we use Microsofts implementation var proxy = new WebProxy(proxySettings.Host + ":" + proxySettings.Port, proxySettings.BypassLocalAddress, proxySettings.SubnetFilterAsArray); return proxy.IsBypassed((Uri)url); } } }