singrdk/base/Applications/cassini/Host.cs

137 lines
4.2 KiB
C#

//------------------------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All Rights Reserved.
//------------------------------------------------------------------------------
namespace Microsoft.VisualStudio.WebHost
{
using System;
using System.Collections;
using System.Diagnostics;
using System.Globalization;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Web.Hosting;
internal sealed class Host : IRegisteredObject {
private Server _server;
private int _port;
private string _virtualPath;
private string _lowerCasedVirtualPath;
private string _lowerCasedVirtualPathWithTrailingSlash;
private string _physicalPath;
private string _physicalClientScriptPath;
private string _lowerCasedClientScriptPathWithTrailingSlash;
public void Configure(Server server, int port, string virtualPath, string physicalPath, string clientScriptVirtualPath, string clientScriptPath) {
_server = server;
_port = port;
_virtualPath = virtualPath;
_lowerCasedVirtualPath = _virtualPath.ToLower();
_lowerCasedVirtualPathWithTrailingSlash = virtualPath.EndsWith("/") ? virtualPath : virtualPath + "/";
_lowerCasedVirtualPathWithTrailingSlash = _lowerCasedVirtualPathWithTrailingSlash.ToLower();
_physicalPath = physicalPath;
_physicalClientScriptPath = clientScriptPath + "\\";
_lowerCasedClientScriptPathWithTrailingSlash = (clientScriptVirtualPath + "/").ToLower();
}
public void ProcessRequest(Connection conn) {
Request request = new Request(this, conn);
request.Process();
}
public void Shutdown() {
}
void IRegisteredObject.Stop(bool immediate) {
if (_server != null)
_server.HostStopped();
}
public string NormalizedClientScriptPath {
get {
return _lowerCasedClientScriptPathWithTrailingSlash;
}
}
public string NormalizedVirtualPath {
get {
return _lowerCasedVirtualPathWithTrailingSlash;
}
}
public string PhysicalClientScriptPath {
get {
return _physicalClientScriptPath;
}
}
public string PhysicalPath {
get {
return _physicalPath;
}
}
public int Port {
get {
return _port;
}
}
public string VirtualPath {
get {
return _virtualPath;
}
}
public bool IsVirtualPathInApp(String path) {
bool isClientScriptPath;
return IsVirtualPathInApp(path, out isClientScriptPath);
}
public bool IsVirtualPathInApp(String path, out bool isClientScriptPath) {
isClientScriptPath = false;
if (path == null) {
return false;
}
if (_virtualPath == "/" && path.StartsWith("/")) {
if (path.StartsWith(_lowerCasedClientScriptPathWithTrailingSlash))
isClientScriptPath = true;
return true;
}
path = path.ToLower();
if (path.StartsWith(_lowerCasedVirtualPathWithTrailingSlash)) {
return true;
}
if (path == _lowerCasedVirtualPath) {
return true;
}
if (path.StartsWith(_lowerCasedClientScriptPathWithTrailingSlash)) {
isClientScriptPath = true;
return true;
}
return false;
}
public bool IsVirtualPathAppPath(String path) {
if (path == null) {
return false;
}
path = path.ToLower();
return (path == _lowerCasedVirtualPath || path == _lowerCasedVirtualPathWithTrailingSlash);
}
}
}