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