881 lines
40 KiB
C#
881 lines
40 KiB
C#
using System;
|
|
using System.Collections;
|
|
using System.Collections.Specialized;
|
|
using System.Globalization;
|
|
using System.IO;
|
|
using System.Net.Security;
|
|
using System.Security.Cryptography.X509Certificates;
|
|
using System.Text.RegularExpressions;
|
|
using Mono.Security.Protocol.Tls;
|
|
using Mono.Security.X509;
|
|
using Mono.Security.X509.Extensions;
|
|
|
|
namespace System.Net
|
|
{
|
|
/// <summary>Manages the collection of <see cref="T:System.Net.ServicePoint" /> objects.</summary>
|
|
// Token: 0x02000254 RID: 596
|
|
public class ServicePointManager
|
|
{
|
|
// Token: 0x06001544 RID: 5444 RVA: 0x00043E94 File Offset: 0x00042094
|
|
private ServicePointManager()
|
|
{
|
|
}
|
|
|
|
/// <summary>Gets or sets policy for server certificates.</summary>
|
|
/// <returns>An object that implements the <see cref="T:System.Net.ICertificatePolicy" /> interface.</returns>
|
|
/// <PermissionSet>
|
|
/// <IPermission class="System.Security.Permissions.SecurityPermission, mscorlib, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Unrestricted="true" />
|
|
/// </PermissionSet>
|
|
// Token: 0x170006F6 RID: 1782
|
|
// (get) Token: 0x06001546 RID: 5446 RVA: 0x00043EEC File Offset: 0x000420EC
|
|
// (set) Token: 0x06001547 RID: 5447 RVA: 0x00043EF4 File Offset: 0x000420F4
|
|
[Obsolete("Use ServerCertificateValidationCallback instead", false)]
|
|
public static ICertificatePolicy CertificatePolicy
|
|
{
|
|
get
|
|
{
|
|
return ServicePointManager.policy;
|
|
}
|
|
set
|
|
{
|
|
ServicePointManager.policy = value;
|
|
}
|
|
}
|
|
|
|
/// <summary>Gets or sets a <see cref="T:System.Boolean" /> value that indicates whether the certificate is checked against the certificate authority revocation list.</summary>
|
|
/// <returns>true if the certificate revocation list is checked; otherwise, false.</returns>
|
|
/// <PermissionSet>
|
|
/// <IPermission class="System.Security.Permissions.FileIOPermission, mscorlib, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Unrestricted="true" />
|
|
/// <IPermission class="System.Security.Permissions.SecurityPermission, mscorlib, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Unrestricted="true" />
|
|
/// </PermissionSet>
|
|
// Token: 0x170006F7 RID: 1783
|
|
// (get) Token: 0x06001548 RID: 5448 RVA: 0x00043EFC File Offset: 0x000420FC
|
|
// (set) Token: 0x06001549 RID: 5449 RVA: 0x00043F04 File Offset: 0x00042104
|
|
[global::System.MonoTODO("CRL checks not implemented")]
|
|
public static bool CheckCertificateRevocationList
|
|
{
|
|
get
|
|
{
|
|
return ServicePointManager._checkCRL;
|
|
}
|
|
set
|
|
{
|
|
ServicePointManager._checkCRL = false;
|
|
}
|
|
}
|
|
|
|
/// <summary>Gets or sets the maximum number of concurrent connections allowed by a <see cref="T:System.Net.ServicePoint" /> object.</summary>
|
|
/// <returns>The maximum number of concurrent connections allowed by a <see cref="T:System.Net.ServicePoint" /> object. The default value is 2.</returns>
|
|
/// <exception cref="T:System.ArgumentOutOfRangeException">
|
|
/// <see cref="P:System.Net.ServicePointManager.DefaultConnectionLimit" /> is less than or equal to 0. </exception>
|
|
/// <PermissionSet>
|
|
/// <IPermission class="System.Security.Permissions.FileIOPermission, mscorlib, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Unrestricted="true" />
|
|
/// <IPermission class="System.Security.Permissions.SecurityPermission, mscorlib, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Flags="ControlEvidence" />
|
|
/// <IPermission class="System.Net.WebPermission, System, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Unrestricted="true" />
|
|
/// </PermissionSet>
|
|
// Token: 0x170006F8 RID: 1784
|
|
// (get) Token: 0x0600154A RID: 5450 RVA: 0x00043F0C File Offset: 0x0004210C
|
|
// (set) Token: 0x0600154B RID: 5451 RVA: 0x00043F14 File Offset: 0x00042114
|
|
public static int DefaultConnectionLimit
|
|
{
|
|
get
|
|
{
|
|
return ServicePointManager.defaultConnectionLimit;
|
|
}
|
|
set
|
|
{
|
|
if (value <= 0)
|
|
{
|
|
throw new ArgumentOutOfRangeException("value");
|
|
}
|
|
ServicePointManager.defaultConnectionLimit = value;
|
|
}
|
|
}
|
|
|
|
// Token: 0x0600154C RID: 5452 RVA: 0x00043F30 File Offset: 0x00042130
|
|
private static Exception GetMustImplement()
|
|
{
|
|
return new NotImplementedException();
|
|
}
|
|
|
|
/// <summary>Gets or sets a value that indicates how long a Domain Name Service (DNS) resolution is considered valid.</summary>
|
|
/// <returns>The time-out value, in milliseconds. A value of -1 indicates an infinite time-out period. The default value is 120,000 milliseconds (two minutes).</returns>
|
|
// Token: 0x170006F9 RID: 1785
|
|
// (get) Token: 0x0600154D RID: 5453 RVA: 0x00043F38 File Offset: 0x00042138
|
|
// (set) Token: 0x0600154E RID: 5454 RVA: 0x00043F40 File Offset: 0x00042140
|
|
[global::System.MonoTODO]
|
|
public static int DnsRefreshTimeout
|
|
{
|
|
get
|
|
{
|
|
throw ServicePointManager.GetMustImplement();
|
|
}
|
|
set
|
|
{
|
|
throw ServicePointManager.GetMustImplement();
|
|
}
|
|
}
|
|
|
|
/// <summary>Gets or sets a value that indicates whether a Domain Name Service (DNS) resolution rotates among the applicable Internet Protocol (IP) addresses.</summary>
|
|
/// <returns>false if a DNS resolution always returns the first IP address for a particular host; otherwise true. The default is false.</returns>
|
|
// Token: 0x170006FA RID: 1786
|
|
// (get) Token: 0x0600154F RID: 5455 RVA: 0x00043F48 File Offset: 0x00042148
|
|
// (set) Token: 0x06001550 RID: 5456 RVA: 0x00043F50 File Offset: 0x00042150
|
|
[global::System.MonoTODO]
|
|
public static bool EnableDnsRoundRobin
|
|
{
|
|
get
|
|
{
|
|
throw ServicePointManager.GetMustImplement();
|
|
}
|
|
set
|
|
{
|
|
throw ServicePointManager.GetMustImplement();
|
|
}
|
|
}
|
|
|
|
/// <summary>Gets or sets the maximum idle time of a <see cref="T:System.Net.ServicePoint" /> object.</summary>
|
|
/// <returns>The maximum idle time, in milliseconds, of a <see cref="T:System.Net.ServicePoint" /> object. The default value is 100,000 milliseconds (100 seconds).</returns>
|
|
/// <exception cref="T:System.ArgumentOutOfRangeException">
|
|
/// <see cref="P:System.Net.ServicePointManager.MaxServicePointIdleTime" /> is less than <see cref="F:System.Threading.Timeout.Infinite" /> or greater than <see cref="F:System.Int32.MaxValue" />. </exception>
|
|
/// <PermissionSet>
|
|
/// <IPermission class="System.Net.WebPermission, System, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Unrestricted="true" />
|
|
/// </PermissionSet>
|
|
// Token: 0x170006FB RID: 1787
|
|
// (get) Token: 0x06001551 RID: 5457 RVA: 0x00043F58 File Offset: 0x00042158
|
|
// (set) Token: 0x06001552 RID: 5458 RVA: 0x00043F60 File Offset: 0x00042160
|
|
public static int MaxServicePointIdleTime
|
|
{
|
|
get
|
|
{
|
|
return ServicePointManager.maxServicePointIdleTime;
|
|
}
|
|
set
|
|
{
|
|
if (value < -2 || value > 2147483647)
|
|
{
|
|
throw new ArgumentOutOfRangeException("value");
|
|
}
|
|
ServicePointManager.maxServicePointIdleTime = value;
|
|
}
|
|
}
|
|
|
|
/// <summary>Gets or sets the maximum number of <see cref="T:System.Net.ServicePoint" /> objects to maintain at any time.</summary>
|
|
/// <returns>The maximum number of <see cref="T:System.Net.ServicePoint" /> objects to maintain. The default value is 0, which means there is no limit to the number of <see cref="T:System.Net.ServicePoint" /> objects.</returns>
|
|
/// <exception cref="T:System.ArgumentOutOfRangeException">
|
|
/// <see cref="P:System.Net.ServicePointManager.MaxServicePoints" /> is less than 0 or greater than <see cref="F:System.Int32.MaxValue" />. </exception>
|
|
/// <PermissionSet>
|
|
/// <IPermission class="System.Net.WebPermission, System, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Unrestricted="true" />
|
|
/// </PermissionSet>
|
|
// Token: 0x170006FC RID: 1788
|
|
// (get) Token: 0x06001553 RID: 5459 RVA: 0x00043F94 File Offset: 0x00042194
|
|
// (set) Token: 0x06001554 RID: 5460 RVA: 0x00043F9C File Offset: 0x0004219C
|
|
public static int MaxServicePoints
|
|
{
|
|
get
|
|
{
|
|
return ServicePointManager.maxServicePoints;
|
|
}
|
|
set
|
|
{
|
|
if (value < 0)
|
|
{
|
|
throw new ArgumentException("value");
|
|
}
|
|
ServicePointManager.maxServicePoints = value;
|
|
ServicePointManager.RecycleServicePoints();
|
|
}
|
|
}
|
|
|
|
/// <summary>Gets or sets the security protocol used by the <see cref="T:System.Net.ServicePoint" /> objects managed by the <see cref="T:System.Net.ServicePointManager" /> object.</summary>
|
|
/// <returns>One of the values defined in the <see cref="T:System.Net.SecurityProtocolType" /> enumeration.</returns>
|
|
/// <exception cref="T:System.NotSupportedException">The value specified to set the property is not a valid <see cref="T:System.Net.SecurityProtocolType" /> enumeration value. </exception>
|
|
// Token: 0x170006FD RID: 1789
|
|
// (get) Token: 0x06001555 RID: 5461 RVA: 0x00043FBC File Offset: 0x000421BC
|
|
// (set) Token: 0x06001556 RID: 5462 RVA: 0x00043FC4 File Offset: 0x000421C4
|
|
public static SecurityProtocolType SecurityProtocol
|
|
{
|
|
get
|
|
{
|
|
return ServicePointManager._securityProtocol;
|
|
}
|
|
set
|
|
{
|
|
ServicePointManager._securityProtocol = value;
|
|
}
|
|
}
|
|
|
|
/// <summary>Gets or sets the callback to validate a server certificate.</summary>
|
|
/// <returns>A <see cref="T:System.Net.Security.RemoteCertificateValidationCallback" /> The default value is null.</returns>
|
|
// Token: 0x170006FE RID: 1790
|
|
// (get) Token: 0x06001557 RID: 5463 RVA: 0x00043FCC File Offset: 0x000421CC
|
|
// (set) Token: 0x06001558 RID: 5464 RVA: 0x00043FD4 File Offset: 0x000421D4
|
|
public static global::System.Net.Security.RemoteCertificateValidationCallback ServerCertificateValidationCallback
|
|
{
|
|
get
|
|
{
|
|
return ServicePointManager.server_cert_cb;
|
|
}
|
|
set
|
|
{
|
|
ServicePointManager.server_cert_cb = value;
|
|
}
|
|
}
|
|
|
|
/// <summary>Gets or sets a <see cref="T:System.Boolean" /> value that determines whether 100-Continue behavior is used.</summary>
|
|
/// <returns>true to enable 100-Continue behavior. The default value is true.</returns>
|
|
/// <PermissionSet>
|
|
/// <IPermission class="System.Security.Permissions.FileIOPermission, mscorlib, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Unrestricted="true" />
|
|
/// <IPermission class="System.Security.Permissions.SecurityPermission, mscorlib, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Flags="ControlEvidence" />
|
|
/// </PermissionSet>
|
|
// Token: 0x170006FF RID: 1791
|
|
// (get) Token: 0x06001559 RID: 5465 RVA: 0x00043FDC File Offset: 0x000421DC
|
|
// (set) Token: 0x0600155A RID: 5466 RVA: 0x00043FE4 File Offset: 0x000421E4
|
|
public static bool Expect100Continue
|
|
{
|
|
get
|
|
{
|
|
return ServicePointManager.expectContinue;
|
|
}
|
|
set
|
|
{
|
|
ServicePointManager.expectContinue = value;
|
|
}
|
|
}
|
|
|
|
/// <summary>Determines whether the Nagle algorithm is used by the service points managed by this <see cref="T:System.Net.ServicePointManager" /> object.</summary>
|
|
/// <returns>true to use the Nagle algorithm; otherwise, false. The default value is true.</returns>
|
|
/// <PermissionSet>
|
|
/// <IPermission class="System.Security.Permissions.FileIOPermission, mscorlib, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Unrestricted="true" />
|
|
/// <IPermission class="System.Security.Permissions.SecurityPermission, mscorlib, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Flags="ControlEvidence" />
|
|
/// </PermissionSet>
|
|
// Token: 0x17000700 RID: 1792
|
|
// (get) Token: 0x0600155B RID: 5467 RVA: 0x00043FEC File Offset: 0x000421EC
|
|
// (set) Token: 0x0600155C RID: 5468 RVA: 0x00043FF4 File Offset: 0x000421F4
|
|
public static bool UseNagleAlgorithm
|
|
{
|
|
get
|
|
{
|
|
return ServicePointManager.useNagle;
|
|
}
|
|
set
|
|
{
|
|
ServicePointManager.useNagle = value;
|
|
}
|
|
}
|
|
|
|
/// <summary>Finds an existing <see cref="T:System.Net.ServicePoint" /> object or creates a new <see cref="T:System.Net.ServicePoint" /> object to manage communications with the specified <see cref="T:System.Uri" /> object.</summary>
|
|
/// <returns>The <see cref="T:System.Net.ServicePoint" /> object that manages communications for the request.</returns>
|
|
/// <param name="address">The <see cref="T:System.Uri" /> object of the Internet resource to contact. </param>
|
|
/// <exception cref="T:System.ArgumentNullException">
|
|
/// <paramref name="address" /> is null. </exception>
|
|
/// <exception cref="T:System.InvalidOperationException">The maximum number of <see cref="T:System.Net.ServicePoint" /> objects defined in <see cref="P:System.Net.ServicePointManager.MaxServicePoints" /> has been reached. </exception>
|
|
/// <PermissionSet>
|
|
/// <IPermission class="System.Security.Permissions.FileIOPermission, mscorlib, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Unrestricted="true" />
|
|
/// <IPermission class="System.Security.Permissions.SecurityPermission, mscorlib, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Flags="ControlEvidence" />
|
|
/// </PermissionSet>
|
|
// Token: 0x0600155D RID: 5469 RVA: 0x00043FFC File Offset: 0x000421FC
|
|
public static ServicePoint FindServicePoint(global::System.Uri address)
|
|
{
|
|
return ServicePointManager.FindServicePoint(address, GlobalProxySelection.Select);
|
|
}
|
|
|
|
/// <summary>Finds an existing <see cref="T:System.Net.ServicePoint" /> object or creates a new <see cref="T:System.Net.ServicePoint" /> object to manage communications with the specified Uniform Resource Identifier (URI).</summary>
|
|
/// <returns>The <see cref="T:System.Net.ServicePoint" /> object that manages communications for the request.</returns>
|
|
/// <param name="uriString">The URI of the Internet resource to be contacted. </param>
|
|
/// <param name="proxy">The proxy data for this request. </param>
|
|
/// <exception cref="T:System.UriFormatException">The URI specified in <paramref name="uriString" /> is invalid. </exception>
|
|
/// <exception cref="T:System.InvalidOperationException">The maximum number of <see cref="T:System.Net.ServicePoint" /> objects defined in <see cref="P:System.Net.ServicePointManager.MaxServicePoints" /> has been reached. </exception>
|
|
/// <PermissionSet>
|
|
/// <IPermission class="System.Security.Permissions.FileIOPermission, mscorlib, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Unrestricted="true" />
|
|
/// <IPermission class="System.Security.Permissions.SecurityPermission, mscorlib, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Flags="ControlEvidence" />
|
|
/// </PermissionSet>
|
|
// Token: 0x0600155E RID: 5470 RVA: 0x0004400C File Offset: 0x0004220C
|
|
public static ServicePoint FindServicePoint(string uriString, IWebProxy proxy)
|
|
{
|
|
return ServicePointManager.FindServicePoint(new global::System.Uri(uriString), proxy);
|
|
}
|
|
|
|
/// <summary>Finds an existing <see cref="T:System.Net.ServicePoint" /> object or creates a new <see cref="T:System.Net.ServicePoint" /> object to manage communications with the specified <see cref="T:System.Uri" /> object.</summary>
|
|
/// <returns>The <see cref="T:System.Net.ServicePoint" /> object that manages communications for the request.</returns>
|
|
/// <param name="address">A <see cref="T:System.Uri" /> object that contains the address of the Internet resource to contact. </param>
|
|
/// <param name="proxy">The proxy data for this request. </param>
|
|
/// <exception cref="T:System.ArgumentNullException">
|
|
/// <paramref name="address" /> is null. </exception>
|
|
/// <exception cref="T:System.InvalidOperationException">The maximum number of <see cref="T:System.Net.ServicePoint" /> objects defined in <see cref="P:System.Net.ServicePointManager.MaxServicePoints" /> has been reached. </exception>
|
|
/// <PermissionSet>
|
|
/// <IPermission class="System.Security.Permissions.FileIOPermission, mscorlib, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Unrestricted="true" />
|
|
/// <IPermission class="System.Security.Permissions.SecurityPermission, mscorlib, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Flags="ControlEvidence" />
|
|
/// </PermissionSet>
|
|
// Token: 0x0600155F RID: 5471 RVA: 0x0004401C File Offset: 0x0004221C
|
|
public static ServicePoint FindServicePoint(global::System.Uri address, IWebProxy proxy)
|
|
{
|
|
if (address == null)
|
|
{
|
|
throw new ArgumentNullException("address");
|
|
}
|
|
ServicePointManager.RecycleServicePoints();
|
|
bool flag = false;
|
|
bool flag2 = false;
|
|
if (proxy != null && !proxy.IsBypassed(address))
|
|
{
|
|
flag = true;
|
|
bool flag3 = address.Scheme == "https";
|
|
address = proxy.GetProxy(address);
|
|
if (address.Scheme != "http" && !flag3)
|
|
{
|
|
throw new NotSupportedException("Proxy scheme not supported.");
|
|
}
|
|
if (flag3 && address.Scheme == "http")
|
|
{
|
|
flag2 = true;
|
|
}
|
|
}
|
|
address = new global::System.Uri(address.Scheme + "://" + address.Authority);
|
|
ServicePoint servicePoint = null;
|
|
global::System.Collections.Specialized.HybridDictionary hybridDictionary = ServicePointManager.servicePoints;
|
|
lock (hybridDictionary)
|
|
{
|
|
ServicePointManager.SPKey spkey = new ServicePointManager.SPKey(address, flag2);
|
|
servicePoint = ServicePointManager.servicePoints[spkey] as ServicePoint;
|
|
if (servicePoint != null)
|
|
{
|
|
return servicePoint;
|
|
}
|
|
if (ServicePointManager.maxServicePoints > 0 && ServicePointManager.servicePoints.Count >= ServicePointManager.maxServicePoints)
|
|
{
|
|
throw new InvalidOperationException("maximum number of service points reached");
|
|
}
|
|
string text = address.ToString();
|
|
int num = ServicePointManager.defaultConnectionLimit;
|
|
servicePoint = new ServicePoint(address, num, ServicePointManager.maxServicePointIdleTime);
|
|
servicePoint.Expect100Continue = ServicePointManager.expectContinue;
|
|
servicePoint.UseNagleAlgorithm = ServicePointManager.useNagle;
|
|
servicePoint.UsesProxy = flag;
|
|
servicePoint.UseConnect = flag2;
|
|
ServicePointManager.servicePoints.Add(spkey, servicePoint);
|
|
}
|
|
return servicePoint;
|
|
}
|
|
|
|
// Token: 0x06001560 RID: 5472 RVA: 0x000441B8 File Offset: 0x000423B8
|
|
internal static void RecycleServicePoints()
|
|
{
|
|
ArrayList arrayList = new ArrayList();
|
|
global::System.Collections.Specialized.HybridDictionary hybridDictionary = ServicePointManager.servicePoints;
|
|
lock (hybridDictionary)
|
|
{
|
|
IDictionaryEnumerator dictionaryEnumerator = ServicePointManager.servicePoints.GetEnumerator();
|
|
while (dictionaryEnumerator.MoveNext())
|
|
{
|
|
ServicePoint servicePoint = (ServicePoint)dictionaryEnumerator.Value;
|
|
if (servicePoint.AvailableForRecycling)
|
|
{
|
|
arrayList.Add(dictionaryEnumerator.Key);
|
|
}
|
|
}
|
|
for (int i = 0; i < arrayList.Count; i++)
|
|
{
|
|
ServicePointManager.servicePoints.Remove(arrayList[i]);
|
|
}
|
|
if (ServicePointManager.maxServicePoints != 0 && ServicePointManager.servicePoints.Count > ServicePointManager.maxServicePoints)
|
|
{
|
|
SortedList sortedList = new SortedList(ServicePointManager.servicePoints.Count);
|
|
dictionaryEnumerator = ServicePointManager.servicePoints.GetEnumerator();
|
|
while (dictionaryEnumerator.MoveNext())
|
|
{
|
|
ServicePoint servicePoint2 = (ServicePoint)dictionaryEnumerator.Value;
|
|
if (servicePoint2.CurrentConnections == 0)
|
|
{
|
|
while (sortedList.ContainsKey(servicePoint2.IdleSince))
|
|
{
|
|
servicePoint2.IdleSince = servicePoint2.IdleSince.AddMilliseconds(1.0);
|
|
}
|
|
sortedList.Add(servicePoint2.IdleSince, servicePoint2.Address);
|
|
}
|
|
}
|
|
int num = 0;
|
|
while (num < sortedList.Count && ServicePointManager.servicePoints.Count > ServicePointManager.maxServicePoints)
|
|
{
|
|
ServicePointManager.servicePoints.Remove(sortedList.GetByIndex(num));
|
|
num++;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/// <summary>The default number of non-persistent connections (4) allowed on a <see cref="T:System.Net.ServicePoint" /> object connected to an HTTP/1.0 or later server. This field is constant but is no longer used in the .NET Framework 2.0.</summary>
|
|
// Token: 0x040011BF RID: 4543
|
|
public const int DefaultNonPersistentConnectionLimit = 4;
|
|
|
|
/// <summary>The default number of persistent connections (2) allowed on a <see cref="T:System.Net.ServicePoint" /> object connected to an HTTP/1.1 or later server. This field is constant and is used to initialize the <see cref="P:System.Net.ServicePointManager.DefaultConnectionLimit" /> property if the value of the <see cref="P:System.Net.ServicePointManager.DefaultConnectionLimit" /> property has not been set either directly or through configuration.</summary>
|
|
// Token: 0x040011C0 RID: 4544
|
|
public const int DefaultPersistentConnectionLimit = 2;
|
|
|
|
// Token: 0x040011C1 RID: 4545
|
|
private static global::System.Collections.Specialized.HybridDictionary servicePoints = new global::System.Collections.Specialized.HybridDictionary();
|
|
|
|
// Token: 0x040011C2 RID: 4546
|
|
private static ICertificatePolicy policy = new DefaultCertificatePolicy();
|
|
|
|
// Token: 0x040011C3 RID: 4547
|
|
private static int defaultConnectionLimit = 2;
|
|
|
|
// Token: 0x040011C4 RID: 4548
|
|
private static int maxServicePointIdleTime = 900000;
|
|
|
|
// Token: 0x040011C5 RID: 4549
|
|
private static int maxServicePoints = 0;
|
|
|
|
// Token: 0x040011C6 RID: 4550
|
|
private static bool _checkCRL = false;
|
|
|
|
// Token: 0x040011C7 RID: 4551
|
|
private static SecurityProtocolType _securityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls;
|
|
|
|
// Token: 0x040011C8 RID: 4552
|
|
private static bool expectContinue = true;
|
|
|
|
// Token: 0x040011C9 RID: 4553
|
|
private static bool useNagle;
|
|
|
|
// Token: 0x040011CA RID: 4554
|
|
private static global::System.Net.Security.RemoteCertificateValidationCallback server_cert_cb;
|
|
|
|
// Token: 0x02000255 RID: 597
|
|
private class SPKey
|
|
{
|
|
// Token: 0x06001561 RID: 5473 RVA: 0x00044370 File Offset: 0x00042570
|
|
public SPKey(global::System.Uri uri, bool use_connect)
|
|
{
|
|
this.uri = uri;
|
|
this.use_connect = use_connect;
|
|
}
|
|
|
|
// Token: 0x17000701 RID: 1793
|
|
// (get) Token: 0x06001562 RID: 5474 RVA: 0x00044388 File Offset: 0x00042588
|
|
public global::System.Uri Uri
|
|
{
|
|
get
|
|
{
|
|
return this.uri;
|
|
}
|
|
}
|
|
|
|
// Token: 0x17000702 RID: 1794
|
|
// (get) Token: 0x06001563 RID: 5475 RVA: 0x00044390 File Offset: 0x00042590
|
|
public bool UseConnect
|
|
{
|
|
get
|
|
{
|
|
return this.use_connect;
|
|
}
|
|
}
|
|
|
|
// Token: 0x06001564 RID: 5476 RVA: 0x00044398 File Offset: 0x00042598
|
|
public override int GetHashCode()
|
|
{
|
|
return this.uri.GetHashCode() + ((!this.use_connect) ? 0 : 1);
|
|
}
|
|
|
|
// Token: 0x06001565 RID: 5477 RVA: 0x000443B8 File Offset: 0x000425B8
|
|
public override bool Equals(object obj)
|
|
{
|
|
ServicePointManager.SPKey spkey = obj as ServicePointManager.SPKey;
|
|
return obj != null && this.uri.Equals(spkey.uri) && spkey.use_connect == this.use_connect;
|
|
}
|
|
|
|
// Token: 0x040011CB RID: 4555
|
|
private global::System.Uri uri;
|
|
|
|
// Token: 0x040011CC RID: 4556
|
|
private bool use_connect;
|
|
}
|
|
|
|
// Token: 0x02000256 RID: 598
|
|
internal class ChainValidationHelper
|
|
{
|
|
// Token: 0x06001566 RID: 5478 RVA: 0x000443FC File Offset: 0x000425FC
|
|
public ChainValidationHelper(object sender)
|
|
{
|
|
this.sender = sender;
|
|
}
|
|
|
|
// Token: 0x17000703 RID: 1795
|
|
// (get) Token: 0x06001568 RID: 5480 RVA: 0x00044428 File Offset: 0x00042628
|
|
// (set) Token: 0x06001569 RID: 5481 RVA: 0x00044474 File Offset: 0x00042674
|
|
public string Host
|
|
{
|
|
get
|
|
{
|
|
if (this.host == null && this.sender is HttpWebRequest)
|
|
{
|
|
this.host = ((HttpWebRequest)this.sender).Address.Host;
|
|
}
|
|
return this.host;
|
|
}
|
|
set
|
|
{
|
|
this.host = value;
|
|
}
|
|
}
|
|
|
|
// Token: 0x0600156A RID: 5482 RVA: 0x00044480 File Offset: 0x00042680
|
|
internal ValidationResult ValidateChain(Mono.Security.X509.X509CertificateCollection certs)
|
|
{
|
|
bool flag = false;
|
|
if (certs == null || certs.Count == 0)
|
|
{
|
|
return null;
|
|
}
|
|
ICertificatePolicy certificatePolicy = ServicePointManager.CertificatePolicy;
|
|
global::System.Net.Security.RemoteCertificateValidationCallback serverCertificateValidationCallback = ServicePointManager.ServerCertificateValidationCallback;
|
|
global::System.Security.Cryptography.X509Certificates.X509Chain x509Chain = new global::System.Security.Cryptography.X509Certificates.X509Chain();
|
|
x509Chain.ChainPolicy = new global::System.Security.Cryptography.X509Certificates.X509ChainPolicy();
|
|
for (int i = 1; i < certs.Count; i++)
|
|
{
|
|
global::System.Security.Cryptography.X509Certificates.X509Certificate2 x509Certificate = new global::System.Security.Cryptography.X509Certificates.X509Certificate2(certs[i].RawData);
|
|
x509Chain.ChainPolicy.ExtraStore.Add(x509Certificate);
|
|
}
|
|
global::System.Security.Cryptography.X509Certificates.X509Certificate2 x509Certificate2 = new global::System.Security.Cryptography.X509Certificates.X509Certificate2(certs[0].RawData);
|
|
int num = 0;
|
|
global::System.Net.Security.SslPolicyErrors sslPolicyErrors = global::System.Net.Security.SslPolicyErrors.None;
|
|
try
|
|
{
|
|
if (!x509Chain.Build(x509Certificate2))
|
|
{
|
|
sslPolicyErrors |= ServicePointManager.ChainValidationHelper.GetErrorsFromChain(x509Chain);
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Console.Error.WriteLine("ERROR building certificate chain: {0}", ex);
|
|
Console.Error.WriteLine("Please, report this problem to the Mono team");
|
|
sslPolicyErrors |= global::System.Net.Security.SslPolicyErrors.RemoteCertificateChainErrors;
|
|
}
|
|
if (!ServicePointManager.ChainValidationHelper.CheckCertificateUsage(x509Certificate2))
|
|
{
|
|
sslPolicyErrors |= global::System.Net.Security.SslPolicyErrors.RemoteCertificateChainErrors;
|
|
num = -2146762490;
|
|
}
|
|
if (!ServicePointManager.ChainValidationHelper.CheckServerIdentity(certs[0], this.Host))
|
|
{
|
|
sslPolicyErrors |= global::System.Net.Security.SslPolicyErrors.RemoteCertificateNameMismatch;
|
|
num = -2146762481;
|
|
}
|
|
bool flag2 = false;
|
|
try
|
|
{
|
|
Mono.Security.X509.OSX509Certificates.SecTrustResult secTrustResult = Mono.Security.X509.OSX509Certificates.TrustEvaluateSsl(certs);
|
|
flag2 = secTrustResult == Mono.Security.X509.OSX509Certificates.SecTrustResult.Proceed || secTrustResult == Mono.Security.X509.OSX509Certificates.SecTrustResult.Unspecified;
|
|
}
|
|
catch
|
|
{
|
|
}
|
|
if (flag2)
|
|
{
|
|
num = 0;
|
|
sslPolicyErrors = global::System.Net.Security.SslPolicyErrors.None;
|
|
}
|
|
if (certificatePolicy != null && (!(certificatePolicy is DefaultCertificatePolicy) || serverCertificateValidationCallback == null))
|
|
{
|
|
ServicePoint servicePoint = null;
|
|
HttpWebRequest httpWebRequest = this.sender as HttpWebRequest;
|
|
if (httpWebRequest != null)
|
|
{
|
|
servicePoint = httpWebRequest.ServicePoint;
|
|
}
|
|
if (num == 0 && sslPolicyErrors != global::System.Net.Security.SslPolicyErrors.None)
|
|
{
|
|
num = ServicePointManager.ChainValidationHelper.GetStatusFromChain(x509Chain);
|
|
}
|
|
flag2 = certificatePolicy.CheckValidationResult(servicePoint, x509Certificate2, httpWebRequest, num);
|
|
flag = !flag2 && !(certificatePolicy is DefaultCertificatePolicy);
|
|
}
|
|
if (serverCertificateValidationCallback != null)
|
|
{
|
|
flag2 = serverCertificateValidationCallback(this.sender, x509Certificate2, x509Chain, sslPolicyErrors);
|
|
flag = !flag2;
|
|
}
|
|
return new ValidationResult(flag2, flag, num);
|
|
}
|
|
|
|
// Token: 0x0600156B RID: 5483 RVA: 0x000446A8 File Offset: 0x000428A8
|
|
private static int GetStatusFromChain(global::System.Security.Cryptography.X509Certificates.X509Chain chain)
|
|
{
|
|
long num = 0L;
|
|
foreach (global::System.Security.Cryptography.X509Certificates.X509ChainStatus x509ChainStatus in chain.ChainStatus)
|
|
{
|
|
global::System.Security.Cryptography.X509Certificates.X509ChainStatusFlags status = x509ChainStatus.Status;
|
|
if (status != global::System.Security.Cryptography.X509Certificates.X509ChainStatusFlags.NoError)
|
|
{
|
|
if ((status & global::System.Security.Cryptography.X509Certificates.X509ChainStatusFlags.NotTimeValid) != global::System.Security.Cryptography.X509Certificates.X509ChainStatusFlags.NoError)
|
|
{
|
|
num = (long)((ulong)(-2146762495));
|
|
}
|
|
else if ((status & global::System.Security.Cryptography.X509Certificates.X509ChainStatusFlags.NotTimeNested) != global::System.Security.Cryptography.X509Certificates.X509ChainStatusFlags.NoError)
|
|
{
|
|
num = (long)((ulong)(-2146762494));
|
|
}
|
|
else if ((status & global::System.Security.Cryptography.X509Certificates.X509ChainStatusFlags.Revoked) != global::System.Security.Cryptography.X509Certificates.X509ChainStatusFlags.NoError)
|
|
{
|
|
num = (long)((ulong)(-2146762484));
|
|
}
|
|
else if ((status & global::System.Security.Cryptography.X509Certificates.X509ChainStatusFlags.NotSignatureValid) != global::System.Security.Cryptography.X509Certificates.X509ChainStatusFlags.NoError)
|
|
{
|
|
num = (long)((ulong)(-2146869244));
|
|
}
|
|
else if ((status & global::System.Security.Cryptography.X509Certificates.X509ChainStatusFlags.NotValidForUsage) != global::System.Security.Cryptography.X509Certificates.X509ChainStatusFlags.NoError)
|
|
{
|
|
num = (long)((ulong)(-2146762480));
|
|
}
|
|
else if ((status & global::System.Security.Cryptography.X509Certificates.X509ChainStatusFlags.UntrustedRoot) != global::System.Security.Cryptography.X509Certificates.X509ChainStatusFlags.NoError)
|
|
{
|
|
num = (long)((ulong)(-2146762487));
|
|
}
|
|
else if ((status & global::System.Security.Cryptography.X509Certificates.X509ChainStatusFlags.RevocationStatusUnknown) != global::System.Security.Cryptography.X509Certificates.X509ChainStatusFlags.NoError)
|
|
{
|
|
num = (long)((ulong)(-2146885614));
|
|
}
|
|
else if ((status & global::System.Security.Cryptography.X509Certificates.X509ChainStatusFlags.Cyclic) != global::System.Security.Cryptography.X509Certificates.X509ChainStatusFlags.NoError)
|
|
{
|
|
num = (long)((ulong)(-2146762486));
|
|
}
|
|
else if ((status & global::System.Security.Cryptography.X509Certificates.X509ChainStatusFlags.InvalidExtension) != global::System.Security.Cryptography.X509Certificates.X509ChainStatusFlags.NoError)
|
|
{
|
|
num = (long)((ulong)(-2146762485));
|
|
}
|
|
else if ((status & global::System.Security.Cryptography.X509Certificates.X509ChainStatusFlags.InvalidPolicyConstraints) != global::System.Security.Cryptography.X509Certificates.X509ChainStatusFlags.NoError)
|
|
{
|
|
num = (long)((ulong)(-2146762483));
|
|
}
|
|
else if ((status & global::System.Security.Cryptography.X509Certificates.X509ChainStatusFlags.InvalidBasicConstraints) != global::System.Security.Cryptography.X509Certificates.X509ChainStatusFlags.NoError)
|
|
{
|
|
num = (long)((ulong)(-2146869223));
|
|
}
|
|
else if ((status & global::System.Security.Cryptography.X509Certificates.X509ChainStatusFlags.InvalidNameConstraints) != global::System.Security.Cryptography.X509Certificates.X509ChainStatusFlags.NoError)
|
|
{
|
|
num = (long)((ulong)(-2146762476));
|
|
}
|
|
else if ((status & global::System.Security.Cryptography.X509Certificates.X509ChainStatusFlags.HasNotSupportedNameConstraint) != global::System.Security.Cryptography.X509Certificates.X509ChainStatusFlags.NoError)
|
|
{
|
|
num = (long)((ulong)(-2146762476));
|
|
}
|
|
else if ((status & global::System.Security.Cryptography.X509Certificates.X509ChainStatusFlags.HasNotDefinedNameConstraint) != global::System.Security.Cryptography.X509Certificates.X509ChainStatusFlags.NoError)
|
|
{
|
|
num = (long)((ulong)(-2146762476));
|
|
}
|
|
else if ((status & global::System.Security.Cryptography.X509Certificates.X509ChainStatusFlags.HasNotPermittedNameConstraint) != global::System.Security.Cryptography.X509Certificates.X509ChainStatusFlags.NoError)
|
|
{
|
|
num = (long)((ulong)(-2146762476));
|
|
}
|
|
else if ((status & global::System.Security.Cryptography.X509Certificates.X509ChainStatusFlags.HasExcludedNameConstraint) != global::System.Security.Cryptography.X509Certificates.X509ChainStatusFlags.NoError)
|
|
{
|
|
num = (long)((ulong)(-2146762476));
|
|
}
|
|
else if ((status & global::System.Security.Cryptography.X509Certificates.X509ChainStatusFlags.PartialChain) != global::System.Security.Cryptography.X509Certificates.X509ChainStatusFlags.NoError)
|
|
{
|
|
num = (long)((ulong)(-2146762486));
|
|
}
|
|
else if ((status & global::System.Security.Cryptography.X509Certificates.X509ChainStatusFlags.CtlNotTimeValid) != global::System.Security.Cryptography.X509Certificates.X509ChainStatusFlags.NoError)
|
|
{
|
|
num = (long)((ulong)(-2146762495));
|
|
}
|
|
else if ((status & global::System.Security.Cryptography.X509Certificates.X509ChainStatusFlags.CtlNotSignatureValid) != global::System.Security.Cryptography.X509Certificates.X509ChainStatusFlags.NoError)
|
|
{
|
|
num = (long)((ulong)(-2146869244));
|
|
}
|
|
else if ((status & global::System.Security.Cryptography.X509Certificates.X509ChainStatusFlags.CtlNotValidForUsage) != global::System.Security.Cryptography.X509Certificates.X509ChainStatusFlags.NoError)
|
|
{
|
|
num = (long)((ulong)(-2146762480));
|
|
}
|
|
else if ((status & global::System.Security.Cryptography.X509Certificates.X509ChainStatusFlags.OfflineRevocation) != global::System.Security.Cryptography.X509Certificates.X509ChainStatusFlags.NoError)
|
|
{
|
|
num = (long)((ulong)(-2146885614));
|
|
}
|
|
else if ((status & global::System.Security.Cryptography.X509Certificates.X509ChainStatusFlags.NoIssuanceChainPolicy) != global::System.Security.Cryptography.X509Certificates.X509ChainStatusFlags.NoError)
|
|
{
|
|
num = (long)((ulong)(-2146762489));
|
|
}
|
|
else
|
|
{
|
|
num = (long)((ulong)(-2146762485));
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
return (int)num;
|
|
}
|
|
|
|
// Token: 0x0600156C RID: 5484 RVA: 0x00044910 File Offset: 0x00042B10
|
|
private static global::System.Net.Security.SslPolicyErrors GetErrorsFromChain(global::System.Security.Cryptography.X509Certificates.X509Chain chain)
|
|
{
|
|
global::System.Net.Security.SslPolicyErrors sslPolicyErrors = global::System.Net.Security.SslPolicyErrors.None;
|
|
foreach (global::System.Security.Cryptography.X509Certificates.X509ChainStatus x509ChainStatus in chain.ChainStatus)
|
|
{
|
|
if (x509ChainStatus.Status != global::System.Security.Cryptography.X509Certificates.X509ChainStatusFlags.NoError)
|
|
{
|
|
sslPolicyErrors |= global::System.Net.Security.SslPolicyErrors.RemoteCertificateChainErrors;
|
|
break;
|
|
}
|
|
}
|
|
return sslPolicyErrors;
|
|
}
|
|
|
|
// Token: 0x0600156D RID: 5485 RVA: 0x00044964 File Offset: 0x00042B64
|
|
private static bool CheckCertificateUsage(global::System.Security.Cryptography.X509Certificates.X509Certificate2 cert)
|
|
{
|
|
bool flag;
|
|
try
|
|
{
|
|
if (cert.Version < 3)
|
|
{
|
|
flag = true;
|
|
}
|
|
else
|
|
{
|
|
global::System.Security.Cryptography.X509Certificates.X509KeyUsageExtension x509KeyUsageExtension = (global::System.Security.Cryptography.X509Certificates.X509KeyUsageExtension)cert.Extensions["2.5.29.15"];
|
|
global::System.Security.Cryptography.X509Certificates.X509EnhancedKeyUsageExtension x509EnhancedKeyUsageExtension = (global::System.Security.Cryptography.X509Certificates.X509EnhancedKeyUsageExtension)cert.Extensions["2.5.29.37"];
|
|
if (x509KeyUsageExtension != null && x509EnhancedKeyUsageExtension != null)
|
|
{
|
|
if ((x509KeyUsageExtension.KeyUsages & ServicePointManager.ChainValidationHelper.s_flags) == global::System.Security.Cryptography.X509Certificates.X509KeyUsageFlags.None)
|
|
{
|
|
flag = false;
|
|
}
|
|
else
|
|
{
|
|
flag = x509EnhancedKeyUsageExtension.EnhancedKeyUsages["1.3.6.1.5.5.7.3.1"] != null || x509EnhancedKeyUsageExtension.EnhancedKeyUsages["2.16.840.1.113730.4.1"] != null;
|
|
}
|
|
}
|
|
else if (x509KeyUsageExtension != null)
|
|
{
|
|
flag = (x509KeyUsageExtension.KeyUsages & ServicePointManager.ChainValidationHelper.s_flags) != global::System.Security.Cryptography.X509Certificates.X509KeyUsageFlags.None;
|
|
}
|
|
else if (x509EnhancedKeyUsageExtension != null)
|
|
{
|
|
flag = x509EnhancedKeyUsageExtension.EnhancedKeyUsages["1.3.6.1.5.5.7.3.1"] != null || x509EnhancedKeyUsageExtension.EnhancedKeyUsages["2.16.840.1.113730.4.1"] != null;
|
|
}
|
|
else
|
|
{
|
|
global::System.Security.Cryptography.X509Certificates.X509Extension x509Extension = cert.Extensions["2.16.840.1.113730.1.1"];
|
|
if (x509Extension != null)
|
|
{
|
|
string text = x509Extension.NetscapeCertType(false);
|
|
flag = text.IndexOf("SSL Server Authentication") != -1;
|
|
}
|
|
else
|
|
{
|
|
flag = true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Console.Error.WriteLine("ERROR processing certificate: {0}", ex);
|
|
Console.Error.WriteLine("Please, report this problem to the Mono team");
|
|
flag = false;
|
|
}
|
|
return flag;
|
|
}
|
|
|
|
// Token: 0x0600156E RID: 5486 RVA: 0x00044AF8 File Offset: 0x00042CF8
|
|
private static bool CheckServerIdentity(Mono.Security.X509.X509Certificate cert, string targetHost)
|
|
{
|
|
bool flag;
|
|
try
|
|
{
|
|
Mono.Security.X509.X509Extension x509Extension = cert.Extensions["2.5.29.17"];
|
|
if (x509Extension != null)
|
|
{
|
|
SubjectAltNameExtension subjectAltNameExtension = new SubjectAltNameExtension(x509Extension);
|
|
foreach (string text in subjectAltNameExtension.DNSNames)
|
|
{
|
|
if (ServicePointManager.ChainValidationHelper.Match(targetHost, text))
|
|
{
|
|
return true;
|
|
}
|
|
}
|
|
foreach (string text2 in subjectAltNameExtension.IPAddresses)
|
|
{
|
|
if (text2 == targetHost)
|
|
{
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
flag = ServicePointManager.ChainValidationHelper.CheckDomainName(cert.SubjectName, targetHost);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Console.Error.WriteLine("ERROR processing certificate: {0}", ex);
|
|
Console.Error.WriteLine("Please, report this problem to the Mono team");
|
|
flag = false;
|
|
}
|
|
return flag;
|
|
}
|
|
|
|
// Token: 0x0600156F RID: 5487 RVA: 0x00044C00 File Offset: 0x00042E00
|
|
private static bool CheckDomainName(string subjectName, string targetHost)
|
|
{
|
|
string text = string.Empty;
|
|
global::System.Text.RegularExpressions.Regex regex = new global::System.Text.RegularExpressions.Regex("CN\\s*=\\s*([^,]*)");
|
|
global::System.Text.RegularExpressions.MatchCollection matchCollection = regex.Matches(subjectName);
|
|
if (matchCollection.Count == 1 && matchCollection[0].Success)
|
|
{
|
|
text = matchCollection[0].Groups[1].Value.ToString();
|
|
}
|
|
return ServicePointManager.ChainValidationHelper.Match(targetHost, text);
|
|
}
|
|
|
|
// Token: 0x06001570 RID: 5488 RVA: 0x00044C68 File Offset: 0x00042E68
|
|
private static bool Match(string hostname, string pattern)
|
|
{
|
|
int num = pattern.IndexOf('*');
|
|
if (num == -1)
|
|
{
|
|
return string.Compare(hostname, pattern, true, CultureInfo.InvariantCulture) == 0;
|
|
}
|
|
if (num != pattern.Length - 1 && pattern[num + 1] != '.')
|
|
{
|
|
return false;
|
|
}
|
|
int num2 = pattern.IndexOf('*', num + 1);
|
|
if (num2 != -1)
|
|
{
|
|
return false;
|
|
}
|
|
string text = pattern.Substring(num + 1);
|
|
int num3 = hostname.Length - text.Length;
|
|
if (num3 <= 0)
|
|
{
|
|
return false;
|
|
}
|
|
if (string.Compare(hostname, num3, text, 0, text.Length, true, CultureInfo.InvariantCulture) != 0)
|
|
{
|
|
return false;
|
|
}
|
|
if (num == 0)
|
|
{
|
|
int num4 = hostname.IndexOf('.');
|
|
return num4 == -1 || num4 >= hostname.Length - text.Length;
|
|
}
|
|
string text2 = pattern.Substring(0, num);
|
|
return string.Compare(hostname, 0, text2, 0, text2.Length, true, CultureInfo.InvariantCulture) == 0;
|
|
}
|
|
|
|
// Token: 0x040011CD RID: 4557
|
|
private object sender;
|
|
|
|
// Token: 0x040011CE RID: 4558
|
|
private string host;
|
|
|
|
// Token: 0x040011CF RID: 4559
|
|
private static bool is_macosx = File.Exists("/System/Library/Frameworks/Security.framework/Security");
|
|
|
|
// Token: 0x040011D0 RID: 4560
|
|
private static global::System.Security.Cryptography.X509Certificates.X509KeyUsageFlags s_flags = global::System.Security.Cryptography.X509Certificates.X509KeyUsageFlags.KeyAgreement | global::System.Security.Cryptography.X509Certificates.X509KeyUsageFlags.KeyEncipherment | global::System.Security.Cryptography.X509Certificates.X509KeyUsageFlags.DigitalSignature;
|
|
}
|
|
}
|
|
}
|