error messages review
[mono.git] / mcs / class / System.Web / System.Web / ServerVariablesCollection.cs
1 //
2 // System.Web.ServerVariablesCollection
3 //
4 // Authors:
5 //      Alon Gazit (along@mainsoft.com)
6 //
7 // (c) 2004 Mainsoft, Inc. (http://www.mainsoft.com)
8 //\r
9
10 //
11 // Permission is hereby granted, free of charge, to any person obtaining
12 // a copy of this software and associated documentation files (the
13 // "Software"), to deal in the Software without restriction, including
14 // without limitation the rights to use, copy, modify, merge, publish,
15 // distribute, sublicense, and/or sell copies of the Software, and to
16 // permit persons to whom the Software is furnished to do so, subject to
17 // the following conditions:
18 // 
19 // The above copyright notice and this permission notice shall be
20 // included in all copies or substantial portions of the Software.
21 // 
22 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
23 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
24 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
25 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
26 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
27 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
28 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
29 //
30 using System;\r
31 using System.Collections;\r
32 using System.Runtime.Serialization;\r
33 using System.Globalization;\r
34 \r
35 namespace System.Web\r
36 {\r
37 \r
38         internal class ServerVariablesCollection:HttpValueCollection\r
39         {\r
40                 private HttpRequest _request;\r
41                 private bool _loaded = false;\r
42
43                 public ServerVariablesCollection(HttpRequest request)
44                 {\r
45                         _request = request;\r
46                 }\r
47 \r
48                 private void loadServerVariablesCollection()\r
49                 {\r
50                         if (_loaded)\r
51                                 return;\r
52                         MakeReadWrite();\r
53                         Add("ALL_HTTP", _request.GetAllHeaders(false));\r
54                         Add("ALL_RAW", _request.GetAllHeaders(true));\r
55                         Add("APPL_MD_PATH", _request.WorkerRequest.GetServerVariable("APPL_MD_PATH"));\r
56                         Add("APPL_PHYSICAL_PATH", _request.WorkerRequest.GetServerVariable("APPL_PHYSICAL_PATH"));\r
57
58                         if (null != _request.Context.User && _request.Context.User.Identity.IsAuthenticated) {
59                                 Add ("AUTH_TYPE", _request.Context.User.Identity.AuthenticationType);
60                                 Add ("AUTH_USER", _request.Context.User.Identity.Name);
61                         } else {
62                                 Add ("AUTH_TYPE", "");
63                                 Add ("AUTH_USER", "");
64                         }
65
66                         Add("AUTH_PASSWORD", _request.WorkerRequest.GetServerVariable("AUTH_PASSWORD"));\r
67                         Add ("LOGON_USER", _request.WorkerRequest.GetServerVariable("LOGON_USER"));
68                         Add ("REMOTE_USER", _request.WorkerRequest.GetServerVariable("REMOTE_USER"));
69                         Add("CERT_COOKIE", _request.WorkerRequest.GetServerVariable("CERT_COOKIE"));\r
70                         Add("CERT_FLAGS", _request.WorkerRequest.GetServerVariable("CERT_FLAGS"));\r
71                         Add("CERT_ISSUER", _request.WorkerRequest.GetServerVariable("CERT_ISSUER"));\r
72                         Add("CERT_KEYSIZE", _request.WorkerRequest.GetServerVariable("CERT_KEYSIZE"));\r
73                         Add("CERT_SECRETKEYSIZE", _request.WorkerRequest.GetServerVariable("CERT_SECRETKEYSIZE"));\r
74                         Add("CERT_SERIALNUMBER", _request.WorkerRequest.GetServerVariable("CERT_SERIALNUMBER"));\r
75                         Add("CERT_SERVER_ISSUER", _request.WorkerRequest.GetServerVariable("CERT_SERVER_ISSUER"));\r
76                         Add("CERT_SERVER_SUBJECT", _request.WorkerRequest.GetServerVariable("CERT_SERVER_SUBJECT"));\r
77                         Add("CERT_SUBJECT", _request.WorkerRequest.GetServerVariable("CERT_SUBJECT"));\r
78
79                         string sTmp = _request.WorkerRequest.GetKnownRequestHeader(HttpWorkerRequest.HeaderContentLength);
80                         if (null != sTmp)
81                                 Add ("CONTENT_LENGTH", sTmp);
82                         Add ("CONTENT_TYPE", _request.ContentType);
83
84                         Add("GATEWAY_INTERFACE", _request.WorkerRequest.GetServerVariable("GATEWAY_INTERFACE"));\r
85                         Add("HTTPS", _request.WorkerRequest.GetServerVariable("HTTPS"));\r
86                         Add("HTTPS_KEYSIZE", _request.WorkerRequest.GetServerVariable("HTTPS_KEYSIZE"));\r
87                         Add("HTTPS_SECRETKEYSIZE", _request.WorkerRequest.GetServerVariable("HTTPS_SECRETKEYSIZE"));\r
88                         Add("HTTPS_SERVER_ISSUER", _request.WorkerRequest.GetServerVariable("HTTPS_SERVER_ISSUER"));\r
89                         Add("HTTPS_SERVER_SUBJECT", _request.WorkerRequest.GetServerVariable("HTTPS_SERVER_SUBJECT"));\r
90                         Add("INSTANCE_ID", _request.WorkerRequest.GetServerVariable("INSTANCE_ID"));\r
91                         Add("INSTANCE_META_PATH", _request.WorkerRequest.GetServerVariable("INSTANCE_META_PATH"));\r
92                         Add("LOCAL_ADDR", _request.WorkerRequest.GetLocalAddress());\r
93                         Add("PATH_INFO", _request.PathInfo);\r
94                         Add("PATH_TRANSLATED", _request.PhysicalPath);\r
95                         Add("QUERY_STRING", _request.QueryStringRaw);\r
96                         Add("REMOTE_ADDR", _request.UserHostAddress);\r
97                         Add("REMOTE_HOST", _request.UserHostName);\r
98                         Add("REMOTE_PORT", _request.WorkerRequest.GetRemotePort ().ToString ());\r
99                         Add("REQUEST_METHOD", _request.HttpMethod);\r
100                         Add("SCRIPT_NAME", _request.FilePath);\r
101                         Add("SERVER_NAME", _request.WorkerRequest.GetServerName());\r
102                         Add("SERVER_PORT", _request.WorkerRequest.GetLocalPort().ToString());\r
103                         if (_request.WorkerRequest.IsSecure()) 
104                                 Add("SERVER_PORT_SECURE", "1");
105                         else
106                                 Add("SERVER_PORT_SECURE", "0");
107                         Add("SERVER_PROTOCOL", _request.WorkerRequest.GetHttpVersion());\r
108                         Add("SERVER_SOFTWARE", _request.WorkerRequest.GetServerVariable("SERVER_SOFTWARE"));\r
109                         Add ("URL", _request.Url.AbsolutePath);
110 \r
111                         _request.AddHeaderVariables (this);
112                         MakeReadOnly();\r
113                         _loaded = true;\r
114                 }\r
115 \r
116  \r
117                 public override string Get(int index)\r
118                 {\r
119                         loadServerVariablesCollection();\r
120                         return base.Get(index); \r
121                 }\r
122 \r
123                 public override string Get(string name)\r
124                 {\r
125                         string text1;\r
126                         if (!_loaded)\r
127                         {\r
128                                 text1 = GetServerVar(name);\r
129                                 if (text1 != null)                              \r
130                                         return text1;                           \r
131                                 loadServerVariablesCollection(); \r
132                         }\r
133                         return base.Get(name); \r
134 \r
135                         \r
136                 }\r
137 \r
138                 private string GetServerVar(string name)\r
139                 {\r
140                         if (((name == null) || (name.Length <= 8)) || (this._request == null))\r
141                                 return null;\r
142                         if (string.Compare(name, "AUTH_TYPE", true, CultureInfo.InvariantCulture) == 0)\r
143                         {\r
144                                 if (null != _request.Context.User && _request.Context.User.Identity.IsAuthenticated) \r
145                                         return _request.Context.User.Identity.AuthenticationType;\r
146                                 else\r
147                                         return string.Empty;\r
148                         }\r
149                         else if (string.Compare(name, "AUTH_USER",true, CultureInfo.InvariantCulture) == 0)\r
150                         {\r
151                                 if (null != _request.Context.User && _request.Context.User.Identity.IsAuthenticated) \r
152                                         return _request.Context.User.Identity.Name;\r
153                                 else\r
154                                         return string.Empty;\r
155                         }\r
156                         else if (string.Compare(name, "QUERY_STRING", true, CultureInfo.InvariantCulture) == 0)                         \r
157                                 return this._request.QueryStringRaw; \r
158                         else if (string.Compare(name, "PATH_INFO", true, CultureInfo.InvariantCulture) == 0)                            \r
159                                 return this._request.PathInfo; \r
160                         else if (string.Compare(name, "PATH_TRANSLATED", true, CultureInfo.InvariantCulture) == 0)\r
161                                 return this._request.PhysicalPath;                      \r
162                         else if (string.Compare(name, "REQUEST_METHOD", true, CultureInfo.InvariantCulture) == 0)                               \r
163                                 return this._request.HttpMethod;\r
164                         else if (string.Compare(name, "REMOTE_ADDR", true, CultureInfo.InvariantCulture) == 0)                  \r
165                                 return this._request.UserHostAddress;                   \r
166                         else if (string.Compare(name, "REMOTE_HOST", true, CultureInfo.InvariantCulture) == 0)                  \r
167                                 return this._request.UserHostName;                      \r
168                         else if (string.Compare(name, "REMOTE_ADDRESS", true, CultureInfo.InvariantCulture) == 0)\r
169                                 return this._request.UserHostAddress; \r
170                         else if (string.Compare(name, "SCRIPT_NAME", true, CultureInfo.InvariantCulture) == 0)                          \r
171                                 return this._request.FilePath;\r
172                         else if (string.Compare(name, "LOCAL_ADDR", true, CultureInfo.InvariantCulture) == 0)                           \r
173                                 return this._request.WorkerRequest.GetLocalAddress();\r
174                         else if (string.Compare(name, "SERVER_PROTOCOL", true, CultureInfo.InvariantCulture) == 0)\r
175                                 return _request.WorkerRequest.GetHttpVersion();\r
176                         else if (string.Compare(name, "SERVER_SOFTWARE", true, CultureInfo.InvariantCulture) == 0)\r
177                                 return _request.WorkerRequest.GetServerVariable("SERVER_SOFTWARE");\r
178                         return null; \r
179                 }\r
180  \r
181                 public override string GetKey(int index)\r
182                 {\r
183                         loadServerVariablesCollection();\r
184                         return base.GetKey(index); \r
185                 }\r
186  \r
187                 public override string[] GetValues(int index)\r
188                 {\r
189                         string text1;\r
190                         string[] array1;\r
191                         text1 = Get(index);\r
192                         if (text1 == null)\r
193                         {\r
194                                 return null; \r
195                         }\r
196                         array1 = new string[1];\r
197                         array1[0] = text1;\r
198                         return array1; \r
199                 }\r
200  \r
201                 public override string[] GetValues(string name)\r
202                 {\r
203                         string text1;\r
204                         string[] array1;\r
205                         text1 = Get(name);\r
206                         if (text1 == null)\r
207                         {\r
208                                 return null; \r
209                         }\r
210                         array1 = new string[1];\r
211                         array1[0] = text1;\r
212                         return array1; \r
213                 }\r
214  \r
215                 public override void GetObjectData(SerializationInfo info, StreamingContext context)\r
216                 {\r
217                         throw new SerializationException(); \r
218                 }\r
219 \r
220                 public override string[] AllKeys 
221                 {
222                         get \r
223                         {
224                                 loadServerVariablesCollection();
225                                 return base.AllKeys;
226                         }
227                 }\r
228 \r
229                 public override int Count 
230                 {
231                         get \r
232                         {
233                                 loadServerVariablesCollection();
234                                 return base.Count;
235                         }
236                 } \r
237         }\r
238 }\r