示例#1
0
        public override TcpClient CreateConnection(
            string destinationHost,
            int destinationPort,
            TcpClient tcpClient = null)
        {
            if (this._proxies.Count == 0)
            {
                throw new InvalidOperationException(Resources.InvalidOperationException_ChainProxyClient_NotProxies);
            }
            List <ProxyClient> proxyClientList;

            if (this.EnableShuffle)
            {
                proxyClientList = this._proxies.ToList <ProxyClient>();
                for (int index1 = 0; index1 < proxyClientList.Count; ++index1)
                {
                    int         index2      = ChainProxyClient.Rand.Next(proxyClientList.Count);
                    ProxyClient proxyClient = proxyClientList[index1];
                    proxyClientList[index1] = proxyClientList[index2];
                    proxyClientList[index2] = proxyClient;
                }
            }
            else
            {
                proxyClientList = this._proxies;
            }
            int       index3     = proxyClientList.Count - 1;
            TcpClient tcpClient1 = tcpClient;

            for (int index1 = 0; index1 < index3; ++index1)
            {
                tcpClient1 = proxyClientList[index1].CreateConnection(proxyClientList[index1 + 1].Host, proxyClientList[index1 + 1].Port, tcpClient1);
            }
            return(proxyClientList[index3].CreateConnection(destinationHost, destinationPort, tcpClient1));
        }
示例#2
0
 public void AddProxy(ProxyClient proxy)
 {
     if (proxy == null)
     {
         throw new ArgumentNullException(nameof(proxy));
     }
     this._proxies.Add(proxy);
 }
示例#3
0
        public static bool TryParse(string proxyAddress, out Socks4aProxyClient result)
        {
            ProxyClient result1;

            if (ProxyClient.TryParse(ProxyType.Socks4a, proxyAddress, out result1))
            {
                result = result1 as Socks4aProxyClient;
                return(true);
            }
            result = (Socks4aProxyClient)null;
            return(false);
        }
示例#4
0
        public static bool TryParse(string proxyAddress, out HttpProxyClient result)
        {
            ProxyClient result1;

            if (ProxyClient.TryParse(ProxyType.Http, proxyAddress, out result1))
            {
                result = result1 as HttpProxyClient;
                return(true);
            }
            result = (HttpProxyClient)null;
            return(false);
        }
示例#5
0
        /// <summary>
        /// Добавляет в цепочку новый прокси-клиент.
        /// </summary>
        /// <param name="proxy">Добавляемый прокси-клиент.</param>
        /// <exception cref="System.ArgumentNullException">Значение параметра <paramref name="proxy"/> равно <see langword="null"/>.</exception>
        public void AddProxy(ProxyClient proxy)
        {
            #region Проверка параметров

            if (proxy == null)
            {
                throw new ArgumentNullException("proxy");
            }

            #endregion

            _proxies.Add(proxy);
        }
示例#6
0
 /// <summary>
 /// Преобразует строку в экземпляр класса <see cref="Socks5ProxyClient"/>. Возвращает значение, указывающее, успешно ли выполнено преобразование.
 /// </summary>
 /// <param name="proxyAddress">Строка вида - хост:порт:имя_пользователя:пароль. Три последних параметра являются необязательными.</param>
 /// <param name="result">Если преобразование выполнено успешно, то содержит экземпляр класса <see cref="Socks5ProxyClient"/>, иначе <see langword="null"/>.</param>
 /// <returns>Значение <see langword="true"/>, если параметр <paramref name="proxyAddress"/> преобразован успешно, иначе <see langword="false"/>.</returns>
 public static bool TryParse(string proxyAddress, out Socks5ProxyClient result)
 {
     if (ProxyClient.TryParse(ProxyType.Socks5, proxyAddress, out ProxyClient proxy))
     {
         result = proxy as Socks5ProxyClient;
         return(true);
     }
     else
     {
         result = null;
         return(false);
     }
 }
