public void ProcessRequest(int reqId, IPEndPoint localEP, IPEndPoint remoteEP, string verb, string path, string queryString, string protocol, byte [] inputBuffer, string redirect, IntPtr socket, SslInformation ssl) { var broker = (XSPRequestBroker) RequestBroker; bool secure = (ssl != null); var mwr = new XSPWorkerRequest (reqId, broker, this, localEP, remoteEP, verb, path, queryString, protocol, inputBuffer, socket, secure); if (secure) { // note: we're only setting what we use (and not the whole lot) mwr.AddServerVariable ("CERT_KEYSIZE", ssl.KeySize.ToString (CultureInfo.InvariantCulture)); mwr.AddServerVariable ("CERT_SECRETKEYSIZE", ssl.SecretKeySize.ToString (CultureInfo.InvariantCulture)); if (ssl.RawClientCertificate != null) { // the worker need to be able to return it (if asked politely) mwr.SetClientCertificate (ssl.RawClientCertificate); // XSPWorkerRequest will answer, as required, for CERT_COOKIE, CERT_ISSUER, // CERT_SERIALNUMBER and CERT_SUBJECT (as anyway it requires the client // certificate - if it was provided) if (ssl.ClientCertificateValid) { // client cert present (bit0 = 1) and valid (bit1 = 0) mwr.AddServerVariable ("CERT_FLAGS", "1"); } else { // client cert present (bit0 = 1) but invalid (bit1 = 1) mwr.AddServerVariable ("CERT_FLAGS", "3"); } } else { // no client certificate (bit0 = 0) ? does bit1 matter ? mwr.AddServerVariable ("CERT_FLAGS", "0"); } if (ssl.RawServerCertificate != null) { X509Certificate server = ssl.GetServerCertificate (); mwr.AddServerVariable ("CERT_SERVER_ISSUER", server.Issuer); mwr.AddServerVariable ("CERT_SERVER_SUBJECT", server.Subject); } } string translated = mwr.GetFilePathTranslated (); if (path [path.Length - 1] != '/' && Directory.Exists (translated)) redirect = path + '/'; if (redirect != null) { Redirect (mwr, redirect); broker.UnregisterRequest (reqId); return; } ProcessRequest (mwr); }
static void Redirect(XSPWorkerRequest wr, string location) { string host = wr.GetKnownRequestHeader(HttpWorkerRequest.HeaderHost); wr.SendStatus(301, "Moved Permanently"); wr.SendUnknownResponseHeader("Connection", "close"); wr.SendUnknownResponseHeader("Date", DateTime.Now.ToUniversalTime().ToString("r")); wr.SendUnknownResponseHeader("Location", String.Format("http://{0}{1}", host, location)); Encoding enc = Encoding.ASCII; wr.SendUnknownResponseHeader("Content-Type", "text/html; charset=" + enc.WebName); string content = String.Format(content301, host, location); byte [] contentBytes = enc.GetBytes(content); wr.SendUnknownResponseHeader("Content-Length", contentBytes.Length.ToString()); wr.SendResponseFromMemory(contentBytes, contentBytes.Length); wr.FlushResponse(true); wr.CloseConnection(); }
public void ProcessRequest(int reqId, IPEndPoint localEP, IPEndPoint remoteEP, string verb, string path, string queryString, string protocol, byte [] inputBuffer, string redirect, IntPtr socket, SslInformation ssl) { var broker = (XSPRequestBroker)RequestBroker; bool secure = (ssl != null); var mwr = new XSPWorkerRequest(reqId, broker, this, localEP, remoteEP, verb, path, queryString, protocol, inputBuffer, socket, secure); if (secure) { // note: we're only setting what we use (and not the whole lot) mwr.AddServerVariable("CERT_KEYSIZE", ssl.KeySize.ToString(CultureInfo.InvariantCulture)); mwr.AddServerVariable("CERT_SECRETKEYSIZE", ssl.SecretKeySize.ToString(CultureInfo.InvariantCulture)); if (ssl.RawClientCertificate != null) { // the worker need to be able to return it (if asked politely) mwr.SetClientCertificate(ssl.RawClientCertificate); // XSPWorkerRequest will answer, as required, for CERT_COOKIE, CERT_ISSUER, // CERT_SERIALNUMBER and CERT_SUBJECT (as anyway it requires the client // certificate - if it was provided) if (ssl.ClientCertificateValid) { // client cert present (bit0 = 1) and valid (bit1 = 0) mwr.AddServerVariable("CERT_FLAGS", "1"); } else { // client cert present (bit0 = 1) but invalid (bit1 = 1) mwr.AddServerVariable("CERT_FLAGS", "3"); } } else { // no client certificate (bit0 = 0) ? does bit1 matter ? mwr.AddServerVariable("CERT_FLAGS", "0"); } if (ssl.RawServerCertificate != null) { X509Certificate server = ssl.GetServerCertificate(); mwr.AddServerVariable("CERT_SERVER_ISSUER", server.Issuer); mwr.AddServerVariable("CERT_SERVER_SUBJECT", server.Subject); } } string translated = mwr.GetFilePathTranslated(); if (path [path.Length - 1] != '/' && Directory.Exists(translated)) { redirect = path + '/'; } if (redirect != null) { Redirect(mwr, redirect); broker.UnregisterRequest(reqId); return; } ProcessRequest(mwr); }
static void Redirect(XSPWorkerRequest wr, string location) { string host = wr.GetKnownRequestHeader (HttpWorkerRequest.HeaderHost); wr.SendStatus (301, "Moved Permanently"); wr.SendUnknownResponseHeader ("Connection", "close"); wr.SendUnknownResponseHeader ("Date", DateTime.Now.ToUniversalTime ().ToString ("r")); wr.SendUnknownResponseHeader ("Location", String.Format ("http://{0}{1}", host, location)); Encoding enc = Encoding.ASCII; wr.SendUnknownResponseHeader ("Content-Type", "text/html; charset=" + enc.WebName); string content = String.Format (CONTENT301, host, location); byte [] contentBytes = enc.GetBytes (content); wr.SendUnknownResponseHeader ("Content-Length", contentBytes.Length.ToString ()); wr.SendResponseFromMemory (contentBytes, contentBytes.Length); wr.FlushResponse (true); wr.CloseConnection (); }