[macruby-changes] [4295] ControlTower/trunk

source_changes at macosforge.org source_changes at macosforge.org
Sat Jun 26 01:19:13 PDT 2010


Revision: 4295
          http://trac.macosforge.org/projects/ruby/changeset/4295
Author:   joshua.ballanco at apple.com
Date:     2010-06-26 01:19:09 -0700 (Sat, 26 Jun 2010)
Log Message:
-----------
Better POST body handling

Modified Paths:
--------------
    ControlTower/trunk/ext/CTParser/CTParser.m
    ControlTower/trunk/lib/control_tower/rack_socket.rb
    ControlTower/trunk/lib/control_tower/server.rb

Modified: ControlTower/trunk/ext/CTParser/CTParser.m
===================================================================
--- ControlTower/trunk/ext/CTParser/CTParser.m	2010-06-26 07:38:05 UTC (rev 4294)
+++ ControlTower/trunk/ext/CTParser/CTParser.m	2010-06-26 08:19:09 UTC (rev 4295)
@@ -124,9 +124,9 @@
     }
 
     // If we've been given any part of the body, put it here
-    NSMutableArray *body = [environment objectForKey:@"rack.input"];
+    NSMutableData *body = [environment objectForKey:@"rack.input"];
     if (body != nil) {
-	[body addObject:[NSData dataWithBytes:at length:length]];
+        [body appendData:[NSData dataWithBytes:at length:length]];
     }
     else {
 	NSLog(@"Hmm...you seem to have body data but no where to put it. That's probably an error.");

Modified: ControlTower/trunk/lib/control_tower/rack_socket.rb
===================================================================
--- ControlTower/trunk/lib/control_tower/rack_socket.rb	2010-06-26 07:38:05 UTC (rev 4294)
+++ ControlTower/trunk/lib/control_tower/rack_socket.rb	2010-06-26 08:19:09 UTC (rev 4295)
@@ -46,6 +46,7 @@
             $stderr.puts "Error: Connection terminated!"
           rescue Object => e
             $stderr.puts "Error: Problem transmitting data -- #{e.inspect}"
+            $stderr.puts e.backtrace.join("\n")
           ensure
             # We should clean up after our tempfile, if we used one.
             input = env['rack.input']
@@ -73,7 +74,7 @@
 
     def prepare_environment
       { 'rack.errors' => $stderr,
-        'rack.input' => NSMutableArray.alloc.init, # For now, collect the body as an array of NSData's
+        'rack.input' => NSMutableData.new,
         'rack.multiprocess' => false,
         'rack.multithread' => @multithread,
         'rack.run_once' => false,
@@ -104,25 +105,22 @@
           nread = parser.parseData(data, forEnvironment: env, startingAt: nread)
           if parser.finished == 1
             parsing_headers = false # We're done, now on to receiving the body
-            content_uploaded = env['rack.input'].first.length
             content_length = env['CONTENT_LENGTH'].to_i
+            content_uploaded = env['rack.input'].length
           end
         else # Done parsing headers, now just collect request body:
           content_uploaded += incoming_bytes.length
-          env['rack.input'] << incoming_bytes
+          env['rack.input'].appendData(incoming_bytes)
         end
       end
 
       if content_length > 1024 * 1024
-        body = Tempfile.new('control-tower-request-body-')
-        body_handle = NSFileHandle.alloc.initWithFileDescriptor(body.fileno)
-        env['rack.input'].each { |upload_data| body_handle.writeData(upload_data) }
-        body.rewind
-        env['rack.input'] = body
+        body_file = Tempfile.new('control-tower-request-body-')
+        NSFileHandle.alloc.initWithFileDescriptor(body_file.fileno).writeData(env['rack.input'])
+        body_file.rewind
+        env['rack.input'] = body_file
       else
-        body = StringIO.new
-        env['rack.input'].each { |upload_data| body << upload_data.to_str }
-        env['rack.input'] = body
+        env['rack.input'] = StringIO.new(NSString.alloc.initWithData(env['rack.input'], encoding: NSASCIIStringEncoding))
       end
       # Returning what we've got...
       return env

Modified: ControlTower/trunk/lib/control_tower/server.rb
===================================================================
--- ControlTower/trunk/lib/control_tower/server.rb	2010-06-26 07:38:05 UTC (rev 4294)
+++ ControlTower/trunk/lib/control_tower/server.rb	2010-06-26 08:19:09 UTC (rev 4295)
@@ -20,7 +20,6 @@
     end
 
     def handle_request(env)
-      env
       wrap_output(*@app.call(env))
     end
 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20100626/b44be57f/attachment-0001.html>


More information about the macruby-changes mailing list