18: def process(request, response)
19: env = {}.replace(request.params)
20: env.delete "HTTP_CONTENT_TYPE"
21: env.delete "HTTP_CONTENT_LENGTH"
22:
23: env["SCRIPT_NAME"] = "" if env["SCRIPT_NAME"] == "/"
24:
25: env.update({"rack.version" => [0,1],
26: "rack.input" => request.body || StringIO.new(""),
27: "rack.errors" => STDERR,
28:
29: "rack.multithread" => true,
30: "rack.multiprocess" => false,
31: "rack.run_once" => false,
32:
33: "rack.url_scheme" => "http",
34: })
35: env["QUERY_STRING"] ||= ""
36: env.delete "PATH_INFO" if env["PATH_INFO"] == ""
37:
38: status, headers, body = @app.call(env)
39:
40: begin
41: response.status = status.to_i
42: headers.each { |k, vs|
43: vs.each { |v|
44: response.header[k] = v
45: }
46: }
47: body.each { |part|
48: response.body << part
49: }
50: response.finished
51: ensure
52: body.close if body.respond_to? :close
53: end
54: end