bool TryParseRequest() { Reset(); ReadAllHeaders(); if (_headerBytes == null || _endHeadersOffset < 0 || _headerByteStrings == null || _headerByteStrings.Count == 0) { _connection.WriteErrorAndClose(400); return false; } ParseRequestLine(); // Check for bad path if (IsBadPath()) { _connection.WriteErrorAndClose(400); return false; } // Check if the path is not well formed or is not for the current app if (!_host.IsVirtualPathInApp(_path, out _isClientScriptPath)) { _connection.WriteErrorAndClose(404); return false; } ParseHeaders(); ParsePostedContent(); return true; }
public void Process() { ReadAllHeaders(); if (_headerBytes == null || _endHeadersOffset < 0 || _headerByteStrings == null || _headerByteStrings.Count == 0) { _conn.WriteErrorAndClose(400); return; } ParseRequestLine(); // Check for bad path if (IsBadPath()) { _conn.WriteErrorAndClose(400); return; } // Check if the path is not well formed or is not for the current app bool isClientScriptPath = false; String clientScript = null; if (!_host.IsVirtualPathInApp(_path, out isClientScriptPath, out clientScript)) { _conn.WriteErrorAndClose(404); return; } ParseHeaders(); ParsePostedContent(); if (_verb == "POST" && _contentLength > 0 && _preloadedContentLength < _contentLength) { _conn.Write100Continue(); } // special case for client script if (isClientScriptPath) { _conn.WriteEntireResponseFromFile(_host.PhysicalClientScriptPath + clientScript, false); return; } // special case for directory listing if (ProcessDirectoryListingRequest()) { return; } PrepareResponse(); // Hand the processing over to HttpRuntime HttpRuntime.ProcessRequest(this); }
bool TryParseRequest() { Reset(); ParseRequestLine(); // Check for bad path if (IsBadPath()) { _connection.WriteErrorAndClose(400); return(false); } // Check if the path is not well formed or is not for the current app if (!_host.IsVirtualPathInApp(_path, out _isClientScriptPath)) { _connection.WriteErrorAndClose(404); return(false); } ParseHeaders(); return(true); }
private bool ProcessDirectoryListingRequest() { if (_verb != "GET") { return(false); } String dirPathTranslated = _pathTranslated; if (_pathInfo.Length > 0) { // directory path can never have pathInfo dirPathTranslated = MapPath(_path); } if (!Directory.Exists(dirPathTranslated)) { return(false); } // have to redirect /foo to /foo/ to allow relative links to work if (!_path.EndsWith("/", StringComparison.Ordinal)) { string newPath = _path + "/"; string location = "Location: " + UrlEncodeRedirect(newPath) + "\r\n"; string body = "<html><head><title>Object moved</title></head><body>\r\n" + "<h2>Object moved to <a href='" + newPath + "'>here</a>.</h2>\r\n" + "</body></html>\r\n"; _connection.WriteEntireResponseFromString(302, location, body, false); return(true); } // check for the default file foreach (string filename in defaultFileNames) { string defaultFilePath = dirPathTranslated + "\\" + filename; if (File.Exists(defaultFilePath)) { // pretend the request is for the default file path _path += filename; _filePath = _path; _url = (_queryString != null) ? (_path + "?" + _queryString) : _path; _pathTranslated = defaultFilePath; return(false); // go through normal processing } } // get all files and subdirs FileSystemInfo[] infos = null; try { infos = (new DirectoryInfo(dirPathTranslated)).GetFileSystemInfos(); } catch { } // determine if parent is appropriate string parentPath = null; if (_path.Length > 1) { int i = _path.LastIndexOf('/', _path.Length - 2); parentPath = (i > 0) ?_path.Substring(0, i) : "/"; if (!_host.IsVirtualPathInApp(parentPath)) { parentPath = null; } } _connection.WriteEntireResponseFromString(200, "Content-type: text/html; charset=utf-8\r\n", Messages.FormatDirectoryListing(_path, parentPath, infos), false); return(true); }