From af7c7e395537042bbc8a27886d4fcc3fc1ac9835 Mon Sep 17 00:00:00 2001 From: why Date: Thu, 5 Oct 2006 04:27:44 +0000 Subject: [PATCH] * lib/mongrel/camping.rb: borrowing DirHandler and @guard from the RailsHandler. git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/trunk@357 19e92222-5c0b-0410-8929-a290d50e31e9 --- lib/mongrel/camping.rb | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/lib/mongrel/camping.rb b/lib/mongrel/camping.rb index da497a07..c5174203 100644 --- a/lib/mongrel/camping.rb +++ b/lib/mongrel/camping.rb @@ -33,13 +33,29 @@ module Mongrel # the results into something the Mongrel::HttpResponse # needs. class CampingHandler < Mongrel::HttpHandler + attr_reader :files + attr_reader :guard + @@file_only_methods = ["GET","HEAD"] + def initialize(klass) + @files = Mongrel::DirHandler.new("/",false) + @guard = Sync.new @klass = klass end def process(request, response) - controller = @klass.run(request.body, request.params) + if response.socket.closed? + return + end + + controller = nil + @guard.synchronize(:EX) { + controller = @klass.run(request.body, request.params) + } + sendfile, clength = nil + get_or_head = @@file_only_methods.include? request.params[Mongrel::Const::REQUEST_METHOD] + response.status = controller.status controller.headers.each do |k, v| if k =~ /^X-SENDFILE$/i @@ -54,9 +70,8 @@ module Mongrel end if sendfile - response.send_status(File.size(sendfile)) - response.send_header - response.send_file(sendfile) + request.params[Mongrel::Const::PATH_INFO] = sendfile + @files.process(request, response) elsif controller.body.respond_to? :read response.send_status(clength) response.send_header