From 4db43517b77014db2607653479251b1e829b13c8 Mon Sep 17 00:00:00 2001 From: Mohammad Reza Date: Thu, 7 Apr 2022 12:44:12 +0430 Subject: [PATCH 1/3] change SetProxy method to support socks5 proxy. --- .../Sockets/CryptoExchangeWebSocketClient.cs | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/CryptoExchange.Net/Sockets/CryptoExchangeWebSocketClient.cs b/CryptoExchange.Net/Sockets/CryptoExchangeWebSocketClient.cs index 2da863d..dfce57c 100644 --- a/CryptoExchange.Net/Sockets/CryptoExchangeWebSocketClient.cs +++ b/CryptoExchange.Net/Sockets/CryptoExchangeWebSocketClient.cs @@ -212,9 +212,12 @@ namespace CryptoExchange.Net.Sockets /// public virtual void SetProxy(ApiProxy proxy) { - _socket.Options.Proxy = new WebProxy(proxy.Host, proxy.Port); - if (proxy.Login != null) - _socket.Options.Proxy.Credentials = new NetworkCredential(proxy.Login, proxy.Password); + + _socket.Options.Proxy = new WebProxy + { + Address = new Uri($"{proxy.Host}:{proxy.Port}"), + Credentials = proxy.Password == null ? null : new NetworkCredential(proxy.Login, proxy.Password) + }; } /// From 4f4d2ccff382f23bdfd8dd7d4367238f7f6a6510 Mon Sep 17 00:00:00 2001 From: Mohammad Reza Date: Wed, 13 Apr 2022 13:18:38 +0430 Subject: [PATCH 2/3] add Schema check --- CryptoExchange.Net/ExtensionMethods.cs | 17 +++++++++++++++++ .../Sockets/CryptoExchangeWebSocketClient.cs | 16 +++++++++++----- 2 files changed, 28 insertions(+), 5 deletions(-) diff --git a/CryptoExchange.Net/ExtensionMethods.cs b/CryptoExchange.Net/ExtensionMethods.cs index 8037ede..1108d2f 100644 --- a/CryptoExchange.Net/ExtensionMethods.cs +++ b/CryptoExchange.Net/ExtensionMethods.cs @@ -6,6 +6,7 @@ using System.Linq; using System.Runtime.InteropServices; using System.Security; using System.Text; +using System.Text.RegularExpressions; using System.Web; using CryptoExchange.Net.Logging; using CryptoExchange.Net.Objects; @@ -492,6 +493,22 @@ namespace CryptoExchange.Net return ub.Uri; } + /// + /// checks whether schema is provided + /// + /// + /// + public static bool IsSchemaProvided(this ApiProxy proxy) + { + var url = $"{proxy.Host}:{proxy.Port}"; + var r = new Regex(@"^(?\w+)://[^/]+?(?:\d+)?", + RegexOptions.None, TimeSpan.FromMilliseconds(150)); + var match = r.Match(url); + if (!match.Success) return false; + var proto = match.Result("${proto}"); + return !string.IsNullOrEmpty(proto); + } + } } diff --git a/CryptoExchange.Net/Sockets/CryptoExchangeWebSocketClient.cs b/CryptoExchange.Net/Sockets/CryptoExchangeWebSocketClient.cs index dfce57c..f0229f7 100644 --- a/CryptoExchange.Net/Sockets/CryptoExchangeWebSocketClient.cs +++ b/CryptoExchange.Net/Sockets/CryptoExchangeWebSocketClient.cs @@ -212,12 +212,18 @@ namespace CryptoExchange.Net.Sockets /// public virtual void SetProxy(ApiProxy proxy) { - - _socket.Options.Proxy = new WebProxy + if (!proxy.IsSchemaProvided()) { - Address = new Uri($"{proxy.Host}:{proxy.Port}"), - Credentials = proxy.Password == null ? null : new NetworkCredential(proxy.Login, proxy.Password) - }; + _socket.Options.Proxy = new WebProxy(proxy.Host, proxy.Port); + } + else + { + _socket.Options.Proxy = new WebProxy + { + Address = new Uri($"{proxy.Host}:{proxy.Port}"), + Credentials = proxy.Password == null ? null : new NetworkCredential(proxy.Login, proxy.Password) + }; + } } /// From c4f4ddcdc51de22ffad663c08ff7c109a32a3b82 Mon Sep 17 00:00:00 2001 From: Mohammad Reza Date: Wed, 13 Apr 2022 17:37:48 +0430 Subject: [PATCH 3/3] Update SetProxy --- CryptoExchange.Net/ExtensionMethods.cs | 19 ------------------- .../Sockets/CryptoExchangeWebSocketClient.cs | 17 +++++++---------- 2 files changed, 7 insertions(+), 29 deletions(-) diff --git a/CryptoExchange.Net/ExtensionMethods.cs b/CryptoExchange.Net/ExtensionMethods.cs index 1108d2f..f5600e1 100644 --- a/CryptoExchange.Net/ExtensionMethods.cs +++ b/CryptoExchange.Net/ExtensionMethods.cs @@ -1,12 +1,10 @@ using System; -using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Runtime.InteropServices; using System.Security; using System.Text; -using System.Text.RegularExpressions; using System.Web; using CryptoExchange.Net.Logging; using CryptoExchange.Net.Objects; @@ -492,23 +490,6 @@ namespace CryptoExchange.Net return ub.Uri; } - - /// - /// checks whether schema is provided - /// - /// - /// - public static bool IsSchemaProvided(this ApiProxy proxy) - { - var url = $"{proxy.Host}:{proxy.Port}"; - var r = new Regex(@"^(?\w+)://[^/]+?(?:\d+)?", - RegexOptions.None, TimeSpan.FromMilliseconds(150)); - var match = r.Match(url); - if (!match.Success) return false; - var proto = match.Result("${proto}"); - return !string.IsNullOrEmpty(proto); - } - } } diff --git a/CryptoExchange.Net/Sockets/CryptoExchangeWebSocketClient.cs b/CryptoExchange.Net/Sockets/CryptoExchangeWebSocketClient.cs index f0229f7..9371231 100644 --- a/CryptoExchange.Net/Sockets/CryptoExchangeWebSocketClient.cs +++ b/CryptoExchange.Net/Sockets/CryptoExchangeWebSocketClient.cs @@ -212,18 +212,15 @@ namespace CryptoExchange.Net.Sockets /// public virtual void SetProxy(ApiProxy proxy) { - if (!proxy.IsSchemaProvided()) - { - _socket.Options.Proxy = new WebProxy(proxy.Host, proxy.Port); - } - else - { - _socket.Options.Proxy = new WebProxy + Uri.TryCreate($"{proxy.Host}:{proxy.Port}", UriKind.Absolute, out var uri); + _socket.Options.Proxy = uri?.Scheme == null + ? _socket.Options.Proxy = new WebProxy(proxy.Host, proxy.Port) + : _socket.Options.Proxy = new WebProxy { - Address = new Uri($"{proxy.Host}:{proxy.Port}"), - Credentials = proxy.Password == null ? null : new NetworkCredential(proxy.Login, proxy.Password) + Address = uri }; - } + if (proxy.Login != null) + _socket.Options.Proxy.Credentials = new NetworkCredential(proxy.Login, proxy.Password); } ///