using System;
using System.Collections;
using System.Net.Sockets;
using System.Security.Cryptography.X509Certificates;
namespace System.Net
{
/// Provides connection management for HTTP connections.
// Token: 0x02000253 RID: 595
public class ServicePoint
{
// Token: 0x0600151A RID: 5402 RVA: 0x0004385C File Offset: 0x00041A5C
internal ServicePoint(global::System.Uri uri, int connectionLimit, int maxIdleTime)
{
this.uri = uri;
this.connectionLimit = connectionLimit;
this.maxIdleTime = maxIdleTime;
this.currentConnections = 0;
this.idleSince = DateTime.Now;
}
/// Gets the Uniform Resource Identifier (URI) of the server that this object connects to.
/// An instance of the class that contains the URI of the Internet server that this object connects to.
/// The is in host mode.
// Token: 0x170006E1 RID: 1761
// (get) Token: 0x0600151B RID: 5403 RVA: 0x000438B4 File Offset: 0x00041AB4
public global::System.Uri Address
{
get
{
return this.uri;
}
}
// Token: 0x0600151C RID: 5404 RVA: 0x000438BC File Offset: 0x00041ABC
private static Exception GetMustImplement()
{
return new NotImplementedException();
}
/// Specifies the delegate to associate a local with a .
/// A delegate that forces a to use a particular local Internet Protocol (IP) address and port number. The default value is null.
// Token: 0x170006E2 RID: 1762
// (get) Token: 0x0600151D RID: 5405 RVA: 0x000438C4 File Offset: 0x00041AC4
// (set) Token: 0x0600151E RID: 5406 RVA: 0x000438CC File Offset: 0x00041ACC
public BindIPEndPoint BindIPEndPointDelegate
{
get
{
return this.endPointCallback;
}
set
{
this.endPointCallback = value;
}
}
/// Gets the certificate received for this object.
/// An instance of the class that contains the security certificate received for this object.
// Token: 0x170006E3 RID: 1763
// (get) Token: 0x0600151F RID: 5407 RVA: 0x000438D8 File Offset: 0x00041AD8
public X509Certificate Certificate
{
get
{
return this.certificate;
}
}
/// Gets the last client certificate sent to the server.
/// An object that contains the public values of the last client certificate sent to the server.
// Token: 0x170006E4 RID: 1764
// (get) Token: 0x06001520 RID: 5408 RVA: 0x000438E0 File Offset: 0x00041AE0
public X509Certificate ClientCertificate
{
get
{
return this.clientCertificate;
}
}
/// Gets or sets the number of milliseconds after which an active connection is closed.
/// A that specifies the number of milliseconds that an active connection remains open. The default is -1, which allows an active connection to stay connected indefinitely. Set this property to 0 to force connections to close after servicing a request.
/// The value specified for a set operation is a negative number less than -1.
// Token: 0x170006E5 RID: 1765
// (get) Token: 0x06001521 RID: 5409 RVA: 0x000438E8 File Offset: 0x00041AE8
// (set) Token: 0x06001522 RID: 5410 RVA: 0x000438F0 File Offset: 0x00041AF0
[global::System.MonoTODO]
public int ConnectionLeaseTimeout
{
get
{
throw ServicePoint.GetMustImplement();
}
set
{
throw ServicePoint.GetMustImplement();
}
}
/// Gets or sets the maximum number of connections allowed on this object.
/// The maximum number of connections allowed on this object.
/// The connection limit is equal to or less than 0.
///
///
///
///
///
///
// Token: 0x170006E6 RID: 1766
// (get) Token: 0x06001523 RID: 5411 RVA: 0x000438F8 File Offset: 0x00041AF8
// (set) Token: 0x06001524 RID: 5412 RVA: 0x00043900 File Offset: 0x00041B00
public int ConnectionLimit
{
get
{
return this.connectionLimit;
}
set
{
if (value <= 0)
{
throw new ArgumentOutOfRangeException();
}
this.connectionLimit = value;
}
}
/// Gets the connection name.
/// A that represents the connection name.
// Token: 0x170006E7 RID: 1767
// (get) Token: 0x06001525 RID: 5413 RVA: 0x00043918 File Offset: 0x00041B18
public string ConnectionName
{
get
{
return this.uri.Scheme;
}
}
/// Gets the number of open connections associated with this object.
/// The number of open connections associated with this object.
// Token: 0x170006E8 RID: 1768
// (get) Token: 0x06001526 RID: 5414 RVA: 0x00043928 File Offset: 0x00041B28
public int CurrentConnections
{
get
{
return this.currentConnections;
}
}
/// Gets the date and time that the object was last connected to a host.
/// A object that contains the date and time at which the object was last connected.
// Token: 0x170006E9 RID: 1769
// (get) Token: 0x06001527 RID: 5415 RVA: 0x00043930 File Offset: 0x00041B30
// (set) Token: 0x06001528 RID: 5416 RVA: 0x00043938 File Offset: 0x00041B38
public DateTime IdleSince
{
get
{
return this.idleSince;
}
internal set
{
object obj = this.locker;
lock (obj)
{
this.idleSince = value;
}
}
}
/// Gets or sets the amount of time a connection associated with the object can remain idle before the connection is closed.
/// The length of time, in milliseconds, that a connection associated with the object can remain idle before it is closed and reused for another connection.
///
/// is set to less than or greater than .
// Token: 0x170006EA RID: 1770
// (get) Token: 0x06001529 RID: 5417 RVA: 0x00043984 File Offset: 0x00041B84
// (set) Token: 0x0600152A RID: 5418 RVA: 0x0004398C File Offset: 0x00041B8C
public int MaxIdleTime
{
get
{
return this.maxIdleTime;
}
set
{
if (value < -1 || value > 2147483647)
{
throw new ArgumentOutOfRangeException();
}
this.maxIdleTime = value;
}
}
/// Gets the version of the HTTP protocol that the object uses.
/// A object that contains the HTTP protocol version that the object uses.
// Token: 0x170006EB RID: 1771
// (get) Token: 0x0600152B RID: 5419 RVA: 0x000439B0 File Offset: 0x00041BB0
public virtual Version ProtocolVersion
{
get
{
return this.protocolVersion;
}
}
/// Gets or sets the size of the receiving buffer for the socket used by this .
/// A that contains the size, in bytes, of the receive buffer. The default is 8192.
/// The value specified for a set operation is greater than .
// Token: 0x170006EC RID: 1772
// (get) Token: 0x0600152C RID: 5420 RVA: 0x000439B8 File Offset: 0x00041BB8
// (set) Token: 0x0600152D RID: 5421 RVA: 0x000439C0 File Offset: 0x00041BC0
[global::System.MonoTODO]
public int ReceiveBufferSize
{
get
{
throw ServicePoint.GetMustImplement();
}
set
{
throw ServicePoint.GetMustImplement();
}
}
/// Indicates whether the object supports pipelined connections.
/// true if the object supports pipelined connections; otherwise, false.
// Token: 0x170006ED RID: 1773
// (get) Token: 0x0600152E RID: 5422 RVA: 0x000439C8 File Offset: 0x00041BC8
public bool SupportsPipelining
{
get
{
return HttpVersion.Version11.Equals(this.protocolVersion);
}
}
/// Gets or sets a value that determines whether 100-Continue behavior is used.
/// true to expect 100-Continue responses for POST requests; otherwise, false. The default value is true.
// Token: 0x170006EE RID: 1774
// (get) Token: 0x0600152F RID: 5423 RVA: 0x000439DC File Offset: 0x00041BDC
// (set) Token: 0x06001530 RID: 5424 RVA: 0x000439E4 File Offset: 0x00041BE4
public bool Expect100Continue
{
get
{
return this.SendContinue;
}
set
{
this.SendContinue = value;
}
}
/// Gets or sets a value that determines whether the Nagle algorithm is used on connections managed by this object.
/// true to use the Nagle algorithm; otherwise, false. The default value is true.
// Token: 0x170006EF RID: 1775
// (get) Token: 0x06001531 RID: 5425 RVA: 0x000439F0 File Offset: 0x00041BF0
// (set) Token: 0x06001532 RID: 5426 RVA: 0x000439F8 File Offset: 0x00041BF8
public bool UseNagleAlgorithm
{
get
{
return this.useNagle;
}
set
{
this.useNagle = value;
}
}
// Token: 0x170006F0 RID: 1776
// (get) Token: 0x06001533 RID: 5427 RVA: 0x00043A04 File Offset: 0x00041C04
// (set) Token: 0x06001534 RID: 5428 RVA: 0x00043A44 File Offset: 0x00041C44
internal bool SendContinue
{
get
{
return this.sendContinue && (this.protocolVersion == null || this.protocolVersion == HttpVersion.Version11);
}
set
{
this.sendContinue = value;
}
}
// Token: 0x170006F1 RID: 1777
// (get) Token: 0x06001535 RID: 5429 RVA: 0x00043A50 File Offset: 0x00041C50
// (set) Token: 0x06001536 RID: 5430 RVA: 0x00043A58 File Offset: 0x00041C58
internal bool UsesProxy
{
get
{
return this.usesProxy;
}
set
{
this.usesProxy = value;
}
}
// Token: 0x170006F2 RID: 1778
// (get) Token: 0x06001537 RID: 5431 RVA: 0x00043A64 File Offset: 0x00041C64
// (set) Token: 0x06001538 RID: 5432 RVA: 0x00043A6C File Offset: 0x00041C6C
internal bool UseConnect
{
get
{
return this.useConnect;
}
set
{
this.useConnect = value;
}
}
// Token: 0x170006F3 RID: 1779
// (get) Token: 0x06001539 RID: 5433 RVA: 0x00043A78 File Offset: 0x00041C78
internal bool AvailableForRecycling
{
get
{
return this.CurrentConnections == 0 && this.maxIdleTime != -1 && DateTime.Now >= this.IdleSince.AddMilliseconds((double)this.maxIdleTime);
}
}
// Token: 0x170006F4 RID: 1780
// (get) Token: 0x0600153A RID: 5434 RVA: 0x00043AC0 File Offset: 0x00041CC0
internal Hashtable Groups
{
get
{
if (this.groups == null)
{
this.groups = new Hashtable();
}
return this.groups;
}
}
// Token: 0x170006F5 RID: 1781
// (get) Token: 0x0600153B RID: 5435 RVA: 0x00043AE0 File Offset: 0x00041CE0
internal IPHostEntry HostEntry
{
get
{
object obj = this.hostE;
lock (obj)
{
if (this.host != null)
{
return this.host;
}
string text = this.uri.Host;
if (this.uri.HostNameType == global::System.UriHostNameType.IPv6 || this.uri.HostNameType == global::System.UriHostNameType.IPv4)
{
if (this.uri.HostNameType == global::System.UriHostNameType.IPv6)
{
text = text.Substring(1, text.Length - 2);
}
this.host = new IPHostEntry();
this.host.AddressList = new IPAddress[] { IPAddress.Parse(text) };
return this.host;
}
try
{
this.host = Dns.GetHostByName(text);
}
catch
{
return null;
}
}
return this.host;
}
}
// Token: 0x0600153C RID: 5436 RVA: 0x00043BF8 File Offset: 0x00041DF8
internal void SetVersion(Version version)
{
this.protocolVersion = version;
}
// Token: 0x0600153D RID: 5437 RVA: 0x00043C04 File Offset: 0x00041E04
private WebConnectionGroup GetConnectionGroup(string name)
{
if (name == null)
{
name = string.Empty;
}
WebConnectionGroup webConnectionGroup = this.Groups[name] as WebConnectionGroup;
if (webConnectionGroup != null)
{
return webConnectionGroup;
}
webConnectionGroup = new WebConnectionGroup(this, name);
this.Groups[name] = webConnectionGroup;
return webConnectionGroup;
}
// Token: 0x0600153E RID: 5438 RVA: 0x00043C50 File Offset: 0x00041E50
internal EventHandler SendRequest(HttpWebRequest request, string groupName)
{
object obj = this.locker;
WebConnection connection;
lock (obj)
{
WebConnectionGroup connectionGroup = this.GetConnectionGroup(groupName);
connection = connectionGroup.GetConnection(request);
}
return connection.SendRequest(request);
}
/// Removes the specified connection group from this object.
/// A value that indicates whether the connection group was closed.
/// The name of the connection group that contains the connections to close and remove from this service point.
// Token: 0x0600153F RID: 5439 RVA: 0x00043CAC File Offset: 0x00041EAC
public bool CloseConnectionGroup(string connectionGroupName)
{
object obj = this.locker;
lock (obj)
{
WebConnectionGroup connectionGroup = this.GetConnectionGroup(connectionGroupName);
if (connectionGroup != null)
{
connectionGroup.Close();
return true;
}
}
return false;
}
// Token: 0x06001540 RID: 5440 RVA: 0x00043D0C File Offset: 0x00041F0C
internal void IncrementConnection()
{
object obj = this.locker;
lock (obj)
{
this.currentConnections++;
this.idleSince = DateTime.Now.AddMilliseconds(1000000.0);
}
}
// Token: 0x06001541 RID: 5441 RVA: 0x00043D78 File Offset: 0x00041F78
internal void DecrementConnection()
{
object obj = this.locker;
lock (obj)
{
this.currentConnections--;
if (this.currentConnections == 0)
{
this.idleSince = DateTime.Now;
}
}
}
// Token: 0x06001542 RID: 5442 RVA: 0x00043DE0 File Offset: 0x00041FE0
internal void SetCertificates(X509Certificate client, X509Certificate server)
{
this.certificate = server;
this.clientCertificate = client;
}
// Token: 0x06001543 RID: 5443 RVA: 0x00043DF0 File Offset: 0x00041FF0
internal bool CallEndPointDelegate(global::System.Net.Sockets.Socket sock, IPEndPoint remote)
{
if (this.endPointCallback == null)
{
return true;
}
int num = 0;
checked
{
for (;;)
{
IPEndPoint ipendPoint = null;
try
{
ipendPoint = this.endPointCallback(this, remote, num);
}
catch
{
return false;
}
if (ipendPoint == null)
{
break;
}
try
{
sock.Bind(ipendPoint);
}
catch (global::System.Net.Sockets.SocketException)
{
num++;
continue;
}
return true;
}
return true;
}
}
// Token: 0x040011AE RID: 4526
private global::System.Uri uri;
// Token: 0x040011AF RID: 4527
private int connectionLimit;
// Token: 0x040011B0 RID: 4528
private int maxIdleTime;
// Token: 0x040011B1 RID: 4529
private int currentConnections;
// Token: 0x040011B2 RID: 4530
private DateTime idleSince;
// Token: 0x040011B3 RID: 4531
private Version protocolVersion;
// Token: 0x040011B4 RID: 4532
private X509Certificate certificate;
// Token: 0x040011B5 RID: 4533
private X509Certificate clientCertificate;
// Token: 0x040011B6 RID: 4534
private IPHostEntry host;
// Token: 0x040011B7 RID: 4535
private bool usesProxy;
// Token: 0x040011B8 RID: 4536
private Hashtable groups;
// Token: 0x040011B9 RID: 4537
private bool sendContinue = true;
// Token: 0x040011BA RID: 4538
private bool useConnect;
// Token: 0x040011BB RID: 4539
private object locker = new object();
// Token: 0x040011BC RID: 4540
private object hostE = new object();
// Token: 0x040011BD RID: 4541
private bool useNagle;
// Token: 0x040011BE RID: 4542
private BindIPEndPoint endPointCallback;
}
}