19: def service(req, res)
20: env = req.meta_vars
21: env.delete_if { |k, v| v.nil? }
22:
23: env.update({"rack.version" => [0,1],
24: "rack.input" => StringIO.new(req.body.to_s),
25: "rack.errors" => STDERR,
26:
27: "rack.multithread" => true,
28: "rack.multiprocess" => false,
29: "rack.run_once" => false,
30:
31: "rack.url_scheme" => ["yes", "on", "1"].include?(ENV["HTTPS"]) ? "https" : "http"
32: })
33:
34: env["HTTP_VERSION"] ||= env["SERVER_PROTOCOL"]
35: env["QUERY_STRING"] ||= ""
36: env["REQUEST_PATH"] ||= "/"
37: env.delete "PATH_INFO" if env["PATH_INFO"] == ""
38:
39: status, headers, body = @app.call(env)
40: begin
41: res.status = status.to_i
42: headers.each { |k, vs|
43: vs.each { |v|
44: res[k] = v
45: }
46: }
47: body.each { |part|
48: res.body << part
49: }
50: ensure
51: body.close if body.respond_to? :close
52: end
53: end