diff --git a/~Proxy/ProxyClient.cs b/~Proxy/ProxyClient.cs index 15eb713..1181dc4 100644 --- a/~Proxy/ProxyClient.cs +++ b/~Proxy/ProxyClient.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.Net.Sockets; using System.Security; using System.Text; @@ -257,7 +258,18 @@ internal protected ProxyClient(ProxyType proxyType, string address, int port, st #endregion - #region Статические методы (открытые) + #region Статические методы + /// + /// Служит для преобразования строковых прокси к объекту ProxyClient. + /// + private static readonly Dictionary ProxyProtocol = new Dictionary { + { "http", ProxyType.Http }, + { "https", ProxyType.Http }, + { "socks4", ProxyType.Socks4 }, + { "socks4a", ProxyType.Socks4a }, + { "socks5", ProxyType.Socks5 }, + { "socks", ProxyType.Socks5 } + }; /// /// Преобразует строку в экземпляр класса прокси-клиента, унаследованный от . @@ -334,6 +346,23 @@ public static ProxyClient Parse(ProxyType proxyType, string proxyAddress) return ProxyHelper.CreateProxyClient(proxyType, host, port, username, password); } + /// + /// Строка вида - протокол://хост:порт:имя_пользователя:пароль. Три последних параметра являются необязательными. + /// Экземпляр класса прокси-клиента, унаследованный от . + public static ProxyClient Parse(string protoProxyAddress) + { + var proxy = protoProxyAddress.Split(new[] { "://" }, StringSplitOptions.RemoveEmptyEntries); + if (proxy.Length < 2) + return null; + + string proto = proxy[0]; + if (!ProxyProtocol.ContainsKey(proto)) + return null; + + var proxyType = ProxyProtocol[proto]; + return Parse(proxyType, proxy[1]); + } + /// /// Преобразует строку в экземпляр класса прокси-клиента, унаследованный от . Возвращает значение, указывающее, успешно ли выполнено преобразование. /// @@ -392,6 +421,22 @@ public static bool TryParse(ProxyType proxyType, string proxyAddress, out ProxyC return true; } + /// + /// Строка вида - протокол://хост:порт:имя_пользователя:пароль. Три последних параметра являются необязательными. + /// Значение , если параметр преобразован успешно, иначе . + public static bool TryParse(string protoProxyAddress, out ProxyClient result) + { + var proxy = protoProxyAddress.Split(new[] {"://"}, StringSplitOptions.RemoveEmptyEntries); + if (proxy.Length < 2 || !ProxyProtocol.ContainsKey(proxy[0])) + { + result = null; + return false; + } + + var proxyType = ProxyProtocol[proxy[0]]; + return TryParse(proxyType, proxy[1], out result); + } + #endregion