ProxySharp
/
ProxyInfo.cs
91 строка · 1.8 Кб
1using System;
2using System.Net;
3using System.Xml.Serialization;
4
5namespace ProxySharp
6{
7/// <summary>
8/// Information about the proxy server.
9/// </summary>
10public class ProxyInfo : IEquatable<ProxyInfo>
11{
12public string Host { get; set; } = string.Empty;
13
14public int Port { get; set; }
15
16[XmlElement(IsNullable = false)]
17public string UserName { get; set; }
18
19[XmlElement(IsNullable = false)]
20public string Password { get; set; }
21
22public int FailsCount { get; set; }
23
24public int UsedCount { get; set; }
25
26[XmlIgnore]
27public Exception LastException { get; set; }
28
29[XmlIgnore]
30public bool IsEmpty => string.IsNullOrEmpty(Host) || Port == 0;
31
32[XmlIgnore]
33public float Rating => UsedCount > 0
34? 1f - FailsCount / (float)UsedCount
35: 1f;
36
37[XmlIgnore]
38public bool HasCredentials => !(string.IsNullOrWhiteSpace(UserName) || string.IsNullOrWhiteSpace(Password));
39
40public static ProxyInfo Empty { get; } = new ProxyInfo();
41
42public bool Equals(ProxyInfo obj)
43{
44if (obj == null)
45return false;
46
47return string.Equals(Host, obj.Host)
48&& Port == obj.Port
49&& string.Equals(UserName, obj.UserName)
50&& string.Equals(Password, obj.Password);
51}
52
53public override bool Equals(object obj)
54{
55if (obj == null)
56return false;
57
58if (ReferenceEquals(this, obj))
59return true;
60
61if (obj is ProxyInfo info)
62return Equals(info);
63
64return false;
65}
66
67public override int GetHashCode()
68{
69return Host.GetHashCode() ^ Port.GetHashCode();
70}
71
72public override string ToString()
73{
74return $"{Host?.Trim()}:{Port}";
75}
76
77public virtual WebProxy ToWebProxy()
78{
79var webProxy = new WebProxy(Host, Port)
80{
81BypassProxyOnLocal = false,
82UseDefaultCredentials = false
83};
84
85if (HasCredentials)
86webProxy.Credentials = new NetworkCredential(UserName, Password);
87
88return webProxy;
89}
90}
91}