Class | Mongrel::Camping::CampingHandler |
In: |
lib/mongrel/camping.rb
lib/mongrel/camping.rb |
Parent: | Mongrel::HttpHandler |
This is a specialized handler for Camping applications that has them process the request and then translates the results into something the Mongrel::HttpResponse needs.
files | [R] | |
files | [R] | |
guard | [R] | |
guard | [R] |
# File lib/mongrel/camping.rb, line 40 40: def initialize(klass) 41: @files = Mongrel::DirHandler.new(nil, false) 42: @guard = Mutex.new 43: @klass = klass 44: end
# File lib/mongrel/camping.rb, line 40 40: def initialize(klass) 41: @files = Mongrel::DirHandler.new(nil, false) 42: @guard = Mutex.new 43: @klass = klass 44: end
# File lib/mongrel/camping.rb, line 46 46: def process(request, response) 47: if response.socket.closed? 48: return 49: end 50: 51: controller = nil 52: @guard.synchronize { 53: controller = @klass.run(request.body, request.params) 54: } 55: 56: sendfile, clength = nil 57: response.status = controller.status 58: controller.headers.each do |k, v| 59: if k =~ /^X-SENDFILE$/i 60: sendfile = v 61: elsif k =~ /^CONTENT-LENGTH$/i 62: clength = v.to_i 63: else 64: [*v].each do |vi| 65: response.header[k] = vi 66: end 67: end 68: end 69: 70: if sendfile 71: request.params[Mongrel::Const::PATH_INFO] = sendfile 72: @files.process(request, response) 73: elsif controller.body.respond_to? :read 74: response.send_status(clength) 75: response.send_header 76: while chunk = controller.body.read(16384) 77: response.write(chunk) 78: end 79: if controller.body.respond_to? :close 80: controller.body.close 81: end 82: else 83: body = controller.body.to_s 84: response.send_status(body.length) 85: response.send_header 86: response.write(body) 87: end 88: end
# File lib/mongrel/camping.rb, line 46 46: def process(request, response) 47: if response.socket.closed? 48: return 49: end 50: 51: controller = nil 52: @guard.synchronize { 53: controller = @klass.run(request.body, request.params) 54: } 55: 56: sendfile, clength = nil 57: response.status = controller.status 58: controller.headers.each do |k, v| 59: if k =~ /^X-SENDFILE$/i 60: sendfile = v 61: elsif k =~ /^CONTENT-LENGTH$/i 62: clength = v.to_i 63: else 64: [*v].each do |vi| 65: response.header[k] = vi 66: end 67: end 68: end 69: 70: if sendfile 71: request.params[Mongrel::Const::PATH_INFO] = sendfile 72: @files.process(request, response) 73: elsif controller.body.respond_to? :read 74: response.send_status(clength) 75: response.send_header 76: while chunk = controller.body.read(16384) 77: response.write(chunk) 78: end 79: if controller.body.respond_to? :close 80: controller.body.close 81: end 82: else 83: body = controller.body.to_s 84: response.send_status(body.length) 85: response.send_header 86: response.write(body) 87: end 88: end