diff options
Diffstat (limited to 'lib/unicorn/http_request.rb')
-rw-r--r-- | lib/unicorn/http_request.rb | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/lib/unicorn/http_request.rb b/lib/unicorn/http_request.rb index 79ead2e..3795b3b 100644 --- a/lib/unicorn/http_request.rb +++ b/lib/unicorn/http_request.rb @@ -91,6 +91,35 @@ class Unicorn::HttpParser e[RACK_INPUT] = 0 == content_length ? NULL_IO : @@input_class.new(socket, self) + hijack_setup(e, socket) e.merge!(DEFAULTS) end + + # Rack 1.5.0 (protocol version 1.2) adds hijack request support + if ((Rack::VERSION[0] << 8) | Rack::VERSION[1]) >= 0x0102 + DEFAULTS["rack.hijack?"] = true + + # FIXME: asking for clarification about this in + # http://mid.gmane.org/20130122100802.GA28585@dcvr.yhbt.net + DEFAULTS["rack.version"] = [1, 2] + + RACK_HIJACK = "rack.hijack".freeze + RACK_HIJACK_IO = "rack.hijack_io".freeze + + def hijacked? + env.include?(RACK_HIJACK_IO) + end + + def hijack_setup(e, socket) + e[RACK_HIJACK] = proc { e[RACK_HIJACK_IO] ||= socket } + end + else + # old Rack, do nothing. + def hijack_setup(e, _) + end + + def hijacked? + false + end + end end |