2 // System.Web.ServerVariablesCollection
5 // Alon Gazit (along@mainsoft.com)
7 // (c) 2004 Mainsoft, Inc. (http://www.mainsoft.com)
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:
19 // The above copyright notice and this permission notice shall be
20 // included in all copies or substantial portions of the Software.
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.
31 using System.Collections;
\r
32 using System.Runtime.Serialization;
\r
33 using System.Globalization;
\r
35 namespace System.Web
\r
38 internal class ServerVariablesCollection:HttpValueCollection
\r
40 private HttpRequest _request;
\r
41 private bool _loaded = false;
\r
43 public ServerVariablesCollection(HttpRequest request)
48 private void loadServerVariablesCollection()
\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
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);
62 Add ("AUTH_TYPE", "");
63 Add ("AUTH_USER", "");
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
79 string sTmp = _request.WorkerRequest.GetKnownRequestHeader(HttpWorkerRequest.HeaderContentLength);
81 Add ("CONTENT_LENGTH", sTmp);
82 Add ("CONTENT_TYPE", _request.ContentType);
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");
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);
111 _request.AddHeaderVariables (this);
117 public override string Get(int index)
\r
119 loadServerVariablesCollection();
\r
120 return base.Get(index);
\r
123 public override string Get(string name)
\r
128 text1 = GetServerVar(name);
\r
129 if (text1 != null)
\r
131 loadServerVariablesCollection();
\r
133 return base.Get(name);
\r
138 private string GetServerVar(string name)
\r
140 if (((name == null) || (name.Length <= 8)) || (this._request == null))
\r
142 if (string.Compare(name, "AUTH_TYPE", true, CultureInfo.InvariantCulture) == 0)
\r
144 if (null != _request.Context.User && _request.Context.User.Identity.IsAuthenticated)
\r
145 return _request.Context.User.Identity.AuthenticationType;
\r
147 return string.Empty;
\r
149 else if (string.Compare(name, "AUTH_USER",true, CultureInfo.InvariantCulture) == 0)
\r
151 if (null != _request.Context.User && _request.Context.User.Identity.IsAuthenticated)
\r
152 return _request.Context.User.Identity.Name;
\r
154 return string.Empty;
\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
181 public override string GetKey(int index)
\r
183 loadServerVariablesCollection();
\r
184 return base.GetKey(index);
\r
187 public override string[] GetValues(int index)
\r
191 text1 = Get(index);
\r
196 array1 = new string[1];
\r
201 public override string[] GetValues(string name)
\r
210 array1 = new string[1];
\r
215 public override void GetObjectData(SerializationInfo info, StreamingContext context)
\r
217 throw new SerializationException();
\r
220 public override string[] AllKeys
224 loadServerVariablesCollection();
229 public override int Count
233 loadServerVariablesCollection();