diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/unicorn/app/inetd.rb | 2 | ||||
-rw-r--r-- | lib/unicorn/configurator.rb | 27 | ||||
-rw-r--r-- | lib/unicorn/const.rb | 1 | ||||
-rw-r--r-- | lib/unicorn/http_request.rb | 3 | ||||
-rw-r--r-- | lib/unicorn/tee_input.rb | 18 |
5 files changed, 9 insertions, 42 deletions
diff --git a/lib/unicorn/app/inetd.rb b/lib/unicorn/app/inetd.rb index c3b8bbc..e22b308 100644 --- a/lib/unicorn/app/inetd.rb +++ b/lib/unicorn/app/inetd.rb @@ -91,8 +91,6 @@ module Unicorn::App end def initialize(*cmd) - # enable streaming input mode in Unicorn - Unicorn::HttpRequest::DEFAULTS["unicorn.stream_input"] = true @cmd = cmd end diff --git a/lib/unicorn/configurator.rb b/lib/unicorn/configurator.rb index 1f18515..bd0a198 100644 --- a/lib/unicorn/configurator.rb +++ b/lib/unicorn/configurator.rb @@ -44,7 +44,6 @@ module Unicorn :preload_app => false, :stderr_path => nil, :stdout_path => nil, - :stream_input => false, } attr_reader :config_file #:nodoc: @@ -65,10 +64,6 @@ module Unicorn def commit!(server, options = {}) #:nodoc: skip = options[:skip] || [] - stream_input = @set.delete(:stream_input) - unless stream_input.nil? - Unicorn::HttpRequest::DEFAULTS[Const::STREAM_INPUT] = stream_input - end @set.each do |key, value| value == :unset and next skip.include?(key) and next @@ -276,28 +271,6 @@ module Unicorn end end - # Allow applications to stream input as it is being read from the - # network directly to the application. Enabling this can allow - # real-time processing of request bodies as it is being sent by - # the client, useful for things like upload progress notification - # and tunneling arbitrary stream protocols via bidirectional chunked - # transfer encoding. - # This may not work with all applications because some broken - # applications assume env['rack.input'].read(size) always returns - # the requested amount of data. This causes env['rack.input']#read - # to provide IO#readpartial semantics instead. Some applications - # may also fully receive an input and never attempt to process it, - # causing clients confusion when they receive a response after - # only a partial request has been sent. - def stream_input(bool) - case bool - when TrueClass, FalseClass - @set[:stream_input] = bool - else - raise ArgumentError, "stream_input=#{bool.inspect} not a boolean" - end - end - # Allow redirecting $stderr to a given path. Unlike doing this from # the shell, this allows the unicorn process to know the path its # writing to and rotate the file if it is used for logging. The diff --git a/lib/unicorn/const.rb b/lib/unicorn/const.rb index be69753..be23bb4 100644 --- a/lib/unicorn/const.rb +++ b/lib/unicorn/const.rb @@ -34,7 +34,6 @@ module Unicorn HTTP_EXPECT="HTTP_EXPECT".freeze HTTP_TRAILER="HTTP_TRAILER".freeze RACK_INPUT="rack.input".freeze - STREAM_INPUT="unicorn.stream_input".freeze end end diff --git a/lib/unicorn/http_request.rb b/lib/unicorn/http_request.rb index ad1e23f..779cd32 100644 --- a/lib/unicorn/http_request.rb +++ b/lib/unicorn/http_request.rb @@ -98,8 +98,7 @@ module Unicorn end end - inp = TeeInput.new(socket, length, body) - DEFAULTS[Const::STREAM_INPUT] ? inp : inp.consume + TeeInput.new(socket, length, body) else NULL_IO.closed? ? NULL_IO.reopen(Z) : NULL_IO end diff --git a/lib/unicorn/tee_input.rb b/lib/unicorn/tee_input.rb index 8dd8954..06028a6 100644 --- a/lib/unicorn/tee_input.rb +++ b/lib/unicorn/tee_input.rb @@ -29,22 +29,20 @@ module Unicorn @size = size # nil if chunked end - def consume - @input or return - buf = Z.dup - while tee(Const::CHUNK_SIZE, buf) - end - @tmp.rewind - self - end - # returns the size of the input. This is what the Content-Length # header value should be, and how large our input is expected to be. # For TE:chunked, this requires consuming all of the input stream # before returning since there's no other way def size @size and return @size - @input and consume + + if @input + buf = Z.dup + while tee(Const::CHUNK_SIZE, buf) + end + @tmp.rewind + end + @size = @tmp.stat.size end |