about summary refs log tree commit homepage
path: root/lib/unicorn
diff options
context:
space:
mode:
Diffstat (limited to 'lib/unicorn')
-rw-r--r--lib/unicorn/app/inetd.rb2
-rw-r--r--lib/unicorn/configurator.rb27
-rw-r--r--lib/unicorn/const.rb1
-rw-r--r--lib/unicorn/http_request.rb3
-rw-r--r--lib/unicorn/tee_input.rb18
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