diff options
author | Eric Wong <normalperson@yhbt.net> | 2009-12-11 02:59:32 -0800 |
---|---|---|
committer | Eric Wong <normalperson@yhbt.net> | 2009-12-11 03:00:00 -0800 |
commit | 42fbb5d3a6c6488c2015bd81f1a00f1873cfb819 (patch) | |
tree | c30a3518afc62ca836514f070aea584cfdd2f1ec | |
parent | 1e08dbab5683904ebeab01391eb6cd632ed9732e (diff) | |
download | rainbows-42fbb5d3a6c6488c2015bd81f1a00f1873cfb819.tar.gz |
This exposes a client IO object directly to the underlying application.
-rw-r--r-- | lib/rainbows/base.rb | 1 | ||||
-rw-r--r-- | lib/rainbows/const.rb | 6 | ||||
-rw-r--r-- | lib/rainbows/fiber/base.rb | 1 | ||||
-rw-r--r-- | lib/rainbows/revactor.rb | 1 |
4 files changed, 9 insertions, 0 deletions
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) |