-using System;\r
-using System.Collections;\r
-using System.Runtime.Serialization;\r
-using System.Globalization;\r
-\r
-namespace System.Web\r
-{\r
- /// <summary>\r
- /// Summary description for ServerVariablesCollection.\r
- /// </summary>\r
- internal class ServerVariablesCollection:HttpValueCollection\r
- {\r
- private HttpRequest _request;\r
- private bool _loaded = false;\r
- public ServerVariablesCollection(HttpRequest request):base()\r
- {\r
- _request = request;\r
- }\r
-\r
- private void loadServerVariablesCollection()\r
- {\r
- if (_loaded)\r
- return;\r
- MakeReadWrite();\r
- Add("ALL_HTTP", _request.GetAllHeaders(false));\r
- Add("ALL_RAW", _request.GetAllHeaders(true));\r
- Add("APPL_MD_PATH", _request.WorkerRequest.GetServerVariable("APPL_MD_PATH"));\r
- Add("AUTH_PASSWORD", _request.WorkerRequest.GetServerVariable("AUTH_PASSWORD"));\r
- Add("CERT_COOKIE", _request.WorkerRequest.GetServerVariable("CERT_COOKIE"));\r
- Add("CERT_FLAGS", _request.WorkerRequest.GetServerVariable("CERT_FLAGS"));\r
- Add("CERT_ISSUER", _request.WorkerRequest.GetServerVariable("CERT_ISSUER"));\r
- Add("CERT_KEYSIZE", _request.WorkerRequest.GetServerVariable("CERT_KEYSIZE"));\r
- Add("CERT_SECRETKEYSIZE", _request.WorkerRequest.GetServerVariable("CERT_SECRETKEYSIZE"));\r
- Add("CERT_SERIALNUMBER", _request.WorkerRequest.GetServerVariable("CERT_SERIALNUMBER"));\r
- Add("CERT_SERVER_ISSUER", _request.WorkerRequest.GetServerVariable("CERT_SERVER_ISSUER"));\r
- Add("CERT_SERVER_SUBJECT", _request.WorkerRequest.GetServerVariable("CERT_SERVER_SUBJECT"));\r
- Add("CERT_SUBJECT", _request.WorkerRequest.GetServerVariable("CERT_SUBJECT"));\r
- Add("GATEWAY_INTERFACE", _request.WorkerRequest.GetServerVariable("GATEWAY_INTERFACE"));\r
- Add("HTTPS", _request.WorkerRequest.GetServerVariable("HTTPS"));\r
- Add("HTTPS_KEYSIZE", _request.WorkerRequest.GetServerVariable("HTTPS_KEYSIZE"));\r
- Add("HTTPS_SECRETKEYSIZE", _request.WorkerRequest.GetServerVariable("HTTPS_SECRETKEYSIZE"));\r
- Add("CONTENT_TYPE", _request.ContentType);\r
- Add("HTTPS_SERVER_ISSUER", _request.WorkerRequest.GetServerVariable("HTTPS_SERVER_ISSUER"));\r
- Add("HTTPS_SERVER_SUBJECT", _request.WorkerRequest.GetServerVariable("HTTPS_SERVER_SUBJECT"));\r
- Add("INSTANCE_ID", _request.WorkerRequest.GetServerVariable("INSTANCE_ID"));\r
- Add("INSTANCE_META_PATH", _request.WorkerRequest.GetServerVariable("INSTANCE_META_PATH"));\r
- Add("LOCAL_ADDR", _request.WorkerRequest.GetLocalAddress());\r
- Add("REMOTE_ADDR", _request.UserHostAddress);\r
- Add("REMOTE_HOST", _request.UserHostName);\r
- Add("REMOTE_PORT", _request.WorkerRequest.GetRemotePort ().ToString ());\r
- Add("REQUEST_METHOD", _request.HttpMethod);\r
- Add("SERVER_NAME", _request.WorkerRequest.GetServerName());\r
- Add("SERVER_PORT", _request.WorkerRequest.GetLocalPort().ToString());\r
- Add("SERVER_PROTOCOL", _request.WorkerRequest.GetHttpVersion());\r
- Add("SERVER_SOFTWARE", _request.WorkerRequest.GetServerVariable("SERVER_SOFTWARE"));\r
- if (_request.WorkerRequest.IsSecure()) \r
- Add("SERVER_PORT_SECURE", "1");\r
- else \r
- Add("SERVER_PORT_SECURE", "0");\r
-\r
- string sTmp = _request.WorkerRequest.GetKnownRequestHeader(HttpWorkerRequest.HeaderContentLength);\r
- if (null != sTmp) \r
- Add("CONTENT_LENGTH", sTmp);\r
- // TODO: Should be dynamic\r
- if (null != _request.Context.User && _request.Context.User.Identity.IsAuthenticated) \r
- {\r
- Add("AUTH_TYPE", _request.Context.User.Identity.AuthenticationType);\r
- Add("AUTH_USER", _request.Context.User.Identity.Name);\r
- } \r
- else \r
- {\r
- Add("AUTH_TYPE", "");\r
- Add("AUTH_USER", "");\r
- }\r
-\r
- Add("PATH_INFO", _request.PathInfo);\r
- Add("PATH_TRANSLATED", _request.PhysicalPath);\r
- Add("QUERY_STRING", _request.QueryStringRaw);\r
- Add("SCRIPT_NAME", _request.FilePath);\r
- MakeReadOnly();\r
- _loaded = true;\r
- }\r
-\r
- \r
- public override string Get(int index)\r
- {\r
- loadServerVariablesCollection();\r
- return base.Get(index); \r
- }\r
-\r
- public override string Get(string name)\r
- {\r
- string text1;\r
- if (!_loaded)\r
- {\r
- text1 = GetServerVar(name);\r
- if (text1 != null) \r
- return text1; \r
- loadServerVariablesCollection(); \r
- }\r
- return base.Get(name); \r
-\r
- \r
- }\r
-\r
- private string GetServerVar(string name)\r
- {\r
- if (((name == null) || (name.Length <= 8)) || (this._request == null))\r
- return null;\r
- if (string.Compare(name, "AUTH_TYPE", true, CultureInfo.InvariantCulture) == 0)\r
- {\r
- if (null != _request.Context.User && _request.Context.User.Identity.IsAuthenticated) \r
- return _request.Context.User.Identity.AuthenticationType;\r
- else\r
- return string.Empty;\r
- }\r
- else if (string.Compare(name, "AUTH_USER",true, CultureInfo.InvariantCulture) == 0)\r
- {\r
- if (null != _request.Context.User && _request.Context.User.Identity.IsAuthenticated) \r
- return _request.Context.User.Identity.Name;\r
- else\r
- return string.Empty;\r
- }\r
- else if (string.Compare(name, "QUERY_STRING", true, CultureInfo.InvariantCulture) == 0) \r
- return this._request.QueryStringRaw; \r
- else if (string.Compare(name, "PATH_INFO", true, CultureInfo.InvariantCulture) == 0) \r
- return this._request.PathInfo; \r
- else if (string.Compare(name, "PATH_TRANSLATED", true, CultureInfo.InvariantCulture) == 0)\r
- return this._request.PhysicalPath; \r
- else if (string.Compare(name, "REQUEST_METHOD", true, CultureInfo.InvariantCulture) == 0) \r
- return this._request.HttpMethod;\r
- else if (string.Compare(name, "REMOTE_ADDR", true, CultureInfo.InvariantCulture) == 0) \r
- return this._request.UserHostAddress; \r
- else if (string.Compare(name, "REMOTE_HOST", true, CultureInfo.InvariantCulture) == 0) \r
- return this._request.UserHostName; \r
- else if (string.Compare(name, "REMOTE_ADDRESS", true, CultureInfo.InvariantCulture) == 0)\r
- return this._request.UserHostAddress; \r
- else if (string.Compare(name, "SCRIPT_NAME", true, CultureInfo.InvariantCulture) == 0) \r
- return this._request.FilePath;\r
- else if (string.Compare(name, "LOCAL_ADDR", true, CultureInfo.InvariantCulture) == 0) \r
- return this._request.WorkerRequest.GetLocalAddress();\r
- else if (string.Compare(name, "SERVER_PROTOCOL", true, CultureInfo.InvariantCulture) == 0)\r
- return _request.WorkerRequest.GetHttpVersion();\r
- else if (string.Compare(name, "SERVER_SOFTWARE", true, CultureInfo.InvariantCulture) == 0)\r
- return _request.WorkerRequest.GetServerVariable("SERVER_SOFTWARE");\r
- return null; \r
- }\r
- \r
- public override string GetKey(int index)\r
- {\r
- loadServerVariablesCollection();\r
- return base.GetKey(index); \r
- }\r
- \r
- public override string[] GetValues(int index)\r
- {\r
- string text1;\r
- string[] array1;\r
- text1 = Get(index);\r
- if (text1 == null)\r
- {\r
- return null; \r
- }\r
- array1 = new string[1];\r
- array1[0] = text1;\r
- return array1; \r
- }\r
- \r
- public override string[] GetValues(string name)\r
- {\r
- string text1;\r
- string[] array1;\r
- text1 = Get(name);\r
- if (text1 == null)\r
- {\r
- return null; \r
- }\r
- array1 = new string[1];\r
- array1[0] = text1;\r
- return array1; \r
- }\r
- \r
- public override void GetObjectData(SerializationInfo info, StreamingContext context)\r
- {\r
- throw new SerializationException(); \r
- }\r
-\r
- public override string[] AllKeys
+//
+// System.Web.ServerVariablesCollection
+//
+// Authors:
+// Alon Gazit (along@mainsoft.com)
+// Miguel de Icaza (miguel@novell.com)
+// Gonzalo Paniagua Javier (gonzalo@novell.com)
+//
+// (c) 2004 Mainsoft, Inc. (http://www.mainsoft.com)
+// Copyright (C) 2005 Novell, Inc (http://www.novell.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System.Text;
+using System.Collections;
+using System.Collections.Specialized;
+using System.Runtime.Serialization;
+using System.Globalization;
+using System.Security.Permissions;
+using System.Web.Util;
+
+namespace System.Web
+{
+ class ServerVariablesCollection : BaseParamsCollection
+ {
+ HttpRequest request;
+ bool loaded;
+
+ string QueryString {
+ get {
+ string qs = _request.QueryStringRaw;
+
+ if (String.IsNullOrEmpty (qs))
+ return qs;
+
+ if (qs [0] == '?')
+ return qs.Substring (1);
+
+ return qs;
+ }
+ }
+
+ public ServerVariablesCollection(HttpRequest request) : base(request)
+ {
+ IsReadOnly = true;
+ this.request = request;
+ }
+
+ void AppendKeyValue (StringBuilder sb, string key, string value, bool standard)
+ {
+ //
+ // Standard has HTTP_ prefix, everything is uppercase, has no space
+ // after colon, - is changed to _
+ //
+ // Raw is header, colon, space, values, raw.
+ //
+ if (standard){
+ sb.Append ("HTTP_");
+ sb.Append (key.ToUpper (Helpers.InvariantCulture).Replace ('-', '_'));
+ sb.Append (":");
+ } else {
+ sb.Append (key);
+ sb.Append (": ");
+ }
+ sb.Append (value);
+ sb.Append ("\r\n");
+ }
+
+ string Fill (HttpWorkerRequest wr, bool standard)
{
- get \r
- {
- loadServerVariablesCollection();
- return base.AllKeys;
+ StringBuilder sb = new StringBuilder ();
+
+ for (int i = 0; i < HttpWorkerRequest.RequestHeaderMaximum; i++){
+ string val = wr.GetKnownRequestHeader (i);
+ if (val == null || val == "")
+ continue;
+ string key = HttpWorkerRequest.GetKnownRequestHeaderName (i);
+ AppendKeyValue (sb, key, val, standard);
+ }
+ string [][] other = wr.GetUnknownRequestHeaders ();
+ if (other == null)
+ return sb.ToString ();
+
+ for (int i = other.Length; i > 0; ){
+ i--;
+ AppendKeyValue (sb, other [i][0], other [i][1], standard);
}
- }\r
-\r
- public override int Count
+
+ return sb.ToString ();
+ }
+
+ void AddHeaderVariables (HttpWorkerRequest wr)
+ {
+ string hname;
+ string hvalue;
+
+ // Add all known headers
+ for (int i = 0; i < HttpWorkerRequest.RequestHeaderMaximum; i++) {
+ hvalue = wr.GetKnownRequestHeader (i);
+ if (null != hvalue && hvalue.Length > 0) {
+ hname = HttpWorkerRequest.GetKnownRequestHeaderName (i);
+ if (null != hname && hname.Length > 0)
+ Add ("HTTP_" + hname.ToUpper (Helpers.InvariantCulture).Replace ('-', '_'), hvalue);
+ }
+ }
+
+ // Get all other headers
+ string [][] unknown = wr.GetUnknownRequestHeaders ();
+ if (null != unknown) {
+ for (int i = 0; i < unknown.Length; i++) {
+ hname = unknown [i][0];
+ if (hname == null)
+ continue;
+ hvalue = unknown [i][1];
+ Add ("HTTP_" + hname.ToUpper (Helpers.InvariantCulture).Replace ('-', '_'), hvalue);
+ }
+ }
+ }
+
+ void loadServerVariablesCollection()
+ {
+ HttpWorkerRequest wr = request.WorkerRequest;
+ if (loaded || (wr == null))
+ return;
+
+ IsReadOnly = false;
+
+ Add("ALL_HTTP", Fill (wr, true));
+ Add("ALL_RAW", Fill (wr, false));
+
+ Add("APPL_MD_PATH", wr.GetServerVariable("APPL_MD_PATH"));
+ Add("APPL_PHYSICAL_PATH", wr.GetServerVariable("APPL_PHYSICAL_PATH"));
+
+ if (null != request.Context.User && request.Context.User.Identity.IsAuthenticated) {
+ Add ("AUTH_TYPE", request.Context.User.Identity.AuthenticationType);
+ Add ("AUTH_USER", request.Context.User.Identity.Name);
+ } else {
+ Add ("AUTH_TYPE", "");
+ Add ("AUTH_USER", "");
+ }
+
+ Add("AUTH_PASSWORD", wr.GetServerVariable("AUTH_PASSWORD"));
+ Add ("LOGON_USER", wr.GetServerVariable("LOGON_USER"));
+ Add ("REMOTE_USER", wr.GetServerVariable("REMOTE_USER"));
+ Add("CERT_COOKIE", wr.GetServerVariable("CERT_COOKIE"));
+ Add("CERT_FLAGS", wr.GetServerVariable("CERT_FLAGS"));
+ Add("CERT_ISSUER", wr.GetServerVariable("CERT_ISSUER"));
+ Add("CERT_KEYSIZE", wr.GetServerVariable("CERT_KEYSIZE"));
+ Add("CERT_SECRETKEYSIZE", wr.GetServerVariable("CERT_SECRETKEYSIZE"));
+ Add("CERT_SERIALNUMBER", wr.GetServerVariable("CERT_SERIALNUMBER"));
+ Add("CERT_SERVER_ISSUER", wr.GetServerVariable("CERT_SERVER_ISSUER"));
+ Add("CERT_SERVER_SUBJECT", wr.GetServerVariable("CERT_SERVER_SUBJECT"));
+ Add("CERT_SUBJECT", wr.GetServerVariable("CERT_SUBJECT"));
+
+ string sTmp = wr.GetKnownRequestHeader(HttpWorkerRequest.HeaderContentLength);
+ if (null != sTmp)
+ Add ("CONTENT_LENGTH", sTmp);
+ Add ("CONTENT_TYPE", request.ContentType);
+
+ Add("GATEWAY_INTERFACE", wr.GetServerVariable("GATEWAY_INTERFACE"));
+ Add("HTTPS", wr.GetServerVariable("HTTPS"));
+ Add("HTTPS_KEYSIZE", wr.GetServerVariable("HTTPS_KEYSIZE"));
+ Add("HTTPS_SECRETKEYSIZE", wr.GetServerVariable("HTTPS_SECRETKEYSIZE"));
+ Add("HTTPS_SERVER_ISSUER", wr.GetServerVariable("HTTPS_SERVER_ISSUER"));
+ Add("HTTPS_SERVER_SUBJECT", wr.GetServerVariable("HTTPS_SERVER_SUBJECT"));
+ Add("INSTANCE_ID", wr.GetServerVariable("INSTANCE_ID"));
+ Add("INSTANCE_META_PATH", wr.GetServerVariable("INSTANCE_META_PATH"));
+ Add("LOCAL_ADDR", wr.GetLocalAddress());
+ Add("PATH_INFO", request.PathInfo);
+ Add("PATH_TRANSLATED", request.PhysicalPath);
+ Add("QUERY_STRING", QueryString);
+ Add("REMOTE_ADDR", request.UserHostAddress);
+ Add("REMOTE_HOST", request.UserHostName);
+ Add("REMOTE_PORT", wr.GetRemotePort ().ToString ());
+ Add("REQUEST_METHOD", request.HttpMethod);
+ Add("SCRIPT_NAME", request.FilePath);
+ Add("SERVER_NAME", wr.GetServerName());
+ Add("SERVER_PORT", wr.GetLocalPort().ToString());
+ if (wr.IsSecure())
+ Add("SERVER_PORT_SECURE", "1");
+ else
+ Add("SERVER_PORT_SECURE", "0");
+ Add("SERVER_PROTOCOL", wr.GetHttpVersion());
+ Add("SERVER_SOFTWARE", wr.GetServerVariable("SERVER_SOFTWARE"));
+ Add ("URL", request.FilePath);
+
+ AddHeaderVariables (wr);
+
+ IsReadOnly = true;
+ loaded = true;
+ }
+
+ protected override void InsertInfo ()
+ {
+ loadServerVariablesCollection ();
+ }
+
+ protected override string InternalGet (string name)
{
- get \r
- {
- loadServerVariablesCollection();
- return base.Count;
+ if ((name == null) || (this._request == null))
+ return null;
+ name = name.ToUpper (Helpers.InvariantCulture);
+ switch (name) {
+ case "AUTH_TYPE":
+ if (null != _request.Context.User && _request.Context.User.Identity.IsAuthenticated)
+ return _request.Context.User.Identity.AuthenticationType;
+ else
+ return string.Empty;
+ case "AUTH_USER":
+ if (null != _request.Context.User && _request.Context.User.Identity.IsAuthenticated)
+ return _request.Context.User.Identity.Name;
+ else
+ return string.Empty;
+ case "QUERY_STRING":
+ return QueryString;
+ case "PATH_INFO":
+ return this._request.PathInfo;
+ case "PATH_TRANSLATED":
+ return this._request.PhysicalPath;
+ case "REQUEST_METHOD":
+ return this._request.HttpMethod;
+ case "REMOTE_ADDR":
+ return this._request.UserHostAddress;
+ case "REMOTE_HOST":
+ return this._request.UserHostName;
+ case "REMOTE_ADDRESS":
+ return this._request.UserHostAddress;
+ case "SCRIPT_NAME":
+ return this._request.FilePath;
+ case "LOCAL_ADDR":
+ return this._request.WorkerRequest.GetLocalAddress ();
+ case "SERVER_PROTOCOL":
+ return _request.WorkerRequest.GetHttpVersion ();
+ case "CONTENT_TYPE":
+ return _request.ContentType;
+ case "REMOTE_PORT":
+ return _request.WorkerRequest.GetRemotePort ().ToString ();
+ case "SERVER_NAME":
+ return _request.WorkerRequest.GetServerName ();
+ case "SERVER_PORT":
+ return _request.WorkerRequest.GetLocalPort ().ToString ();
+ case "APPL_PHYSICAL_PATH":
+ return _request.WorkerRequest.GetAppPathTranslated ();
+ case "REMOTE_USER":
+ return (_request.Context.User != null && _request.Context.User.Identity.IsAuthenticated) ?
+ _request.Context.User.Identity.Name :
+ String.Empty;
+ case "URL":
+ return _request.FilePath;
+ case "SERVER_PORT_SECURE":
+ return (_request.WorkerRequest.IsSecure ()) ? "1" : "0";
+ case "ALL_HTTP":
+ return Fill (_request.WorkerRequest, true);
+ case "ALL_RAW":
+ return Fill (_request.WorkerRequest, false);
+ case "SERVER_SOFTWARE":
+ case "APPL_MD_PATH":
+ case "AUTH_PASSWORD":
+ case "CERT_COOKIE":
+ case "CERT_FLAGS":
+ case "CERT_ISSUER":
+ case "CERT_KEYSIZE":
+ case "CERT_SECRETKEYSIZE":
+ case "CERT_SERIALNUMBER":
+ case "CERT_SERVER_ISSUER":
+ case "CERT_SERVER_SUBJECT":
+ case "GATEWAY_INTERFACE":
+ case "HTTPS":
+ case "HTTPS_KEYSIZE":
+ case "HTTPS_SECRETKEYSIZE":
+ case "HTTPS_SERVER_ISSUER":
+ case "HTTPS_SERVER_SUBJECT":
+ case "INSTANCE_ID":
+ case "INSTANCE_META_PATH":
+ case "LOGON_USER":
+ case "HTTP_ACCEPT":
+ case "HTTP_REFERER":
+ case "HTTP_ACCEPT_LANGUAGE":
+ case "HTTP_ACCEPT_ENCODING":
+ case "HTTP_CONNECTION":
+ case "HTTP_HOST":
+ case "HTTP_USER_AGENT":
+ case "HTTP_SOAPACTION":
+ return _request.WorkerRequest.GetServerVariable (name);
+ default:
+ return null;
}
- } \r
- }\r
-}\r
+ }
+ }
+}