Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPatrik Torstensson <totte@mono-cvs.ximian.com>2002-04-10 12:42:30 +0400
committerPatrik Torstensson <totte@mono-cvs.ximian.com>2002-04-10 12:42:30 +0400
commit44f6e8a3317327eba8d07c50832f5e939729c3b5 (patch)
treef5cfe581f485b49cc286c754f137816ba1ce360d /mcs/class/System.Web/System.Web.Hosting/SimpleWorkerRequest.cs
parente79159ff2d1ddac821408a4d730f81db2a4692cb (diff)
2002-04-10 Patrik Torstensson <patrik.torstensson@labs2.com>
* ApplicationHost.cs: Test implementation to support testing. * SimpleWorkerRequest.cs: Rewrite and a almost full implementation. svn path=/trunk/mcs/; revision=3733
Diffstat (limited to 'mcs/class/System.Web/System.Web.Hosting/SimpleWorkerRequest.cs')
-rw-r--r--mcs/class/System.Web/System.Web.Hosting/SimpleWorkerRequest.cs277
1 files changed, 231 insertions, 46 deletions
diff --git a/mcs/class/System.Web/System.Web.Hosting/SimpleWorkerRequest.cs b/mcs/class/System.Web/System.Web.Hosting/SimpleWorkerRequest.cs
index 88311ed611b..7793e189eef 100644
--- a/mcs/class/System.Web/System.Web.Hosting/SimpleWorkerRequest.cs
+++ b/mcs/class/System.Web/System.Web.Hosting/SimpleWorkerRequest.cs
@@ -1,46 +1,231 @@
-//
-// System.Web.Hosting.SimpleWorkerRequest.cs
-//
-// Author:
-// Bob Smith <bob@thestuff.net>
-//
-// (C) Bob Smith
-//
-
-using System;
-
-namespace System.Web.Hosting
-{
- public class SimpleWorkerRequest : HttpWorkerRequest
- {
- public SimpleWorkerRequest(string page, string query, TextWriter output);
- public SimpleWorkerRequest(string appVirtualDir, string appPhysicalDir, string page, string query, TextWriter output);
- public override string MachineConfigPath {get;}
- public override void EndOfRequest();
- public override void FlushResponse(bool finalFlush);
- public override string GetAppPath();
- public override string GetAppPathTranslated();
- public override string GetFilePath();
- public override string GetFilePathTranslated();
- public override string GetHttpVerbName();
- public override string GetHttpVersion();
- public override string GetLocalAddress();
- public override int GetLocalPort();
- public override string GetPathInfo();
- public override string GetQueryString();
- public override string GetRawUrl();
- public override string GetRemoteAddress();
- public override int GetRemotePort();
- public override string GetServerVariable(string name);
- public override string GetUriPath();
- public override IntPtr GetUserToken();
- public override string MapPath(string path);
- public override void SendKnownResponseHeader(int index, string value);
- public override void SendResponseFromFile(IntPtr handle, long offset, long length);
- public override void SendResponseFromFile(string filename, long offset, long length);
- public override void SendResponseFromMemory(byte[] data, int length);
- public virtual void SendResponseFromMemory(IntPtr data, int length);
- public override void SendStatus(int statusCode, string statusDescription);
- public override void SendUnknownResponseHeader(string name, string value);
- }
-}
+//
+// System.Web.Hosting
+//
+// Author:
+// Patrik Torstensson (Patrik.Torstensson@labs2.com)
+// (class signature from Bob Smith <bob@thestuff.net> (C) )
+//
+using System;
+using System.IO;
+using System.Text;
+
+namespace System.Web.Hosting {
+ [MonoTODO("Implement security demands on the path usage functions (and review)")]
+ public class SimpleWorkerRequest : HttpWorkerRequest {
+ private string _Page;
+ private string _Query;
+ private string _PathInfo;
+ private string _AppVirtualPath;
+ private string _AppPhysicalPath;
+ private string _AppInstallPath;
+ private TextWriter _Output;
+ private bool _HasInstallInfo;
+
+ private SimpleWorkerRequest() {
+ }
+
+ public SimpleWorkerRequest(string Page, string Query, TextWriter Output) {
+ _Page = Page;
+ _Query = Query;
+
+ _AppVirtualPath = System.Threading.Thread.GetDomain().GetData(".ASP.Net.App.VirtualPath").ToString();
+ _AppInstallPath = AppDomain.CurrentDomain.GetData(".ASP.Net.App.InstallPath").ToString();
+ _AppPhysicalPath = CheckAndAddSlash(AppDomain.CurrentDomain.GetData(".ASP.Net.App.Path").ToString());
+
+ _Output = Output;
+
+ if (_AppPhysicalPath == null) {
+ // needs to be in a initialized app domain
+ throw new HttpException("Invalid app domain");
+ }
+
+ _HasInstallInfo = true;
+ }
+
+ public SimpleWorkerRequest(string AppVirtualPath, string AppPhysicalPath, string Page, string Query, TextWriter Output) {
+ if (AppDomain.CurrentDomain.GetData(".ASP.Net.App.Path") == null) {
+ // needs to be in a initialized app domain
+ throw new HttpException("Invalid app domain");
+ }
+
+ _Page = Page;
+ _Query = Query;
+ _AppVirtualPath = AppVirtualPath;
+ _AppPhysicalPath = CheckAndAddSlash(AppPhysicalPath);
+ _Output = Output;
+
+ _HasInstallInfo = true;
+ }
+
+ [MonoTODO("Implement security")]
+ public override string MachineInstallDirectory {
+ get {
+ if (_HasInstallInfo) {
+ return _AppInstallPath;
+ }
+
+ return null;
+ }
+ }
+
+ [MonoTODO("Get config path from Web.Config class")]
+ public override string MachineConfigPath {
+ get {
+ return MachineConfigPath;
+ }
+ }
+
+ public override void EndOfRequest() {
+ }
+
+ public override void FlushResponse(bool finalFlush) {
+ _Output.Flush();
+ }
+
+ public override string GetAppPath() {
+ return _AppVirtualPath;
+ }
+
+ [MonoTODO("Implement security")]
+ public override string GetAppPathTranslated() {
+ return _AppPhysicalPath;
+ }
+
+ public override string GetFilePath() {
+ return CreatePath(false);
+ }
+
+ [MonoTODO("Implement security")]
+ public override string GetFilePathTranslated() {
+ return _AppPhysicalPath + _Page.Replace('/', '\\');
+ }
+
+ public override string GetHttpVerbName() {
+ return "GET";
+ }
+
+ public override string GetHttpVersion() {
+ return "HTTP/1.0";
+ }
+
+ public override string GetLocalAddress() {
+ return "127.0.0.1";
+ }
+
+ public override int GetLocalPort() {
+ return 80;
+ }
+
+ [MonoTODO("Implement security")]
+ public override string GetPathInfo() {
+ if (null != _PathInfo) {
+ return _PathInfo;
+ }
+
+ return System.String.Empty;
+ }
+
+ public override string GetQueryString() {
+ return _Query;
+ }
+
+ public override string GetRawUrl() {
+ if (null != _Query && _Query.Length > 0) {
+ return CreatePath(true) + "?" + _Query;
+ }
+
+ return CreatePath(true);
+ }
+
+ public override string GetRemoteAddress() {
+ return "127.0.0.1";
+ }
+
+ public override int GetRemotePort() {
+ return 0;
+ }
+
+ public override string GetServerVariable(string name) {
+ return System.String.Empty;
+ }
+
+ public override string GetUriPath() {
+ return CreatePath(true);
+ }
+
+ public override IntPtr GetUserToken() {
+ return System.IntPtr.Zero;
+ }
+
+ public override string MapPath(string path) {
+ string sPath = _AppPhysicalPath.Substring(0, _AppPhysicalPath.Length - 1);
+ if (path != null && path.Length > 0 && path != "/") {
+ return sPath;
+ }
+
+ if (path.StartsWith(_AppVirtualPath)) {
+ return sPath + path.Substring(_AppVirtualPath.Length).Replace('/', '\\');
+ }
+
+ return null;
+ }
+
+ public override void SendKnownResponseHeader(int index, string value) {
+ }
+
+ public override void SendResponseFromFile(IntPtr handle, long offset, long length) {
+ }
+
+ public override void SendResponseFromFile(string filename, long offset, long length) {
+ }
+
+ public override void SendResponseFromMemory(byte[] data, int length) {
+ _Output.Write(Encoding.Default.GetChars(data, 0, length));
+ }
+
+ public override void SendStatus(int statusCode, string statusDescription) {
+ }
+
+ public override void SendUnknownResponseHeader(string name, string value) {
+ }
+
+ // Create's a path string
+ private string CheckAndAddSlash(string sPath) {
+ if (null == sPath) {
+ return null;
+ }
+
+ if (!sPath.EndsWith("\\")) {
+ return sPath + "\\";
+ }
+
+ return sPath;
+ }
+
+ // Create's a path string
+ private string CreatePath(bool bIncludePathInfo) {
+ string sPath;
+
+ if ("/" == _AppVirtualPath) {
+ sPath = _AppVirtualPath + "/" + _Page;
+ } else {
+ sPath = "/" + _Page;
+ }
+
+ if (bIncludePathInfo && null != _PathInfo) {
+ return sPath + _PathInfo;
+ }
+
+ return sPath;
+ }
+
+ // Parses out the string after / know as the "path info"
+ private void ParsePathInfo() {
+ int iPos = _Page.IndexOf("/");
+ if (iPos >= 0) {
+ _PathInfo = _Page.Substring(iPos);
+ _Page = _Page.Substring(0, iPos);
+ }
+ }
+ }
+}