示例#1
0
        void HandleInitialException(Exception e)
        {
            //bool ignore = ((e is RequestLineException) || (e is IOException));
            //if (!ignore)
            //	Console.WriteLine (e);

            try {
                if (initial != null && initial.GotSomeInput && sock.Connected)
                {
                    byte [] error = HttpErrors.ServerError();
                    Write(error, 0, error.Length);
                }
            } catch {}

            try {
                Close();
            } catch {}

            if (broker != null && requestId != -1)
            {
                broker.UnregisterRequest(requestId);
            }
        }
示例#2
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)
        {
            XSPRequestBroker broker = (XSPRequestBroker)RequestBroker;
            bool             secure = (ssl != null);
            XSPWorkerRequest 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.GetIssuerName());
                    mwr.AddServerVariable("CERT_SERVER_SUBJECT", server.GetName());
                }
            }

            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);
        }