about summary refs log tree commit homepage
diff options
context:
space:
mode:
-rw-r--r--lib/unicorn.rb10
-rw-r--r--lib/unicorn/app/inetd.rb4
-rw-r--r--lib/unicorn/http_request.rb3
3 files changed, 13 insertions, 4 deletions
diff --git a/lib/unicorn.rb b/lib/unicorn.rb
index a2893fd..281aa7d 100644
--- a/lib/unicorn.rb
+++ b/lib/unicorn.rb
@@ -444,7 +444,15 @@ module Unicorn
     # once a client is accepted, it is processed in its entirety here
     # in 3 easy steps: read request, call app, write app response
     def process_client(app, client)
-      HttpResponse.write(client, app.call(REQUEST.read(client)))
+      response = app.call(env = REQUEST.read(client))
+
+      if 100 == response.first.to_i
+        client.write(Const::EXPECT_100_RESPONSE)
+        env.delete(Const::HTTP_EXPECT)
+        response = app.call(env)
+      end
+
+      HttpResponse.write(client, response)
     # if we get any error, try to write something back to the client
     # assuming we haven't closed the socket, but don't get hung up
     # if the socket is already closed or broken.  We'll always ensure
diff --git a/lib/unicorn/app/inetd.rb b/lib/unicorn/app/inetd.rb
index 43a23eb..c3b8bbc 100644
--- a/lib/unicorn/app/inetd.rb
+++ b/lib/unicorn/app/inetd.rb
@@ -97,6 +97,10 @@ module Unicorn::App
     end
 
     def call(env)
+      expect = env[Unicorn::Const::HTTP_EXPECT] and
+        /\A100-continue\z/i =~ expect and
+          return [ 100, {} , [] ]
+
       [ 200, { 'Content-Type' => 'application/octet-stream' },
        CatBody.new(env, @cmd) ]
     end
diff --git a/lib/unicorn/http_request.rb b/lib/unicorn/http_request.rb
index 3df9120..ad1e23f 100644
--- a/lib/unicorn/http_request.rb
+++ b/lib/unicorn/http_request.rb
@@ -89,9 +89,6 @@ module Unicorn
     # returns a Rack environment if successful
     def handle_body(socket)
       PARAMS[Const::RACK_INPUT] = if (body = PARAMS.delete(:http_body))
-        if 0 == body.size && /\A100-continue\z/i =~ PARAMS[Const::HTTP_EXPECT]
-          socket.write(Const::EXPECT_100_RESPONSE)
-        end
         length = PARAMS[Const::CONTENT_LENGTH].to_i
 
         if te = PARAMS[Const::HTTP_TRANSFER_ENCODING]