Przeglądaj źródła

2005-04-19 Gonzalo Paniagua Javier <[email protected]>

	* ServerVariablesCollection.cs: shuffled variables, added missing ones
	and call a method in HttpRequest to set the HTTP_ variables.

	* HttpRequest.cs: new method to add HTTP_ variables to a collection.


svn path=/trunk/mcs/; revision=43306
Gonzalo Paniagua Javier 21 lat temu
rodzic
commit
cc0d374e7c

+ 7 - 0
mcs/class/System.Web/System.Web/ChangeLog

@@ -1,3 +1,10 @@
+2005-04-19 Gonzalo Paniagua Javier <[email protected]>
+
+	* ServerVariablesCollection.cs: shuffled variables, added missing ones
+	and call a method in HttpRequest to set the HTTP_ variables.
+
+	* HttpRequest.cs: new method to add HTTP_ variables to a collection.
+
 2005-04-19 Gonzalo Paniagua Javier <[email protected]>
 
 	* HttpRequest.cs: GetAllHeaders was returning the value twice instead

+ 35 - 7
mcs/class/System.Web/System.Web/HttpRequest.cs

@@ -121,8 +121,33 @@ namespace System.Web {
 			_iTotalBytes = -1;
 		}
 
-		static private string MakeServerVariableFromHeader(string header) {
-			return "HTTP_" + header.ToUpper().Replace("-", "_");
+		internal void AddHeaderVariables (ServerVariablesCollection coll)
+		{
+			if (null == _WorkerRequest)
+				return;
+
+			string hname;
+			string hvalue;
+
+			// Add all known headers
+			for (int i = 0; i < HttpWorkerRequest.RequestHeaderMaximum; i++) {
+				hvalue = _WorkerRequest.GetKnownRequestHeader (i);
+				if (null != hvalue && hvalue.Length > 0) {
+					hname = HttpWorkerRequest.GetKnownRequestHeaderName (i);
+					if (null != hname && hname.Length > 0)
+						coll.Add ("HTTP_" + hname.ToUpper ().Replace ('-', '_'), hvalue);
+				}
+			}
+
+			// Get all other headers
+			string [][] unknown = _WorkerRequest.GetUnknownRequestHeaders ();
+			if (null != unknown) {
+				for (int i = 0; i < unknown.Length; i++) {
+					hname = unknown [i][0];
+					hvalue = unknown [i][1];
+					coll.Add ("HTTP_" + hname.ToUpper ().Replace ('-', '_'), hvalue);
+				}
+			}
 		}
 
 		internal string GetAllHeaders(bool raw) {
@@ -138,7 +163,7 @@ namespace System.Web {
 			string sHeaderName;
 			int iCount = 0;
 
-			// Add all know headers
+			// Add all known headers
 			for (; iCount != HttpWorkerRequest.RequestHeaderMaximum; iCount++) {
 				sHeaderValue = _WorkerRequest.GetKnownRequestHeader(iCount);
 				if (null != sHeaderValue && sHeaderValue.Length > 0) {
@@ -157,14 +182,17 @@ namespace System.Web {
 				}
 			}
 
-			if (!raw)
-				return oData.ToString ();
-
 			// Get all other headers
 			string [][] arrUnknownHeaders = _WorkerRequest.GetUnknownRequestHeaders();
 			if (null != arrUnknownHeaders) {
 				for (iCount = 0; iCount != arrUnknownHeaders.Length; iCount++) {
-					oData.Append(arrUnknownHeaders[iCount][0]);
+					string hname = arrUnknownHeaders[iCount][0];
+					if (raw) {
+						oData.Append (hname);
+					} else {
+						oData.Append ("HTTP_");
+						oData.Append (hname.ToUpper ().Replace ('-', '_'));
+					}
 					oData.Append(": ");
 					oData.Append(arrUnknownHeaders[iCount][1]);
 					oData.Append("\r\n");

+ 30 - 25
mcs/class/System.Web/System.Web/ServerVariablesCollection.cs

@@ -39,7 +39,8 @@ namespace System.Web
 	{
 		private HttpRequest _request;
 		private bool _loaded = false;
-		public ServerVariablesCollection(HttpRequest request):base()
+
+		public ServerVariablesCollection(HttpRequest request)
 		{
 			_request = request;
 		}
@@ -52,7 +53,19 @@ namespace System.Web
 			Add("ALL_HTTP", _request.GetAllHeaders(false));
 			Add("ALL_RAW", _request.GetAllHeaders(true));
 			Add("APPL_MD_PATH", _request.WorkerRequest.GetServerVariable("APPL_MD_PATH"));
+			Add("APPL_PHYSICAL_PATH", _request.WorkerRequest.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", _request.WorkerRequest.GetServerVariable("AUTH_PASSWORD"));
+			Add ("LOGON_USER", _request.WorkerRequest.GetServerVariable("LOGON_USER"));
+			Add ("REMOTE_USER", _request.WorkerRequest.GetServerVariable("REMOTE_USER"));
 			Add("CERT_COOKIE", _request.WorkerRequest.GetServerVariable("CERT_COOKIE"));
 			Add("CERT_FLAGS", _request.WorkerRequest.GetServerVariable("CERT_FLAGS"));
 			Add("CERT_ISSUER", _request.WorkerRequest.GetServerVariable("CERT_ISSUER"));
@@ -62,48 +75,40 @@ namespace System.Web
 			Add("CERT_SERVER_ISSUER", _request.WorkerRequest.GetServerVariable("CERT_SERVER_ISSUER"));
 			Add("CERT_SERVER_SUBJECT", _request.WorkerRequest.GetServerVariable("CERT_SERVER_SUBJECT"));
 			Add("CERT_SUBJECT", _request.WorkerRequest.GetServerVariable("CERT_SUBJECT"));
+
+			string sTmp = _request.WorkerRequest.GetKnownRequestHeader(HttpWorkerRequest.HeaderContentLength);
+			if (null != sTmp)
+				Add ("CONTENT_LENGTH", sTmp);
+			Add ("CONTENT_TYPE", _request.ContentType);
+
 			Add("GATEWAY_INTERFACE", _request.WorkerRequest.GetServerVariable("GATEWAY_INTERFACE"));
 			Add("HTTPS", _request.WorkerRequest.GetServerVariable("HTTPS"));
 			Add("HTTPS_KEYSIZE", _request.WorkerRequest.GetServerVariable("HTTPS_KEYSIZE"));
 			Add("HTTPS_SECRETKEYSIZE", _request.WorkerRequest.GetServerVariable("HTTPS_SECRETKEYSIZE"));
-			Add("CONTENT_TYPE", _request.ContentType);
 			Add("HTTPS_SERVER_ISSUER", _request.WorkerRequest.GetServerVariable("HTTPS_SERVER_ISSUER"));
 			Add("HTTPS_SERVER_SUBJECT", _request.WorkerRequest.GetServerVariable("HTTPS_SERVER_SUBJECT"));
 			Add("INSTANCE_ID", _request.WorkerRequest.GetServerVariable("INSTANCE_ID"));
 			Add("INSTANCE_META_PATH", _request.WorkerRequest.GetServerVariable("INSTANCE_META_PATH"));
 			Add("LOCAL_ADDR", _request.WorkerRequest.GetLocalAddress());
+			Add("PATH_INFO", _request.PathInfo);
+			Add("PATH_TRANSLATED", _request.PhysicalPath);
+			Add("QUERY_STRING", _request.QueryStringRaw);
 			Add("REMOTE_ADDR", _request.UserHostAddress);
 			Add("REMOTE_HOST", _request.UserHostName);
 			Add("REMOTE_PORT", _request.WorkerRequest.GetRemotePort ().ToString ());
 			Add("REQUEST_METHOD", _request.HttpMethod);
+			Add("SCRIPT_NAME", _request.FilePath);
 			Add("SERVER_NAME", _request.WorkerRequest.GetServerName());
 			Add("SERVER_PORT", _request.WorkerRequest.GetLocalPort().ToString());
+			if (_request.WorkerRequest.IsSecure()) 
+				Add("SERVER_PORT_SECURE", "1");
+			else
+				Add("SERVER_PORT_SECURE", "0");
 			Add("SERVER_PROTOCOL", _request.WorkerRequest.GetHttpVersion());
 			Add("SERVER_SOFTWARE", _request.WorkerRequest.GetServerVariable("SERVER_SOFTWARE"));
-			if (_request.WorkerRequest.IsSecure()) 
-				Add("SERVER_PORT_SECURE", "1");
-			else 
-				Add("SERVER_PORT_SECURE", "0");
-
-			string sTmp = _request.WorkerRequest.GetKnownRequestHeader(HttpWorkerRequest.HeaderContentLength);
-			if (null != sTmp) 
-				Add("CONTENT_LENGTH", sTmp);
-			// TODO: Should be dynamic
-			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 ("URL", _request.Url.AbsolutePath);
 
-			Add("PATH_INFO", _request.PathInfo);
-			Add("PATH_TRANSLATED", _request.PhysicalPath);
-			Add("QUERY_STRING", _request.QueryStringRaw);
-			Add("SCRIPT_NAME", _request.FilePath);
+			_request.AddHeaderVariables (this);
 			MakeReadOnly();
 			_loaded = true;
 		}