Mono.WebServer.XSPApplicationHost.ProcessRequest C# (CSharp) Method

ProcessRequest() public method

public ProcessRequest ( int reqId, IPEndPoint localEP, IPEndPoint remoteEP, string verb, string path, string queryString, string protocol, byte inputBuffer, string redirect, IntPtr socket, Mono.WebServer.SslInformation ssl ) : void
reqId int
localEP System.Net.IPEndPoint
remoteEP System.Net.IPEndPoint
verb string
path string
queryString string
protocol string
inputBuffer byte
redirect string
socket System.IntPtr
ssl Mono.WebServer.SslInformation
return void
        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);
        }

Same methods

XSPApplicationHost::ProcessRequest ( int reqId, long localEPAddr, int localEPPort, long remoteEPAdds, int remoteEPPort, string verb, string path, string queryString, string protocol, byte inputBuffer, string redirect, IntPtr socket, Mono.WebServer.SslInformation ssl ) : void

Usage Example

Ejemplo n.º 1
0
        void RunInternal(object state)
        {
            RequestData rdata = initial.RequestData;

            initial.FreeBuffer();
            string vhost = null;             // TODO: read the headers in InitialWorkerRequest
            int    port  = ((IPEndPoint)localEP).Port;

            VPathToHost        vapp = server.GetApplicationForPath(vhost, port, rdata.Path, true);
            XSPApplicationHost host = null;

            if (vapp != null)
            {
                host = (XSPApplicationHost)vapp.AppHost;
            }

            if (host == null)
            {
                byte [] nf = HttpErrors.NotFound(rdata.Path);
                Write(nf, 0, nf.Length);
                Close();
                return;
            }

            broker    = (XSPRequestBroker)vapp.RequestBroker;
            requestId = broker.RegisterRequest(this);

#if MONO
            if (ssl != null)
            {
                SslServerStream s = (stream as SslServerStream);
                ssl.KeySize       = s.CipherStrength;
                ssl.SecretKeySize = s.KeyExchangeStrength;
            }
#endif

            try {
                string redirect;
                vapp.Redirect(rdata.Path, out redirect);
                host.ProcessRequest(requestId, localEP.Address.Address, localEP.Port,
                                    remoteEP.Address.Address, remoteEP.Port, rdata.Verb,
                                    rdata.Path, rdata.QueryString,
                                    rdata.Protocol, rdata.InputBuffer, redirect, sock.Handle, ssl);
            } catch (FileNotFoundException fnf) {
                // We print this one, as it might be a sign of a bad deployment
                // once we require the .exe and Mono.WebServer in bin or the GAC.
                Console.Error.WriteLine(fnf);
            } catch (IOException) {
                // This is ok (including EndOfStreamException)
            } catch (Exception e) {
                Console.Error.WriteLine(e);
            }
        }
XSPApplicationHost