about summary refs log tree commit homepage
path: root/lib/mongrel/camping.rb
diff options
context:
space:
mode:
authorwhy <why@19e92222-5c0b-0410-8929-a290d50e31e9>2006-04-11 00:00:52 +0000
committerwhy <why@19e92222-5c0b-0410-8929-a290d50e31e9>2006-04-11 00:00:52 +0000
commit3cf03ae9f3f12c5dd754f4d02cd9086fe804e0c2 (patch)
tree2446e1c29383603bb1fdc9d9c1d44990f421dfe2 /lib/mongrel/camping.rb
parent894f4a0bd3407d99b779e739ef3c8c42c64bd4b1 (diff)
downloadunicorn-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.rb19
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