ProxySharp

Форк
0
/
ProxyInfo.cs 
91 строка · 1.8 Кб
1
using System;
2
using System.Net;
3
using System.Xml.Serialization;
4

5
namespace ProxySharp
6
{
7
	/// <summary>
8
	/// Information about the proxy server.
9
	/// </summary>
10
	public class ProxyInfo : IEquatable<ProxyInfo>
11
	{
12
		public string Host { get; set; } = string.Empty;
13

14
		public int Port { get; set; }
15

16
		[XmlElement(IsNullable = false)]
17
		public string UserName { get; set; }
18

19
		[XmlElement(IsNullable = false)]
20
		public string Password { get; set; }
21

22
		public int FailsCount { get; set; }
23

24
		public int UsedCount { get; set; }
25

26
		[XmlIgnore]
27
		public Exception LastException { get; set; }
28

29
		[XmlIgnore]
30
		public bool IsEmpty => string.IsNullOrEmpty(Host) || Port == 0;
31

32
		[XmlIgnore]
33
		public float Rating => UsedCount > 0
34
			? 1f - FailsCount / (float)UsedCount
35
			: 1f;
36

37
		[XmlIgnore]
38
		public bool HasCredentials => !(string.IsNullOrWhiteSpace(UserName) || string.IsNullOrWhiteSpace(Password));
39

40
		public static ProxyInfo Empty { get; } = new ProxyInfo();
41

42
		public bool Equals(ProxyInfo obj)
43
		{
44
			if (obj == null)
45
				return false;
46

47
			return string.Equals(Host, obj.Host)
48
				&& Port == obj.Port
49
				&& string.Equals(UserName, obj.UserName)
50
				&& string.Equals(Password, obj.Password);
51
		}
52

53
		public override bool Equals(object obj)
54
		{
55
			if (obj == null)
56
				return false;
57

58
			if (ReferenceEquals(this, obj))
59
				return true;
60

61
			if (obj is ProxyInfo info)
62
				return Equals(info);
63

64
			return false;
65
		}
66

67
		public override int GetHashCode()
68
		{
69
			return Host.GetHashCode() ^ Port.GetHashCode();
70
		}
71

72
		public override string ToString()
73
		{
74
			return $"{Host?.Trim()}:{Port}";
75
		}
76

77
		public virtual WebProxy ToWebProxy()
78
        {
79
			var webProxy = new WebProxy(Host, Port)
80
			{
81
				BypassProxyOnLocal = false,
82
				UseDefaultCredentials = false
83
			};
84

85
			if (HasCredentials)
86
				webProxy.Credentials = new NetworkCredential(UserName, Password);
87

88
			return webProxy;
89
		}
90
	}
91
}

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.