[macruby-changes] [4391] ControlTower/trunk

source_changes at macosforge.org source_changes at macosforge.org
Thu Jul 29 01:26:06 PDT 2010


Revision: 4391
          http://trac.macosforge.org/projects/ruby/changeset/4391
Author:   joshua.ballanco at apple.com
Date:     2010-07-29 01:26:05 -0700 (Thu, 29 Jul 2010)
Log Message:
-----------
Fix for handling malformed requests

Modified Paths:
--------------
    ControlTower/trunk/bin/control_tower
    ControlTower/trunk/lib/control_tower/rack_socket.rb
    ControlTower/trunk/lib/rack/handler/control_tower.rb

Modified: ControlTower/trunk/bin/control_tower
===================================================================
--- ControlTower/trunk/bin/control_tower	2010-07-28 23:17:04 UTC (rev 4390)
+++ ControlTower/trunk/bin/control_tower	2010-07-29 08:26:05 UTC (rev 4391)
@@ -8,21 +8,21 @@
 # Some default values
 @options = {
   :rackup => './config.ru',
-  :port => '8080',
+  :port => '3000',
   :host => '0.0.0.0',
   :concurrent => false
 }
 
 OptionParser.new do |opts|
-  opts.on("-R", "--rackup [FILE]", "Rack-up Configuration File") do |rackup|
+  opts.on("-R", "--rackup FILE", "Rack-up Configuration File") do |rackup|
     @options[:rackup] = rackup
   end
 
-  opts.on("-p", "--port [SERVER_PORT]", Integer, "Port on which to run the server") do |port|
+  opts.on("-p", "--port PORT", Integer, "Port on which to run the server (default: 3000)") do |port|
     @options[:port] = port
   end
 
-  opts.on("-h", "--host [HOSTNAME]", "Hostname for the server") do |host|
+  opts.on("-a", "--address HOST", "Address to bind server to (default: 0.0.0.0)") do |host|
     @options[:host] = host
   end
 

Modified: ControlTower/trunk/lib/control_tower/rack_socket.rb
===================================================================
--- ControlTower/trunk/lib/control_tower/rack_socket.rb	2010-07-28 23:17:04 UTC (rev 4390)
+++ ControlTower/trunk/lib/control_tower/rack_socket.rb	2010-07-29 08:26:05 UTC (rev 4391)
@@ -39,6 +39,9 @@
                   'rack.multithread' => @multithread,
                   'rack.run_once' => false,
                   'rack.version' => VERSION }
+          resp = nil
+          x_sendfile_header = "X-Sendfile"
+          x_sendfile = nil
           begin
             request_data = parse!(connection, env)
             if request_data
@@ -65,6 +68,9 @@
 
               resp = "HTTP/1.1 #{status}\r\n"
               headers.each do |header, value|
+                if header == x_sendfile_header
+                  x_sendfile = value
+                else
                 resp << "#{header}: #{value}\r\n"
               end
               resp << "\r\n"
@@ -87,8 +93,13 @@
           rescue EOFError, Errno::ECONNRESET, Errno::EPIPE, Errno::EINVAL
             $stderr.puts "Error: Connection terminated!"
           rescue Object => e
-            $stderr.puts "Error: Problem transmitting data -- #{e.inspect}"
-            $stderr.puts e.backtrace.join("\n")
+            if resp.nil? && !connection.closed?
+              connection.write "HTTP/1.1 400\r\n\r\n"
+            else
+              # We have a response, but there was trouble sending it:
+              $stderr.puts "Error: Problem transmitting data -- #{e.inspect}"
+              $stderr.puts e.backtrace.join("\n")
+            end
           ensure
             # We should clean up after our tempfile, if we used one.
             input = env['rack.input']

Modified: ControlTower/trunk/lib/rack/handler/control_tower.rb
===================================================================
--- ControlTower/trunk/lib/rack/handler/control_tower.rb	2010-07-28 23:17:04 UTC (rev 4390)
+++ ControlTower/trunk/lib/rack/handler/control_tower.rb	2010-07-29 08:26:05 UTC (rev 4391)
@@ -7,6 +7,7 @@
   module Handler
     class ControlTower
       def self.run(app, options={})
+        app = Rack::Chunked.new(Rack::ContentLength.new(app))
         server = ::ControlTower::Server.new(app, options)
         yield server if block_given?
         server.start
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20100729/e4a0dfb1/attachment.html>


More information about the macruby-changes mailing list