public void Run(object state) { int requestId = -1; XSPRequestBroker broker = null; try { if (remoteEP == null) { return; } InitialWorkerRequest ir = new InitialWorkerRequest(stream); try { ir.ReadRequestData(); } catch (Exception ex) { if (ir.GotSomeInput) { byte [] badReq = HttpErrors.BadRequest(); Write(badReq, 0, badReq.Length); } throw ex; } RequestData rdata = ir.RequestData; 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); 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); } catch (Exception e) { bool ignore = ((e is RequestLineException) || (e is IOException)); if (!ignore) { Console.WriteLine(e); } try { if (!ignore) { byte [] error = HttpErrors.ServerError(); Write(error, 0, error.Length); } } catch {} try { Close(); } catch {} if (broker != null && requestId != -1) { broker.UnregisterRequest(requestId); } } }
public void Run (object state) { int requestId = -1; XSPRequestBroker broker = null; try { if (remoteEP == null) return; InitialWorkerRequest ir = new InitialWorkerRequest (stream); try { ir.ReadRequestData (); } catch (Exception ex) { if (ir.GotSomeInput) { byte [] badReq = HttpErrors.BadRequest (); Write (badReq, 0, badReq.Length); } throw ex; } RequestData rdata = ir.RequestData; 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); 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); } catch (Exception e) { bool ignore = ((e is RequestLineException) || (e is IOException)); if (!ignore) Console.WriteLine (e); try { if (!ignore) { byte [] error = HttpErrors.ServerError (); Write (error, 0, error.Length); } } catch {} try { Close (); } catch {} if (broker != null && requestId != -1) broker.UnregisterRequest (requestId); } }