/// <summary> /// Clean up context. /// </summary> /// <remarks> /// Make sure to call base.Cleanup() if you override the method. /// </remarks> public virtual void Cleanup() { if (Stream == null) { return; } if (StreamPassedOff) { return; } _sock = null; Stream.Dispose(); Stream = null; _currentRequest.Clear(); _bytesLeft = 0; FirstRequestLineReceived = false; FullRequestReceived = false; FullRequestProcessed = false; MonitorStartMS = 0; StopMonitoring = false; MonitorKeepaliveMS = 0; TriggerKeepalive = false; Cleaned(this, EventArgs.Empty); _parser.Clear(); }
/// <summary> /// Clean up context. /// </summary> /// <remarks> /// Make sure to call base.Cleanup() if you override the method. /// </remarks> public virtual void Cleanup() { if (Stream == null) { return; } Stream.Dispose(); Stream = null; _currentRequest.Clear(); _bytesLeft = 0; Cleaned(this, EventArgs.Empty); _parser.Clear(); }
/// <summary> /// Clean up context. /// </summary> /// <remarks> /// Make sure to call base.Cleanup() if you override the method. /// </remarks> public virtual void Cleanup() { if (Stream != null) { Stream.Close(); _stream = null; //m_stackTraceFromNullingOfStream = Environment.StackTrace; } _currentRequest.Clear(); _bytesLeft = 0; Cleaned(this, EventArgs.Empty); _parser.Clear(); }
/// <summary> /// Clean up context. /// </summary> /// <remarks> /// Make sure to call base.Cleanup() if you override the method. /// </remarks> public virtual void Cleanup() { lock (_syncRoot) { if (Stream != null) { Stream.Dispose(); } Stream = null; _currentRequest.Clear(); _bytesLeft = 0; Cleaned(this, EventArgs.Empty); _parser.Clear(); } }
private void FireRequestCallback(IHttpClientContext client, IHttpRequest request, IHttpResponse response, HttpRequestHandler handler) { try { handler.Callback(client, request, response); } catch (Exception ex) { m_log.Error("Exception in HTTP handler: " + ex); response.Status = HttpStatusCode.InternalServerError; response.Send(); } if (handler.SendResponseAfterCallback && !response.Sent) { try { response.Send(); } catch (Exception ex) { m_log.ErrorFormat("Failed to send HTTP response for request to {0}: {1}", request.Uri, ex.Message); } } request.Clear(); }
void ProcessRequest(IHttpClientContext context, IHttpRequest request) { LogWriter.Write(this, LogPrio.Trace, "Processing request..."); IHttpResponse response = request.CreateResponse(context); try { // load cookies if they exist. RequestCookies cookies = request.Headers["cookie"] != null ? new RequestCookies(request.Headers["cookie"]) : new RequestCookies(string.Empty); request.SetCookies(cookies); // Create a request signature HttpRequestSignature signature = new HttpRequestSignature(request); // Look for a signature match in our handlers bool found = false; for (int i = 0; i < _requestHandlers.Length; i++) { HttpRequestHandler handler = _requestHandlers[i]; if (signature == handler.Signature) { FireRequestCallback(context, request, response, handler.Callback); found = true; break; } } if (!found) { // No registered handler matched this request's signature if (_notFoundHandler != null) { FireRequestCallback(context, request, response, _notFoundHandler); } else { // Send a default 404 response try { response.Status = HttpStatusCode.NotFound; response.Reason = String.Format("No request handler registered for Method=\"{0}\", Content-Type=\"{1}\", Path=\"{2}\"", signature.Method, signature.ContentType, signature.Path); string notFoundResponse = "<html><head><title>Page Not Found</title></head><body><h3>" + response.Reason + "</h3></body></html>"; byte[] buffer = System.Text.Encoding.UTF8.GetBytes(notFoundResponse); response.Body.Write(buffer, 0, buffer.Length); response.Send(); } catch (Exception) { } } } } catch (Exception err) { ThrowException(err); bool errorResponse = true; Exception e = err; while (e != null) { if (e is SocketException) { errorResponse = false; break; } e = e.InnerException; } if (errorResponse) { try { #if DEBUG context.Respond(HttpHelper.HTTP11, HttpStatusCode.InternalServerError, "Internal server error", err.ToString(), "text/plain"); #else context.Respond(HttpHelper.HTTP10, HttpStatusCode.InternalServerError, "Internal server error"); #endif } catch (Exception err2) { LogWriter.Write(this, LogPrio.Fatal, "Failed to respond on message with Internal Server Error: " + err2); } } } request.Clear(); LogWriter.Write(this, LogPrio.Trace, "...done processing request."); }