diff --git a/src/NzbDrone.Common/Http/Proxy/ManagedWebProxyFactory.cs b/src/NzbDrone.Common/Http/Proxy/ManagedWebProxyFactory.cs
index ca58fedee..7a972d84f 100644
--- a/src/NzbDrone.Common/Http/Proxy/ManagedWebProxyFactory.cs
+++ b/src/NzbDrone.Common/Http/Proxy/ManagedWebProxyFactory.cs
@@ -1,9 +1,5 @@
-using System;
-using System.Linq;
+using System;
using System.Net;
-using System.Net.Sockets;
-using com.LandonKey.SocksWebProxy;
-using com.LandonKey.SocksWebProxy.Proxy;
using NzbDrone.Common.Cache;
using NzbDrone.Common.Extensions;
@@ -34,53 +30,36 @@ namespace NzbDrone.Common.Http.Proxy
private IWebProxy CreateWebProxy(HttpProxySettings proxySettings)
{
- switch (proxySettings.Type)
- {
- case ProxyType.Http:
- if (proxySettings.Username.IsNotNullOrWhiteSpace() && proxySettings.Password.IsNotNullOrWhiteSpace())
- {
- return new WebProxy(proxySettings.Host + ":" + proxySettings.Port, proxySettings.BypassLocalAddress, proxySettings.BypassListAsArray, new NetworkCredential(proxySettings.Username, proxySettings.Password));
- }
- else
- {
- return new WebProxy(proxySettings.Host + ":" + proxySettings.Port, proxySettings.BypassLocalAddress, proxySettings.BypassListAsArray);
- }
+ var uri = GetProxyUri(proxySettings);
- case ProxyType.Socks4:
- return new SocksWebProxy(new ProxyConfig(IPAddress.Loopback, GetNextFreePort(), GetProxyIpAddress(proxySettings.Host), proxySettings.Port, ProxyConfig.SocksVersion.Four, proxySettings.Username, proxySettings.Password), false);
- case ProxyType.Socks5:
- return new SocksWebProxy(new ProxyConfig(IPAddress.Loopback, GetNextFreePort(), GetProxyIpAddress(proxySettings.Host), proxySettings.Port, ProxyConfig.SocksVersion.Five, proxySettings.Username, proxySettings.Password), false);
+ if (uri == null)
+ {
+ return null;
}
- return null;
- }
-
- private static IPAddress GetProxyIpAddress(string host)
- {
- IPAddress ipAddress;
- if (!IPAddress.TryParse(host, out ipAddress))
+ if (proxySettings.Username.IsNotNullOrWhiteSpace() && proxySettings.Password.IsNotNullOrWhiteSpace())
{
- try
- {
- ipAddress = Dns.GetHostEntry(host).AddressList.OrderByDescending(a => a.AddressFamily == AddressFamily.InterNetwork).First();
- }
- catch (Exception e)
- {
- throw new InvalidOperationException(string.Format("Unable to resolve proxy hostname '{0}' to a valid IP address.", host), e);
- }
+ return new WebProxy(uri, proxySettings.BypassLocalAddress, proxySettings.BypassListAsArray, new NetworkCredential(proxySettings.Username, proxySettings.Password));
+ }
+ else
+ {
+ return new WebProxy(uri, proxySettings.BypassLocalAddress, proxySettings.BypassListAsArray);
}
-
- return ipAddress;
}
- private static int GetNextFreePort()
+ private Uri GetProxyUri(HttpProxySettings proxySettings)
{
- var listener = new TcpListener(IPAddress.Loopback, 0);
- listener.Start();
- var port = ((IPEndPoint)listener.LocalEndpoint).Port;
- listener.Stop();
-
- return port;
+ switch (proxySettings.Type)
+ {
+ case ProxyType.Http:
+ return new Uri("http://" + proxySettings.Host + ":" + proxySettings.Port);
+ case ProxyType.Socks4:
+ return new Uri("socks4://" + proxySettings.Host + ":" + proxySettings.Port);
+ case ProxyType.Socks5:
+ return new Uri("socks5://" + proxySettings.Host + ":" + proxySettings.Port);
+ default:
+ return null;
+ }
}
}
}
diff --git a/src/NzbDrone.Common/Prowlarr.Common.csproj b/src/NzbDrone.Common/Prowlarr.Common.csproj
index 87080ea74..ea03b36c4 100644
--- a/src/NzbDrone.Common/Prowlarr.Common.csproj
+++ b/src/NzbDrone.Common/Prowlarr.Common.csproj
@@ -4,7 +4,6 @@
ISMUSL
-
diff --git a/src/NzbDrone.Core/IndexerProxies/Socks4/Socks4.cs b/src/NzbDrone.Core/IndexerProxies/Socks4/Socks4.cs
index 54177a917..9fccb766a 100644
--- a/src/NzbDrone.Core/IndexerProxies/Socks4/Socks4.cs
+++ b/src/NzbDrone.Core/IndexerProxies/Socks4/Socks4.cs
@@ -1,9 +1,5 @@
using System;
-using System.Linq;
using System.Net;
-using System.Net.Sockets;
-using com.LandonKey.SocksWebProxy;
-using com.LandonKey.SocksWebProxy.Proxy;
using NLog;
using NzbDrone.Common.Cloud;
using NzbDrone.Common.Extensions;
@@ -22,13 +18,20 @@ namespace NzbDrone.Core.IndexerProxies.Socks4
public override string Name => "Socks4";
public override HttpRequest PreRequest(HttpRequest request)
{
+ var uri = GetProxyUri(Settings);
+
+ if (uri == null)
+ {
+ return null;
+ }
+
if (Settings.Username.IsNotNullOrWhiteSpace() && Settings.Password.IsNotNullOrWhiteSpace())
{
- request.Proxy = new SocksWebProxy(new ProxyConfig(IPAddress.Loopback, GetNextFreePort(), GetProxyIpAddress(Settings.Host), Settings.Port, ProxyConfig.SocksVersion.Four, Settings.Username, Settings.Password), false);
+ request.Proxy = new WebProxy(uri, false, null, new NetworkCredential(Settings.Username, Settings.Password));
}
else
{
- request.Proxy = new SocksWebProxy(new ProxyConfig(IPAddress.Loopback, GetNextFreePort(), GetProxyIpAddress(Settings.Host), Settings.Port, ProxyConfig.SocksVersion.Four), false);
+ request.Proxy = new WebProxy(uri);
}
_logger.Debug("Applying Socks4 Proxy {0} to request {1}", Name, request.Url);
@@ -36,32 +39,9 @@ namespace NzbDrone.Core.IndexerProxies.Socks4
return request;
}
- private static int GetNextFreePort()
+ private Uri GetProxyUri(Socks4Settings proxySettings)
{
- var listener = new TcpListener(IPAddress.Loopback, 0);
- listener.Start();
- var port = ((IPEndPoint)listener.LocalEndpoint).Port;
- listener.Stop();
-
- return port;
- }
-
- private static IPAddress GetProxyIpAddress(string host)
- {
- IPAddress ipAddress;
- if (!IPAddress.TryParse(host, out ipAddress))
- {
- try
- {
- ipAddress = Dns.GetHostEntry(host).AddressList.OrderByDescending(a => a.AddressFamily == AddressFamily.InterNetwork).First();
- }
- catch (Exception e)
- {
- throw new InvalidOperationException(string.Format("Unable to resolve proxy hostname '{0}' to a valid IP address.", host), e);
- }
- }
-
- return ipAddress;
+ return new Uri("socks4://" + proxySettings.Host + ":" + proxySettings.Port);
}
}
}
diff --git a/src/NzbDrone.Core/IndexerProxies/Socks5/Socks5.cs b/src/NzbDrone.Core/IndexerProxies/Socks5/Socks5.cs
index c41c00549..dfd572977 100644
--- a/src/NzbDrone.Core/IndexerProxies/Socks5/Socks5.cs
+++ b/src/NzbDrone.Core/IndexerProxies/Socks5/Socks5.cs
@@ -1,9 +1,5 @@
using System;
-using System.Linq;
using System.Net;
-using System.Net.Sockets;
-using com.LandonKey.SocksWebProxy;
-using com.LandonKey.SocksWebProxy.Proxy;
using NLog;
using NzbDrone.Common.Cloud;
using NzbDrone.Common.Extensions;
@@ -23,13 +19,20 @@ namespace NzbDrone.Core.IndexerProxies.Socks5
public override HttpRequest PreRequest(HttpRequest request)
{
+ var uri = GetProxyUri(Settings);
+
+ if (uri == null)
+ {
+ return null;
+ }
+
if (Settings.Username.IsNotNullOrWhiteSpace() && Settings.Password.IsNotNullOrWhiteSpace())
{
- request.Proxy = new SocksWebProxy(new ProxyConfig(IPAddress.Loopback, GetNextFreePort(), GetProxyIpAddress(Settings.Host), Settings.Port, ProxyConfig.SocksVersion.Five, Settings.Username, Settings.Password), false);
+ request.Proxy = new WebProxy(uri, false, null, new NetworkCredential(Settings.Username, Settings.Password));
}
else
{
- request.Proxy = new SocksWebProxy(new ProxyConfig(IPAddress.Loopback, GetNextFreePort(), GetProxyIpAddress(Settings.Host), Settings.Port, ProxyConfig.SocksVersion.Five), false);
+ request.Proxy = new WebProxy(uri);
}
_logger.Debug("Applying Socks5 Proxy {0} to request {1}", Name, request.Url);
@@ -37,32 +40,9 @@ namespace NzbDrone.Core.IndexerProxies.Socks5
return request;
}
- private static int GetNextFreePort()
+ private Uri GetProxyUri(Socks5Settings proxySettings)
{
- var listener = new TcpListener(IPAddress.Loopback, 0);
- listener.Start();
- var port = ((IPEndPoint)listener.LocalEndpoint).Port;
- listener.Stop();
-
- return port;
- }
-
- private static IPAddress GetProxyIpAddress(string host)
- {
- IPAddress ipAddress;
- if (!IPAddress.TryParse(host, out ipAddress))
- {
- try
- {
- ipAddress = Dns.GetHostEntry(host).AddressList.OrderByDescending(a => a.AddressFamily == AddressFamily.InterNetwork).First();
- }
- catch (Exception e)
- {
- throw new InvalidOperationException(string.Format("Unable to resolve proxy hostname '{0}' to a valid IP address.", host), e);
- }
- }
-
- return ipAddress;
+ return new Uri("socks5://" + proxySettings.Host + ":" + proxySettings.Port);
}
}
}