Inheritance: Mono.WebServer.MonoWorkerRequest
示例#1
0
        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);
        }
示例#2
0
        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();
        }
示例#3
0
        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);
        }
示例#4
0
 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 ();
 }