summary refs log tree commit homepage
path: root/lib/rainbows/event_machine.rb
diff options
context:
space:
mode:
authorEric Wong <normalperson@yhbt.net>2010-07-19 10:09:56 +0000
committerEric Wong <normalperson@yhbt.net>2010-07-19 17:04:26 -0700
commit1e6d3d19da2b62bfe7f8fd7827dcad3ee3fe9923 (patch)
tree5de875617e5cf3befb7c0ae9e1add9b2ee2f451e /lib/rainbows/event_machine.rb
parentcc18035c5105751a3e67a8e449ee0021fd313ea9 (diff)
If a response proxying a pipe (or socket) includes a
Content-Length, do not attempt to outsmart the application
and just use the given Content-Length.

This helps avoid exposing applications to weird internals such
as env["rainbows.autochunk"] and X-Rainbows-* response headers.
Diffstat (limited to 'lib/rainbows/event_machine.rb')
-rw-r--r--lib/rainbows/event_machine.rb10
1 files changed, 1 insertions, 9 deletions
diff --git a/lib/rainbows/event_machine.rb b/lib/rainbows/event_machine.rb
index 625357e..86cb4eb 100644
--- a/lib/rainbows/event_machine.rb
+++ b/lib/rainbows/event_machine.rb
@@ -50,7 +50,6 @@ module Rainbows
 
     class Client < EM::Connection # :nodoc: all
       include Rainbows::EvCore
-      include Rainbows::Response
       G = Rainbows::G
 
       def initialize(io)
@@ -98,14 +97,7 @@ module Rainbows
 
       # used for streaming sockets and pipes
       def stream_response(status, headers, io)
-        if headers
-          do_chunk = !!(headers['Transfer-Encoding'] =~ %r{\Achunked\z}i)
-          do_chunk = false if headers.delete('X-Rainbows-Autochunk') == 'no'
-          headers[CONNECTION] = CLOSE # TODO: allow keep-alive
-          write(response_header(status, headers))
-        else
-          do_chunk = false
-        end
+        do_chunk = stream_response_headers(status, headers) if headers
         mod = do_chunk ? ResponseChunkPipe : ResponsePipe
         EM.watch(io, mod, self).notify_readable = true
       end