[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