diff options
author | Patrik Torstensson <totte@mono-cvs.ximian.com> | 2002-04-10 12:42:30 +0400 |
---|---|---|
committer | Patrik Torstensson <totte@mono-cvs.ximian.com> | 2002-04-10 12:42:30 +0400 |
commit | 44f6e8a3317327eba8d07c50832f5e939729c3b5 (patch) | |
tree | f5cfe581f485b49cc286c754f137816ba1ce360d /mcs/class/System.Web/System.Web.Hosting/SimpleWorkerRequest.cs | |
parent | e79159ff2d1ddac821408a4d730f81db2a4692cb (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.cs | 277 |
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);
+ }
+ }
+ }
+}
|