diff options
author | why <why@19e92222-5c0b-0410-8929-a290d50e31e9> | 2006-04-11 00:00:52 +0000 |
---|---|---|
committer | why <why@19e92222-5c0b-0410-8929-a290d50e31e9> | 2006-04-11 00:00:52 +0000 |
commit | 3cf03ae9f3f12c5dd754f4d02cd9086fe804e0c2 (patch) | |
tree | 2446e1c29383603bb1fdc9d9c1d44990f421dfe2 /lib/mongrel/camping.rb | |
parent | 894f4a0bd3407d99b779e739ef3c8c42c64bd4b1 (diff) | |
download | unicorn-3cf03ae9f3f12c5dd754f4d02cd9086fe804e0c2.tar.gz |
git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/trunk@155 19e92222-5c0b-0410-8929-a290d50e31e9
Diffstat (limited to 'lib/mongrel/camping.rb')
-rw-r--r-- | lib/mongrel/camping.rb | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/lib/mongrel/camping.rb b/lib/mongrel/camping.rb index 26546c1..fb4efb8 100644 --- a/lib/mongrel/camping.rb +++ b/lib/mongrel/camping.rb @@ -34,21 +34,30 @@ module Mongrel def process(request, response) req = StringIO.new(request.body) controller = @klass.run(req, request.params) + sendfile = nil response.start(controller.status) do |head,out| controller.headers.each do |k, v| - [*v].each do |vi| - head[k] = vi + if k =~ /^X-SENDFILE$/i + sendfile = v + else + [*v].each do |vi| + head[k] = vi + end end end - if controller.body.respond_to? :read + response.send_header + + if sendfile + response.send_file(sendfile) + elsif controller.body.respond_to? :read while chunk = controller.body.read(16384) - out << chunk + @response.write(chunk) end if controller.body.respond_to? :close controller.body.close end else - out << controller.body + @response.write(controller.body) end end end |