34: def call(env)
35: request = Rack::Request.new(env)
36: response = Rack::Response.new()
37: Puppet.debug 'Handling request: %s %s' % [request.request_method, request.fullpath]
38:
39:
40: if @xmlrpc_http_handler and @xmlrpc_path == request.path_info[0, @xmlrpc_path.size]
41: handler = @xmlrpc_http_handler
42: else
43:
44: handler = @rest_http_handler
45: end
46:
47: begin
48: handler.process(request, response)
49: rescue => detail
50:
51: response.status = 500
52: response['Content-Type'] = 'text/plain'
53: response.write 'Internal Server Error: "%s"' % detail.message
54:
55: Puppet.err "Puppet Server (Rack): Internal Server Error: Unhandled Exception: \"%s\"" % detail.message
56: Puppet.err "Backtrace:"
57: detail.backtrace.each { |line| Puppet.err " > %s" % line }
58: end
59: response.finish()
60: end