示例#7
0
        /// <summary>
        /// Преобразует строку в экземпляр класса <see cref="HttpProxyClient"/>. Возвращает значение, указывающее, успешно ли выполнено преобразование.
        /// </summary>
        /// <param name="proxyAddress">Строка вида - хост:порт:имя_пользователя:пароль. Три последних параметра являются необязательными.</param>
        /// <param name="result">Если преобразование выполнено успешно, то содержит экземпляр класса <see cref="HttpProxyClient"/>, иначе <see langword="null"/>.</param>
        /// <returns>Значение <see langword="true"/>, если параметр <paramref name="proxyAddress"/> преобразован успешно, иначе <see langword="false"/>.</returns>
        public static bool TryParse(string proxyAddress, out HttpProxyClient result)
        {
            ProxyClient proxy;

            if (ProxyClient.TryParse(ProxyType.Http, proxyAddress, out proxy))
            {
                result = proxy as HttpProxyClient;
                return(true);
            }
            else
            {
                result = null;
                return(false);
            }
        }
示例#8
0
        /// <summary>
        /// Создаёт соединение с сервером через цепочку прокси-серверов.
        /// </summary>
        /// <param name="destinationHost">Хост сервера, с которым нужно связаться через прокси-сервер.</param>
        /// <param name="destinationPort">Порт сервера, с которым нужно связаться через прокси-сервер.</param>
        /// <param name="tcpClient">Соединение, через которое нужно работать, или значение <see langword="null"/>.</param>
        /// <returns>Соединение с сервером через цепочку прокси-серверов.</returns>
        /// <exception cref="System.InvalidOperationException">
        /// Количество прокси-серверов равно 0.
        /// -или-
        /// Значение свойства <see cref="Host"/> равно <see langword="null"/> или имеет нулевую длину.
        /// -или-
        /// Значение свойства <see cref="Port"/> меньше 1 или больше 65535.
        /// -или-
        /// Значение свойства <see cref="Username"/> имеет длину более 255 символов.
        /// -или-
        /// Значение свойства <see cref="Password"/> имеет длину более 255 символов.
        /// </exception>
        /// <exception cref="System.ArgumentNullException">Значение параметра <paramref name="destinationHost"/> равно <see langword="null"/>.</exception>
        /// <exception cref="System.ArgumentException">Значение параметра <paramref name="destinationHost"/> является пустой строкой.</exception>
        /// <exception cref="System.ArgumentOutOfRangeException">Значение параметра <paramref name="destinationPort"/> меньше 1 или больше 65535.</exception>
        /// <exception cref="xNet.Net.ProxyException">Ошибка при работе с прокси-сервером.</exception>
        public override TcpClient CreateConnection(string destinationHost, int destinationPort, TcpClient tcpClient = null)
        {
            #region Проверка состояния

            if (_proxies.Count == 0)
            {
                throw new InvalidOperationException(
                          Resources.InvalidOperationException_ChainProxyClient_NotProxies);
            }

            #endregion

            List <ProxyClient> proxies;

            if (EnableShuffle)
            {
                proxies = _proxies.ToList();

                // Перемешиваем прокси.
                for (int i = 0; i < proxies.Count; i++)
                {
                    int randI = Rand.Next(proxies.Count);

                    ProxyClient proxy = proxies[i];
                    proxies[i]     = proxies[randI];
                    proxies[randI] = proxy;
                }
            }
            else
            {
                proxies = _proxies;
            }

            int       length       = proxies.Count - 1;
            TcpClient curTcpClient = tcpClient;

            for (int i = 0; i < length; i++)
            {
                curTcpClient = proxies[i].CreateConnection(
                    proxies[i + 1].Host, proxies[i + 1].Port, curTcpClient);
            }

            curTcpClient = proxies[length].CreateConnection(
                destinationHost, destinationPort, curTcpClient);

            return(curTcpClient);
        }
示例#9
0
 public static Socks4aProxyClient Parse(string proxyAddress)
 {
     return(ProxyClient.Parse(ProxyType.Socks4a, proxyAddress) as Socks4aProxyClient);
 }
