diff --git a/Properties/AssemblyInfo.cs b/Properties/AssemblyInfo.cs
index 9d8beac..4da78e7 100644
--- a/Properties/AssemblyInfo.cs
+++ b/Properties/AssemblyInfo.cs
@@ -33,6 +33,6 @@
// Можно задать все значения или принять номер построения и номер редакции по умолчанию,
// используя "*", как показано ниже:
// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("3.3.0.0")]
-[assembly: AssemblyFileVersion("3.3.0.0")]
+[assembly: AssemblyVersion("3.3.1.0")]
+[assembly: AssemblyFileVersion("3.3.1.0")]
[assembly: NeutralResourcesLanguageAttribute("ru")]
diff --git a/README.md b/README.md
index b6b0f0f..7234c1a 100644
--- a/README.md
+++ b/README.md
@@ -5,7 +5,7 @@ xNet - a class library for .NET Framework which includes:
* Classes for work with proxy servers: _HTTP, Socks4(a), Socks5, Chain_.
* Classes for work with *HTTP 1.0/1.1* protocol: _keep-alive, gzip, deflate, chunked, SSL, proxies and more_.
-Подробное описание на русском: http://habrahabr.ru/post/146475/
+Подробное описание на русском: http://habrahabr.ru/post/146475/
Если вы хотите поблагодарить автора: R284554004163 (WebMoney)
Example:
@@ -38,4 +38,4 @@ using (var request = new HttpRequest("http://site.com/"))
// But in this request they will be gone.
request.Post("/").None();
}
-
\ No newline at end of file
+
diff --git a/xNet/NetException.cs b/xNet/NetException.cs
index 9aa668b..cb32c94 100644
--- a/xNet/NetException.cs
+++ b/xNet/NetException.cs
@@ -7,7 +7,8 @@ namespace xNet
///
/// Исключение, которое выбрасывается, в случае возникновения ошибки при работе с сетью.
///
- public class NetException : Exception, ISerializable
+ [Serializable]
+ public class NetException : Exception
{
#region Конструкторы (открытые)
@@ -34,17 +35,5 @@ public NetException(string message, Exception innerException = null)
/// Экземпляр класса , содержащий источник сериализованного потока, связанного с новым экземпляром класса .
protected NetException(SerializationInfo serializationInfo, StreamingContext streamingContext)
: base(serializationInfo, streamingContext) { }
-
-
- ///
- /// Заполняет экземпляр данными, необходимыми для сериализации исключения .
- ///
- /// Данные о сериализации, , которые должны использоваться.
- /// Данные о сериализации, , которые должны использоваться.
- [SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.SerializationFormatter)]
- public override void GetObjectData(SerializationInfo serializationInfo, StreamingContext streamingContext)
- {
- base.GetObjectData(serializationInfo, streamingContext);
- }
}
}
\ No newline at end of file
diff --git a/xNet/~Http/Http.cs b/xNet/~Http/Http.cs
index c233791..29f87a4 100644
--- a/xNet/~Http/Http.cs
+++ b/xNet/~Http/Http.cs
@@ -83,8 +83,16 @@ public static class Http
#region Статические поля (закрытые)
- [ThreadStatic]
- private static readonly Random _rand = new Random();
+ [ThreadStatic] private static Random _rand;
+ private static Random Rand
+ {
+ get
+ {
+ if (_rand == null)
+ _rand = new Random();
+ return _rand;
+ }
+ }
#endregion
@@ -341,7 +349,7 @@ public static string IEUserAgent()
}
else
{
- switch (_rand.Next(3))
+ switch (Rand.Next(3))
{
case 0:
version = "10.0";
@@ -383,7 +391,7 @@ public static string OperaUserAgent()
#region Генерация случайной версии
- switch (_rand.Next(4))
+ switch (Rand.Next(4))
{
case 0:
version = "12.16";
@@ -424,7 +432,7 @@ public static string ChromeUserAgent()
#region Генерация случайной версии
- switch (_rand.Next(5))
+ switch (Rand.Next(5))
{
case 0:
version = "41.0.2228.0";
@@ -470,7 +478,7 @@ public static string FirefoxUserAgent()
#region Генерация случайной версии
- switch (_rand.Next(5))
+ switch (Rand.Next(5))
{
case 0:
version = "36.0";
@@ -518,7 +526,7 @@ public static string OperaMiniUserAgent()
#region Генерация случайной версии
- switch (_rand.Next(3))
+ switch (Rand.Next(3))
{
case 0:
os = "iOS";
@@ -602,7 +610,7 @@ private static string RandomWindowsVersion()
{
string windowsVersion = "Windows NT ";
- switch (_rand.Next(4))
+ switch (Rand.Next(4))
{
case 0:
windowsVersion += "5.1"; // Windows XP
@@ -621,7 +629,7 @@ private static string RandomWindowsVersion()
break;
}
- if (_rand.NextDouble() < 0.2)
+ if (Rand.NextDouble() < 0.2)
{
windowsVersion += "; WOW64"; // 64-битная версия.
}
diff --git a/xNet/~Http/HttpException.cs b/xNet/~Http/HttpException.cs
index 0c1f6fd..0141fbf 100644
--- a/xNet/~Http/HttpException.cs
+++ b/xNet/~Http/HttpException.cs
@@ -7,7 +7,8 @@ namespace xNet
///
/// Исключение, которое выбрасывается, в случае возникновения ошибки при работе с HTTP-протоколом.
///
- public sealed class HttpException : NetException, ISerializable
+ [Serializable]
+ public sealed class HttpException : NetException
{
#region Свойства (открытые)
@@ -65,7 +66,14 @@ public HttpException(string message, HttpExceptionStatus status,
/// Экземпляр класса , который содержит сведения, требуемые для сериализации нового экземпляра класса .
/// Экземпляр класса , содержащий источник сериализованного потока, связанного с новым экземпляром класса .
protected HttpException(SerializationInfo serializationInfo, StreamingContext streamingContext)
- : base(serializationInfo, streamingContext) { }
+ : base(serializationInfo, streamingContext)
+ {
+ if (serializationInfo != null)
+ {
+ Status = (HttpExceptionStatus)serializationInfo.GetInt32("Status");
+ HttpStatusCode = (HttpStatusCode)serializationInfo.GetInt32("HttpStatusCode");
+ }
+ }
///
@@ -77,6 +85,12 @@ protected HttpException(SerializationInfo serializationInfo, StreamingContext st
public override void GetObjectData(SerializationInfo serializationInfo, StreamingContext streamingContext)
{
base.GetObjectData(serializationInfo, streamingContext);
+
+ if (serializationInfo != null)
+ {
+ serializationInfo.AddValue("Status", (int)Status);
+ serializationInfo.AddValue("HttpStatusCode", (int)HttpStatusCode);
+ }
}
}
}
\ No newline at end of file
diff --git a/xNet/~Http/~Content/MultipartContent.cs b/xNet/~Http/~Content/MultipartContent.cs
index 2ac8da6..3f868eb 100644
--- a/xNet/~Http/~Content/MultipartContent.cs
+++ b/xNet/~Http/~Content/MultipartContent.cs
@@ -43,8 +43,16 @@ public bool IsFieldFile()
#region Статические поля (закрытые)
- [ThreadStatic]
- private static readonly Random _rand = new Random();
+ [ThreadStatic] private static Random _rand;
+ private static Random Rand
+ {
+ get
+ {
+ if (_rand == null)
+ _rand = new Random();
+ return _rand;
+ }
+ }
#endregion
@@ -397,18 +405,18 @@ public static string GetRandomString(int length)
for (int i = 0; i < length; ++i)
{
- switch (_rand.Next(3))
+ switch (Rand.Next(3))
{
case 0:
- strBuilder.Append((char)_rand.Next(48, 58));
+ strBuilder.Append((char)Rand.Next(48, 58));
break;
case 1:
- strBuilder.Append((char)_rand.Next(97, 123));
+ strBuilder.Append((char)Rand.Next(97, 123));
break;
case 2:
- strBuilder.Append((char)_rand.Next(65, 91));
+ strBuilder.Append((char)Rand.Next(65, 91));
break;
}
}
diff --git a/xNet/~Proxy/ChainProxyClient.cs b/xNet/~Proxy/ChainProxyClient.cs
index f9055c8..a02a480 100644
--- a/xNet/~Proxy/ChainProxyClient.cs
+++ b/xNet/~Proxy/ChainProxyClient.cs
@@ -13,8 +13,16 @@ public class ChainProxyClient : ProxyClient
{
#region Статические поля (закрытые)
- [ThreadStatic]
- private static readonly Random _rand = new Random();
+ [ThreadStatic] private static Random _rand;
+ private static Random Rand
+ {
+ get
+ {
+ if (_rand == null)
+ _rand = new Random();
+ return _rand;
+ }
+ }
#endregion
@@ -203,7 +211,7 @@ public override TcpClient CreateConnection(string destinationHost, int destinati
// Перемешиваем прокси.
for (int i = 0; i < proxies.Count; i++)
{
- int randI = _rand.Next(proxies.Count);
+ int randI = Rand.Next(proxies.Count);
ProxyClient proxy = proxies[i];
proxies[i] = proxies[randI];
diff --git a/xNet/~Proxy/HttpProxyClient.cs b/xNet/~Proxy/HttpProxyClient.cs
index 92272c5..d338e24 100644
--- a/xNet/~Proxy/HttpProxyClient.cs
+++ b/xNet/~Proxy/HttpProxyClient.cs
@@ -1,4 +1,4 @@
-using System;
+using System;
using System.IO;
using System.Net;
using System.Net.Sockets;
@@ -8,11 +8,11 @@
namespace xNet
{
///
- /// HTTP -.
+ /// Представляет клиент для HTTP прокси-сервера.
///
public class HttpProxyClient : ProxyClient
{
- #region ()
+ #region Константы (закрытые)
private const int BufferSize = 50;
private const int DefaultPort = 8080;
@@ -20,63 +20,63 @@ public class HttpProxyClient : ProxyClient
#endregion
- #region ()
+ #region Конструкторы (открытые)
///
- /// .
+ /// Инициализирует новый экземпляр класса .
///
public HttpProxyClient()
: this(null) { }
///
- /// -, - 8080.
+ /// Инициализирует новый экземпляр класса заданным хостом прокси-сервера, и устанавливает порт равным - 8080.
///
- /// -.
+ /// Хост прокси-сервера.
public HttpProxyClient(string host)
: this(host, DefaultPort) { }
///
- /// -.
+ /// Инициализирует новый экземпляр класса заданными данными о прокси-сервере.
///
- /// -.
- /// -.
+ /// Хост прокси-сервера.
+ /// Порт прокси-сервера.
public HttpProxyClient(string host, int port)
: this(host, port, string.Empty, string.Empty) { }
///
- /// -.
+ /// Инициализирует новый экземпляр класса заданными данными о прокси-сервере.
///
- /// -.
- /// -.
- /// -.
- /// -.
+ /// Хост прокси-сервера.
+ /// Порт прокси-сервера.
+ /// Имя пользователя для авторизации на прокси-сервере.
+ /// Пароль для авторизации на прокси-сервере.
public HttpProxyClient(string host, int port, string username, string password)
: base(ProxyType.Http, host, port, username, password) { }
#endregion
- #region ()
+ #region Статические методы (открытые)
///
- /// .
+ /// Преобразует строку в экземпляр класса .
///
- /// - ::_:. .
- /// .
- /// .
- /// .
- /// .
+ /// Строка вида - хост:порт:имя_пользователя:пароль. Три последних параметра являются необязательными.
+ /// Экземпляр класса .
+ /// Значение параметра равно .
+ /// Значение параметра является пустой строкой.
+ /// Формат порта является неправильным.
public static HttpProxyClient Parse(string proxyAddress)
{
return ProxyClient.Parse(ProxyType.Http, proxyAddress) as HttpProxyClient;
}
///
- /// . , , .
+ /// Преобразует строку в экземпляр класса . Возвращает значение, указывающее, успешно ли выполнено преобразование.
///
- /// - ::_:. .
- /// , , .
- /// , , .
+ /// Строка вида - хост:порт:имя_пользователя:пароль. Три последних параметра являются необязательными.
+ /// Если преобразование выполнено успешно, то содержит экземпляр класса , иначе .
+ /// Значение , если параметр преобразован успешно, иначе .
public static bool TryParse(string proxyAddress, out HttpProxyClient result)
{
ProxyClient proxy;
@@ -96,34 +96,34 @@ public static bool TryParse(string proxyAddress, out HttpProxyClient result)
#endregion
- #region ()
+ #region Методы (открытые)
///
- /// -.
+ /// Создаёт соединение с сервером через прокси-сервер.
///
- /// , -.
- /// , -.
- /// , , .
- /// -.
+ /// Хост сервера, с которым нужно связаться через прокси-сервер.
+ /// Порт сервера, с которым нужно связаться через прокси-сервер.
+ /// Соединение, через которое нужно работать, или значение .
+ /// Соединение с сервером через прокси-сервер.
///
- /// .
- /// --
- /// 1 65535.
- /// --
- /// 255 .
- /// --
- /// 255 .
+ /// Значение свойства равно или имеет нулевую длину.
+ /// -или-
+ /// Значение свойства меньше 1 или больше 65535.
+ /// -или-
+ /// Значение свойства имеет длину более 255 символов.
+ /// -или-
+ /// Значение свойства имеет длину более 255 символов.
///
- /// .
- /// .
- /// 1 65535.
- /// -.
- /// 80, 'CONNECT'.
+ /// Значение параметра равно .
+ /// Значение параметра является пустой строкой.
+ /// Значение параметра меньше 1 или больше 65535.
+ /// Ошибка при работе с прокси-сервером.
+ /// Если порт сервера неравен 80, то для подключения используется метод 'CONNECT'.
public override TcpClient CreateConnection(string destinationHost, int destinationPort, TcpClient tcpClient = null)
{
CheckState();
- #region
+ #region Проверка параметров
if (destinationHost == null)
{
@@ -187,7 +187,7 @@ public override TcpClient CreateConnection(string destinationHost, int destinati
#endregion
- #region ()
+ #region Методы (закрытые)
private string GenerateAuthorizationHeader()
{
@@ -235,7 +235,7 @@ private HttpStatusCode ReceiveResponse(NetworkStream nStream)
throw NewProxyException(Resources.ProxyException_ReceivedEmptyResponse);
}
- // . : HTTP/1.1 200 OK\r\n
+ // Выделяем строку статуса. Пример: HTTP/1.1 200 OK\r\n
string strStatus = response.Substring(" ", Http.NewLine);
int simPos = strStatus.IndexOf(' ');
diff --git a/xNet/~Proxy/ProxyException.cs b/xNet/~Proxy/ProxyException.cs
index 145370b..5d4d400 100644
--- a/xNet/~Proxy/ProxyException.cs
+++ b/xNet/~Proxy/ProxyException.cs
@@ -1,41 +1,42 @@
-using System;
+using System;
using System.Runtime.Serialization;
using System.Security.Permissions;
namespace xNet
{
///
- /// , , .
+ /// Исключение, которое выбрасывается, в случае возникновения ошибки при работе с прокси.
///
- public sealed class ProxyException : NetException, ISerializable
+ [Serializable]
+ public sealed class ProxyException : NetException
{
///
- /// -, .
+ /// Возвращает прокси-клиент, в котором произошла ошибка.
///
public ProxyClient ProxyClient { get; private set; }
- #region ()
+ #region Конструкторы (открытые)
///
- /// .
+ /// Инициализирует новый экземпляр класса .
///
public ProxyException() : this(Resources.ProxyException_Default) { }
///
- /// .
+ /// Инициализирует новый экземпляр класса заданным сообщением об ошибке.
///
- /// .
- /// , , .
+ /// Сообщение об ошибке с объяснением причины исключения.
+ /// Исключение, вызвавшее текущие исключение, или значение .
public ProxyException(string message, Exception innerException = null)
: base(message, innerException) { }
///
- /// -.
+ /// Инициализирует новый экземпляр класса заданным сообщением об ошибке и прокси-клиентом.
///
- /// .
- /// -, .
- /// , , .
+ /// Сообщение об ошибке с объяснением причины исключения.
+ /// Прокси-клиент, в котором произошла ошибка.
+ /// Исключение, вызвавшее текущие исключение, или значение .
public ProxyException(string message, ProxyClient proxyClient, Exception innerException = null)
: base(message, innerException)
{
@@ -46,23 +47,11 @@ public ProxyException(string message, ProxyClient proxyClient, Exception innerEx
///
- /// .
+ /// Инициализирует новый экземпляр класса заданными экземплярами и .
///
- /// , , .
- /// , , .
+ /// Экземпляр класса , который содержит сведения, требуемые для сериализации нового экземпляра класса .
+ /// Экземпляр класса , содержащий источник сериализованного потока, связанного с новым экземпляром класса .
protected ProxyException(SerializationInfo serializationInfo, StreamingContext streamingContext)
: base(serializationInfo, streamingContext) { }
-
-
- ///
- /// , .
- ///
- /// , , .
- /// , , .
- [SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.SerializationFormatter)]
- public override void GetObjectData(SerializationInfo serializationInfo, StreamingContext streamingContext)
- {
- base.GetObjectData(serializationInfo, streamingContext);
- }
}
}
\ No newline at end of file
diff --git a/xNet/~Proxy/Socks4ProxyClient.cs b/xNet/~Proxy/Socks4ProxyClient.cs
index 3e9628e..52bc3c1 100644
--- a/xNet/~Proxy/Socks4ProxyClient.cs
+++ b/xNet/~Proxy/Socks4ProxyClient.cs
@@ -1,4 +1,4 @@
-using System;
+using System;
using System.IO;
using System.Net;
using System.Net.Sockets;
@@ -7,11 +7,11 @@
namespace xNet
{
///
- /// Socks4 -.
+ /// Представляет клиент для Socks4 прокси-сервера.
///
public class Socks4ProxyClient : ProxyClient
{
- #region ()
+ #region Константы (защищённые)
internal protected const int DefaultPort = 1080;
@@ -26,62 +26,62 @@ public class Socks4ProxyClient : ProxyClient
#endregion
- #region ()
+ #region Конструкторы (открытые)
///
- /// .
+ /// Инициализирует новый экземпляр класса .
///
public Socks4ProxyClient()
: this(null) { }
///
- /// -, - 1080.
+ /// Инициализирует новый экземпляр класса заданным хостом прокси-сервера, и устанавливает порт равным - 1080.
///
- /// -.
+ /// Хост прокси-сервера.
public Socks4ProxyClient(string host)
: this(host, DefaultPort) { }
///
- /// -.
+ /// Инициализирует новый экземпляр класса заданными данными о прокси-сервере.
///
- /// -.
- /// -.
+ /// Хост прокси-сервера.
+ /// Порт прокси-сервера.
public Socks4ProxyClient(string host, int port)
: this(host, port, string.Empty) { }
///
- /// -.
+ /// Инициализирует новый экземпляр класса заданными данными о прокси-сервере.
///
- /// -.
- /// -.
- /// -.
+ /// Хост прокси-сервера.
+ /// Порт прокси-сервера.
+ /// Имя пользователя для авторизации на прокси-сервере.
public Socks4ProxyClient(string host, int port, string username)
: base(ProxyType.Socks4, host, port, username, null) { }
#endregion
- #region ()
+ #region Статические методы (закрытые)
///
- /// .
+ /// Преобразует строку в экземпляр класса .
///
- /// - ::_:. .
- /// .
- /// .
- /// .
- /// .
+ /// Строка вида - хост:порт:имя_пользователя:пароль. Три последних параметра являются необязательными.
+ /// Экземпляр класса .
+ /// Значение параметра равно .
+ /// Значение параметра является пустой строкой.
+ /// Формат порта является неправильным.
public static Socks4ProxyClient Parse(string proxyAddress)
{
return ProxyClient.Parse(ProxyType.Socks4, proxyAddress) as Socks4ProxyClient;
}
///
- /// . , , .
+ /// Преобразует строку в экземпляр класса . Возвращает значение, указывающее, успешно ли выполнено преобразование.
///
- /// - ::_:. .
- /// , , .
- /// , , .
+ /// Строка вида - хост:порт:имя_пользователя:пароль. Три последних параметра являются необязательными.
+ /// Если преобразование выполнено успешно, то содержит экземпляр класса , иначе .
+ /// Значение , если параметр преобразован успешно, иначе .
public static bool TryParse(string proxyAddress, out Socks4ProxyClient result)
{
ProxyClient proxy;
@@ -102,30 +102,30 @@ public static bool TryParse(string proxyAddress, out Socks4ProxyClient result)
///
- /// -.
+ /// Создаёт соединение с сервером через прокси-сервер.
///
- /// , -.
- /// , -.
- /// , , .
- /// -.
+ /// Хост сервера, с которым нужно связаться через прокси-сервер.
+ /// Порт сервера, с которым нужно связаться через прокси-сервер.
+ /// Соединение, через которое нужно работать, или значение .
+ /// Соединение с сервером через прокси-сервер.
///
- /// .
- /// --
- /// 1 65535.
- /// --
- /// 255 .
- /// --
- /// 255 .
+ /// Значение свойства равно или имеет нулевую длину.
+ /// -или-
+ /// Значение свойства меньше 1 или больше 65535.
+ /// -или-
+ /// Значение свойства имеет длину более 255 символов.
+ /// -или-
+ /// Значение свойства имеет длину более 255 символов.
///
- /// .
- /// .
- /// 1 65535.
- /// -.
+ /// Значение параметра равно .
+ /// Значение параметра является пустой строкой.
+ /// Значение параметра меньше 1 или больше 65535.
+ /// Ошибка при работе с прокси-сервером.
public override TcpClient CreateConnection(string destinationHost, int destinationPort, TcpClient tcpClient = null)
{
CheckState();
- #region
+ #region Проверка параметров
if (destinationHost == null)
{
@@ -171,7 +171,7 @@ public override TcpClient CreateConnection(string destinationHost, int destinati
}
- #region ( )
+ #region Методы (внутренние защищённые)
internal protected virtual void SendCommand(NetworkStream nStream, byte command, string destinationHost, int destinationPort)
{
@@ -206,7 +206,7 @@ internal protected virtual void SendCommand(NetworkStream nStream, byte command,
byte reply = response[1];
- // .
+ // Если запрос не выполнен.
if (reply != CommandReplyRequestGranted)
{
HandleCommandError(reply);
diff --git a/xNet/~Proxy/Socks4aProxyClient.cs b/xNet/~Proxy/Socks4aProxyClient.cs
index 6373a8c..55558bd 100644
--- a/xNet/~Proxy/Socks4aProxyClient.cs
+++ b/xNet/~Proxy/Socks4aProxyClient.cs
@@ -1,42 +1,42 @@
-using System.Net.Sockets;
+using System.Net.Sockets;
using System.Text;
namespace xNet
{
///
- /// Socks4a -.
+ /// Представляет клиент для Socks4a прокси-сервера.
///
public class Socks4aProxyClient : Socks4ProxyClient
{
- #region ()
+ #region Конструкторы (открытые)
///
- /// .
+ /// Инициализирует новый экземпляр класса .
///
public Socks4aProxyClient()
: this(null) { }
///
- /// -, - 1080.
+ /// Инициализирует новый экземпляр класса заданным хостом прокси-сервера, и устанавливает порт равным - 1080.
///
- /// -.
+ /// Хост прокси-сервера.
public Socks4aProxyClient(string host)
: this(host, DefaultPort) { }
///
- /// -.
+ /// Инициализирует новый экземпляр класса заданными данными о прокси-сервере.
///
- /// -.
- /// -.
+ /// Хост прокси-сервера.
+ /// Порт прокси-сервера.
public Socks4aProxyClient(string host, int port)
: this(host, port, string.Empty) { }
///
- /// -.
+ /// Инициализирует новый экземпляр класса заданными данными о прокси-сервере.
///
- /// -.
- /// -.
- /// -.
+ /// Хост прокси-сервера.
+ /// Порт прокси-сервера.
+ /// Имя пользователя для авторизации на прокси-сервере.
public Socks4aProxyClient(string host, int port, string username)
: base(host, port, username)
{
@@ -46,27 +46,27 @@ public Socks4aProxyClient(string host, int port, string username)
#endregion
- #region ()
+ #region Методы (открытые)
///
- /// .
+ /// Преобразует строку в экземпляр класса .
///
- /// - ::_:. .
- /// .
- /// .
- /// .
- /// .
+ /// Строка вида - хост:порт:имя_пользователя:пароль. Три последних параметра являются необязательными.
+ /// Экземпляр класса .
+ /// Значение параметра равно .
+ /// Значение параметра является пустой строкой.
+ /// Формат порта является неправильным.
public static Socks4aProxyClient Parse(string proxyAddress)
{
return ProxyClient.Parse(ProxyType.Socks4a, proxyAddress) as Socks4aProxyClient;
}
///
- /// . , , .
+ /// Преобразует строку в экземпляр класса . Возвращает значение, указывающее, успешно ли выполнено преобразование.
///
- /// - ::_:. .
- /// , , .
- /// , , .
+ /// Строка вида - хост:порт:имя_пользователя:пароль. Три последних параметра являются необязательными.
+ /// Если преобразование выполнено успешно, то содержит экземпляр класса , иначе .
+ /// Значение , если параметр преобразован успешно, иначе .
public static bool TryParse(string proxyAddress, out Socks4aProxyClient result)
{
ProxyClient proxy;
@@ -123,7 +123,7 @@ internal protected override void SendCommand(NetworkStream nStream, byte command
byte reply = response[1];
- // .
+ // Если запрос не выполнен.
if (reply != CommandReplyRequestGranted)
{
HandleCommandError(reply);
diff --git a/xNet/~Proxy/Socks5ProxyClient.cs b/xNet/~Proxy/Socks5ProxyClient.cs
index aca2d9a..8781498 100644
--- a/xNet/~Proxy/Socks5ProxyClient.cs
+++ b/xNet/~Proxy/Socks5ProxyClient.cs
@@ -1,4 +1,4 @@
-using System;
+using System;
using System.IO;
using System.Net;
using System.Net.Sockets;
@@ -7,11 +7,11 @@
namespace xNet
{
///
- /// Socks5 -.
+ /// Представляет клиент для Socks5 прокси-сервера.
///
public class Socks5ProxyClient : ProxyClient
{
- #region ()
+ #region Константы (закрытые)
private const int DefaultPort = 1080;
@@ -44,63 +44,63 @@ public class Socks5ProxyClient : ProxyClient
#endregion
- #region ()
+ #region Конструкторы (открытые)
///
- /// .
+ /// Инициализирует новый экземпляр класса .
///
public Socks5ProxyClient()
: this(null) { }
///
- /// -, - 1080.
+ /// Инициализирует новый экземпляр класса заданным хостом прокси-сервера, и устанавливает порт равным - 1080.
///
- /// -.
+ /// Хост прокси-сервера.
public Socks5ProxyClient(string host)
: this(host, DefaultPort) { }
///
- /// -.
+ /// Инициализирует новый экземпляр класса заданными данными о прокси-сервере.
///
- /// -.
- /// -.
+ /// Хост прокси-сервера.
+ /// Порт прокси-сервера.
public Socks5ProxyClient(string host, int port)
: this(host, port, string.Empty, string.Empty) { }
///
- /// -.
+ /// Инициализирует новый экземпляр класса заданными данными о прокси-сервере.
///
- /// -.
- /// -.
- /// -.
- /// -.
+ /// Хост прокси-сервера.
+ /// Порт прокси-сервера.
+ /// Имя пользователя для авторизации на прокси-сервере.
+ /// Пароль для авторизации на прокси-сервере.
public Socks5ProxyClient(string host, int port, string username, string password)
: base(ProxyType.Socks5, host, port, username, password) { }
#endregion
- #region ()
+ #region Статические методы (открытые)
///
- /// .
+ /// Преобразует строку в экземпляр класса .
///
- /// - ::_:. .
- /// .
- /// .
- /// .
- /// .
+ /// Строка вида - хост:порт:имя_пользователя:пароль. Три последних параметра являются необязательными.
+ /// Экземпляр класса .
+ /// Значение параметра равно .
+ /// Значение параметра является пустой строкой.
+ /// Формат порта является неправильным.
public static Socks5ProxyClient Parse(string proxyAddress)
{
return ProxyClient.Parse(ProxyType.Socks5, proxyAddress) as Socks5ProxyClient;
}
///
- /// . , , .
+ /// Преобразует строку в экземпляр класса . Возвращает значение, указывающее, успешно ли выполнено преобразование.
///
- /// - ::_:. .
- /// , , .
- /// , , .
+ /// Строка вида - хост:порт:имя_пользователя:пароль. Три последних параметра являются необязательными.
+ /// Если преобразование выполнено успешно, то содержит экземпляр класса , иначе .
+ /// Значение , если параметр преобразован успешно, иначе .
public static bool TryParse(string proxyAddress, out Socks5ProxyClient result)
{
ProxyClient proxy;
@@ -121,30 +121,30 @@ public static bool TryParse(string proxyAddress, out Socks5ProxyClient result)
///
- /// -.
+ /// Создаёт соединение с сервером через прокси-сервер.
///
- /// , -.
- /// , -.
- /// , , .
- /// -.
+ /// Хост сервера, с которым нужно связаться через прокси-сервер.
+ /// Порт сервера, с которым нужно связаться через прокси-сервер.
+ /// Соединение, через которое нужно работать, или значение .
+ /// Соединение с сервером через прокси-сервер.
///
- /// .
- /// --
- /// 1 65535.
- /// --
- /// 255 .
- /// --
- /// 255 .
+ /// Значение свойства равно или имеет нулевую длину.
+ /// -или-
+ /// Значение свойства меньше 1 или больше 65535.
+ /// -или-
+ /// Значение свойства имеет длину более 255 символов.
+ /// -или-
+ /// Значение свойства имеет длину более 255 символов.
///
- /// .
- /// .
- /// 1 65535.
- /// -.
+ /// Значение параметра равно .
+ /// Значение параметра является пустой строкой.
+ /// Значение параметра меньше 1 или больше 65535.
+ /// Ошибка при работе с прокси-сервером.
public override TcpClient CreateConnection(string destinationHost, int destinationPort, TcpClient tcpClient = null)
{
CheckState();
- #region
+ #region Проверка параметров
if (destinationHost == null)
{
@@ -193,7 +193,7 @@ public override TcpClient CreateConnection(string destinationHost, int destinati
}
- #region ()
+ #region Методы (закрытые)
private void InitialNegotiation(NetworkStream nStream)
{
@@ -315,7 +315,7 @@ private void SendCommand(NetworkStream nStream, byte command, string destination
byte reply = response[1];
- // .
+ // Если запрос не выполнен.
if (reply != CommandReplySucceeded)
{
HandleCommandError(reply);