From 42fbb5d3a6c6488c2015bd81f1a00f1873cfb819 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Fri, 11 Dec 2009 02:59:32 -0800 Subject: env["hack.io"] for Fiber*, Revactor, Thread* models This exposes a client IO object directly to the underlying application. --- lib/rainbows/base.rb | 1 + lib/rainbows/const.rb | 6 ++++++ lib/rainbows/fiber/base.rb | 1 + lib/rainbows/revactor.rb | 1 + 4 files changed, 9 insertions(+) diff --git a/lib/rainbows/base.rb b/lib/rainbows/base.rb index 424b43b..a735b82 100644 --- a/lib/rainbows/base.rb +++ b/lib/rainbows/base.rb @@ -43,6 +43,7 @@ module Rainbows buf << client.readpartial(CHUNK_SIZE) end + env[CLIENT_IO] = client env[RACK_INPUT] = 0 == hp.content_length ? HttpRequest::NULL_IO : Unicorn::TeeInput.new(client, env, hp, buf) diff --git a/lib/rainbows/const.rb b/lib/rainbows/const.rb index 69e58aa..900c9d9 100644 --- a/lib/rainbows/const.rb +++ b/lib/rainbows/const.rb @@ -19,5 +19,11 @@ module Rainbows CONN_ALIVE = "Connection: keep-alive\r\n" LOCALHOST = "127.0.0.1" + # client IO object that supports reading and writing directly + # without filtering it through the HTTP chunk parser. + # Maybe we can get this renamed to "rack.io" if it becomes part + # of the official spec, but for now it is "hack.io" + CLIENT_IO = "hack.io".freeze + end end diff --git a/lib/rainbows/fiber/base.rb b/lib/rainbows/fiber/base.rb index 129448c..995b4af 100644 --- a/lib/rainbows/fiber/base.rb +++ b/lib/rainbows/fiber/base.rb @@ -82,6 +82,7 @@ module Rainbows buf << (client.read_timeout or return) end + env[CLIENT_IO] = client env[RACK_INPUT] = 0 == hp.content_length ? HttpRequest::NULL_IO : TeeInput.new(client, env, hp, buf) env[REMOTE_ADDR] = remote_addr diff --git a/lib/rainbows/revactor.rb b/lib/rainbows/revactor.rb index b647d48..ff0e429 100644 --- a/lib/rainbows/revactor.rb +++ b/lib/rainbows/revactor.rb @@ -49,6 +49,7 @@ module Rainbows buf << client.read(*rd_args) end + env[Const::CLIENT_IO] = client env[Const::RACK_INPUT] = 0 == hp.content_length ? HttpRequest::NULL_IO : Rainbows::Revactor::TeeInput.new(client, env, hp, buf) -- cgit v1.2.3-24-ge0c7