2003-11-04 Carlos Guzm�n �lvarez <carlosga@telefonica.net>
[mono.git] / mcs / class / Mono.Security / Mono.Security.Protocol.Tls / TlsSessionSettings.cs
1 /* Transport Security Layer (TLS)\r
2  * Copyright (c) 2003 Carlos Guzmán Álvarez\r
3  * \r
4  * Permission is hereby granted, free of charge, to any person \r
5  * obtaining a copy of this software and associated documentation \r
6  * files (the "Software"), to deal in the Software without restriction, \r
7  * including without limitation the rights to use, copy, modify, merge, \r
8  * publish, distribute, sublicense, and/or sell copies of the Software, \r
9  * and to permit persons to whom the Software is furnished to do so, \r
10  * subject to the following conditions:\r
11  * \r
12  * The above copyright notice and this permission notice shall be included \r
13  * in all copies or substantial portions of the Software.\r
14  * \r
15  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, \r
16  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES \r
17  * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND \r
18  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT \r
19  * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, \r
20  * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, \r
21  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER \r
22  * DEALINGS IN THE SOFTWARE.\r
23  */\r
24 \r
25 using System;\r
26 using System.Text;\r
27 using System.Security.Cryptography.X509Certificates;\r
28 \r
29 namespace Mono.Security.Protocol.Tls\r
30 {\r
31         public sealed class TlsSessionSettings\r
32         {\r
33                 #region FIELDS\r
34 \r
35                 private string                                          serverName;\r
36                 private int                                                     serverPort;\r
37                 private Encoding                                        encoding;\r
38                 private TlsProtocol                                     protocol;\r
39                 private TlsCompressionMethod            compressionMethod;\r
40                 private X509CertificateCollection       certificates;\r
41         \r
42                 #endregion\r
43 \r
44                 #region PROPERTIES\r
45 \r
46                 public string ServerName\r
47                 {\r
48                         get { return serverName; }\r
49                         set { serverName = value; }\r
50                 }\r
51 \r
52                 public int ServerPort\r
53                 {\r
54                         get { return serverPort; }\r
55                         set { serverPort = value; }\r
56                 }\r
57 \r
58                 public Encoding Encoding\r
59                 {\r
60                         get { return encoding; }\r
61                         set { encoding = value; }\r
62                 }\r
63 \r
64                 public TlsProtocol Protocol\r
65                 {\r
66                         get { return protocol; }\r
67                         set \r
68                         { \r
69                                 if (value != TlsProtocol.Tls1 &&\r
70                                         value != TlsProtocol.Ssl3)\r
71                                 {\r
72                                         throw new NotSupportedException("Specified protocol is not supported");\r
73                                 }\r
74                                 protocol = value; \r
75                         }\r
76                 }\r
77 \r
78                 public TlsCompressionMethod CompressionMethod\r
79                 {\r
80                         get { return compressionMethod; }\r
81                         set \r
82                         { \r
83                                 if (value != TlsCompressionMethod.None)\r
84                                 {\r
85                                         throw new NotSupportedException("Specified compression method is not supported");\r
86                                 }\r
87                                 compressionMethod = value; \r
88                         }\r
89                 }\r
90 \r
91                 public X509CertificateCollection Certificates\r
92                 {\r
93                         get { return certificates; }\r
94                         set { certificates = value; }\r
95                 }\r
96 \r
97                 #endregion\r
98 \r
99                 #region CONSTRUCTORS\r
100 \r
101                 public TlsSessionSettings()\r
102                 {\r
103                         this.protocol                   = TlsProtocol.Tls1;\r
104                         this.compressionMethod  = TlsCompressionMethod.None;\r
105                         this.certificates               = new X509CertificateCollection();\r
106                         this.serverName                 = "localhost";\r
107                         this.serverPort                 = 443;\r
108                         this.encoding                   = Encoding.Default;\r
109                 }\r
110 \r
111                 public TlsSessionSettings(TlsProtocol protocol) : this()\r
112                 {\r
113                         this.Protocol   = protocol;\r
114                 }\r
115 \r
116                 public TlsSessionSettings(TlsProtocol protocol, Encoding encoding) : this(protocol)\r
117                 {\r
118                         this.encoding   = encoding;\r
119                 }\r
120 \r
121                 public TlsSessionSettings(string serverName) : this()\r
122                 {\r
123                         this.serverName = serverName;\r
124                 }\r
125 \r
126                 public TlsSessionSettings(string serverName, Encoding encoding) : this()\r
127                 {\r
128                         this.serverName = serverName;\r
129                         this.encoding   = encoding;\r
130                 }\r
131 \r
132                 public TlsSessionSettings(string serverName, int serverPort) : this()\r
133                 {\r
134                         this.serverName = serverName;\r
135                         this.serverPort = serverPort;\r
136                 }\r
137 \r
138                 public TlsSessionSettings(string serverName, int serverPort, Encoding encoding) : this()\r
139                 {\r
140                         this.serverName = serverName;\r
141                         this.serverPort = serverPort;\r
142                         this.encoding   = encoding;\r
143                 }\r
144 \r
145                 public TlsSessionSettings(TlsProtocol protocol, string serverName) : this(protocol)\r
146                 {\r
147                         this.serverName = serverName;\r
148                 }\r
149 \r
150                 public TlsSessionSettings(TlsProtocol protocol, string serverName, Encoding encoding) : this(protocol)\r
151                 {\r
152                         this.serverName = serverName;\r
153                         this.encoding   = encoding;\r
154                 }\r
155 \r
156 \r
157                 public TlsSessionSettings(TlsProtocol protocol, string serverName, int serverPort) : this(protocol)\r
158                 {\r
159                         this.serverName = serverName;\r
160                         this.serverPort = serverPort;\r
161                 }\r
162 \r
163                 public TlsSessionSettings(TlsProtocol protocol, string serverName, int serverPort, Encoding encoding) : this(protocol)\r
164                 {\r
165                         this.serverName = serverName;\r
166                         this.serverPort = serverPort;\r
167                         this.encoding   = encoding;\r
168                 }\r
169 \r
170                 public TlsSessionSettings(TlsProtocol protocol, X509CertificateCollection certificates) : this(protocol)\r
171                 {\r
172                         this.certificates       = certificates;\r
173                 }\r
174 \r
175                 public TlsSessionSettings(TlsProtocol protocol, X509CertificateCollection certificates, Encoding encoding) : this(protocol)\r
176                 {\r
177                         this.certificates       = certificates;\r
178                         this.encoding           = encoding;\r
179                 }\r
180 \r
181                 public TlsSessionSettings(TlsProtocol protocol, X509CertificateCollection certificates, string serverName, int serverPort) : this(protocol)\r
182                 {\r
183                         this.certificates       = certificates;\r
184                         this.serverName         = serverName;\r
185                         this.serverPort         = serverPort;\r
186                 }\r
187 \r
188                 public TlsSessionSettings(TlsProtocol protocol, X509CertificateCollection certificates, string serverName, int serverPort, Encoding encoding) : this(protocol)\r
189                 {\r
190                         this.certificates       = certificates;\r
191                         this.serverName         = serverName;\r
192                         this.serverPort         = serverPort;\r
193                         this.encoding           = encoding;\r
194                 }\r
195 \r
196                 public TlsSessionSettings(TlsProtocol protocol, X509Certificate[] certificates) \r
197                         : this(protocol, new X509CertificateCollection(certificates))\r
198                 {\r
199                 }\r
200 \r
201                 public TlsSessionSettings(TlsProtocol protocol, X509Certificate[] certificates, Encoding encoding) \r
202                         : this(protocol, new X509CertificateCollection(certificates), encoding)\r
203                 {\r
204                 }\r
205 \r
206                 public TlsSessionSettings(TlsProtocol protocol, X509Certificate[] certificates, string serverName, int serverPort) : \r
207                         this(protocol, new X509CertificateCollection(certificates), serverName, serverPort)\r
208                 {\r
209                 }\r
210 \r
211                 public TlsSessionSettings(TlsProtocol protocol, X509Certificate[] certificates, string serverName, int serverPort, Encoding encoding) : \r
212                         this(protocol, new X509CertificateCollection(certificates), serverName, serverPort, encoding)\r
213                 {\r
214                 }\r
215 \r
216                 #endregion\r
217         }\r
218 }\r