diff options
author | why <why@19e92222-5c0b-0410-8929-a290d50e31e9> | 2006-10-05 04:27:44 +0000 |
---|---|---|
committer | why <why@19e92222-5c0b-0410-8929-a290d50e31e9> | 2006-10-05 04:27:44 +0000 |
commit | af7c7e395537042bbc8a27886d4fcc3fc1ac9835 (patch) | |
tree | fa979efb2f2a94f30577897ee986088857f3762d /lib | |
parent | 04b3690a2b35f44086c1943b7e5bda9a25189646 (diff) | |
download | unicorn-af7c7e395537042bbc8a27886d4fcc3fc1ac9835.tar.gz |
git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/trunk@357 19e92222-5c0b-0410-8929-a290d50e31e9
Diffstat (limited to 'lib')
-rw-r--r-- | lib/mongrel/camping.rb | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/lib/mongrel/camping.rb b/lib/mongrel/camping.rb index da497a0..c517420 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 |