forgot this
[mono.git] / mcs / class / System / System.Net / ServicePoint.cs
1 //\r
2 // System.Net.ServicePoint\r
3 //\r
4 // Author:\r
5 //   Lawrence Pit (loz@cable.a2000.nl)\r
6 //\r
7 \r
8 using System;\r
9 using System.Security.Cryptography.X509Certificates;\r
10 using System.Threading;\r
11 \r
12 namespace System.Net \r
13 {\r
14         public class ServicePoint\r
15         {\r
16                 private Uri uri;\r
17                 private int connectionLimit;\r
18                 private int maxIdleTime;\r
19                 private int currentConnections;\r
20                 private DateTime idleSince;\r
21                 private Version protocolVersion;\r
22                 \r
23                 // Constructors\r
24 \r
25                 internal ServicePoint (Uri uri, int connectionLimit, int maxIdleTime)\r
26                 {\r
27                         this.uri = uri;  \r
28                         this.connectionLimit = connectionLimit;\r
29                         this.maxIdleTime = maxIdleTime;                 \r
30                         this.currentConnections = 0;\r
31                         this.idleSince = DateTime.Now;\r
32                 }\r
33                 \r
34                 // Properties\r
35                 \r
36                 public Uri Address {\r
37                         get { return this.uri; }\r
38                 }\r
39                 \r
40                 [MonoTODO]\r
41                 public X509Certificate Certificate {\r
42                         get { throw new NotImplementedException (); }\r
43                 }\r
44                 \r
45                 [MonoTODO]\r
46                 public X509Certificate ClientCertificate {\r
47                         get { throw new NotImplementedException (); }\r
48                 }\r
49                 \r
50                 public int ConnectionLimit {\r
51                         get { return connectionLimit; }\r
52                         set {\r
53                                 if (value <= 0)\r
54                                         throw new ArgumentOutOfRangeException ();\r
55                                 connectionLimit = value;\r
56                         }\r
57                 }\r
58                 \r
59                 public string ConnectionName {\r
60                         get { return uri.Scheme; }\r
61                 }\r
62 \r
63                 public int CurrentConnections {\r
64                         get { return currentConnections; }\r
65                 }\r
66 \r
67                 public DateTime IdleSince {\r
68                         get { return idleSince; }\r
69                 }\r
70                 \r
71                 public int MaxIdleTime {\r
72                         get { return maxIdleTime; }\r
73                         set { \r
74                                 if (value < Timeout.Infinite || value > Int32.MaxValue)\r
75                                         throw new ArgumentOutOfRangeException ();\r
76                                 this.maxIdleTime = value; \r
77                         }\r
78                 }\r
79                 \r
80                 public virtual Version ProtocolVersion {\r
81                         get { return protocolVersion; }\r
82                 }\r
83                 \r
84                 public bool SupportsPipelining {\r
85                         get { return HttpVersion.Version11.Equals (protocolVersion); }\r
86                 }\r
87                 \r
88                 // Methods\r
89                 \r
90                 public override int GetHashCode() \r
91                 {\r
92                         return base.GetHashCode ();\r
93                 }\r
94                 \r
95                 // Internal Methods\r
96 \r
97                 internal bool AvailableForRecycling {\r
98                         get { \r
99                                 return CurrentConnections == 0\r
100                                     && maxIdleTime != Timeout.Infinite\r
101                                     && DateTime.Now >= IdleSince.AddMilliseconds (maxIdleTime);\r
102                         }\r
103                 }\r
104         }\r
105 }