示例#10
0
 /// <summary>
 /// Инициализирует новый экземпляр класса <see cref="xNet.Net.ProxyException"/> заданным сообщением об ошибке и прокси-клиентом.
 /// </summary>
 /// <param name="message">Сообщение об ошибке с объяснением причины исключения.</param>
 /// <param name="proxyClient">Прокси-клиент, в котором произошла ошибка.</param>
 /// <param name="innerException">Исключение, вызвавшее текущие исключение, или значение <see langword="null"/>.</param>
 public ProxyException(string message, ProxyClient proxyClient, Exception innerException = null)
     : base(message, innerException)
 {
     ProxyClient = proxyClient;
 }
示例#11
0
文件: POP3.cs 项目: pchela2305/xNet
 public POP3(ProxyClient proxy = null)
 {
     this.Proxy = proxy;
 }
示例#12
0
#pragma warning disable CS0108 // Member hides inherited member; missing new keyword
        /// <summary>
        /// Преобразует строку в экземпляр класса <see cref="Socks4aProxyClient"/>.
        /// </summary>
        /// <param name="proxyAddress">Строка вида - хост:порт:имя_пользователя:пароль. Три последних параметра являются необязательными.</param>
        /// <returns>Экземпляр класса <see cref="Socks4aProxyClient"/>.</returns>
        /// <exception cref="System.ArgumentNullException">Значение параметра <paramref name="proxyAddress"/> равно <see langword="null"/>.</exception>
        /// <exception cref="System.ArgumentException">Значение параметра <paramref name="proxyAddress"/> является пустой строкой.</exception>
        /// <exception cref="System.FormatException">Формат порта является неправильным.</exception>
        public static Socks4aProxyClient Parse(string proxyAddress)
#pragma warning restore CS0108 // Member hides inherited member; missing new keyword
        {
            return(ProxyClient.Parse(ProxyType.Socks4a, proxyAddress) as Socks4aProxyClient);
        }
        /// <summary>
        /// Преобразует строку в экземпляр класса <see cref="Socks4aProxyClient"/>.
        /// </summary>
        /// <param name="proxyAddress">Строка вида - хост:порт:имя_пользователя:пароль. Три последних параметра являются необязательными.</param>
        /// <returns>Экземпляр класса <see cref="Socks4aProxyClient"/>.</returns>
        /// <exception cref="System.ArgumentNullException">Значение параметра <paramref name="proxyAddress"/> равно <see langword="null"/>.</exception>
        /// <exception cref="System.ArgumentException">Значение параметра <paramref name="proxyAddress"/> является пустой строкой.</exception>
        /// <exception cref="System.FormatException">Формат порта является неправильным.</exception>
#pragma warning disable CS0108 // Член скрывает унаследованный член: отсутствует новое ключевое слово
        public static Socks4aProxyClient Parse(string proxyAddress)
#pragma warning restore CS0108 // Член скрывает унаследованный член: отсутствует новое ключевое слово
        {
            return(ProxyClient.Parse(ProxyType.Socks4a, proxyAddress) as Socks4aProxyClient);
        }
示例#14
0
 /// <summary>
 /// Преобразует строку в экземпляр класса <see cref="HttpProxyClient"/>.
 /// </summary>
 /// <param name="proxyAddress">Строка вида - хост:порт:имя_пользователя:пароль. Три последних параметра являются необязательными.</param>
 /// <returns>Экземпляр класса <see cref="HttpProxyClient"/>.</returns>
 /// <exception cref="System.ArgumentNullException">Значение параметра <paramref name="proxyAddress"/> равно <see langword="null"/>.</exception>
 /// <exception cref="System.ArgumentException">Значение параметра <paramref name="proxyAddress"/> является пустой строкой.</exception>
 /// <exception cref="System.FormatException">Формат порта является неправильным.</exception>
 public static HttpProxyClient Parse(string proxyAddress)
 {
     return(ProxyClient.Parse(ProxyType.Http, proxyAddress) as HttpProxyClient);
 }