instiki/vendor/rails/actionpack/lib/action_controller/cgi_process.rb

78 lines
1.9 KiB
Ruby
Raw Normal View History

require 'action_controller/cgi_ext'
2007-01-22 14:43:50 +01:00
module ActionController #:nodoc:
class CGIHandler
module ProperStream
def each
while line = gets
yield line
2007-01-22 14:43:50 +01:00
end
end
def read(*args)
if args.empty?
super || ""
2007-01-22 14:43:50 +01:00
else
super
2007-01-22 14:43:50 +01:00
end
end
end
2007-01-22 14:43:50 +01:00
def self.dispatch_cgi(app, cgi, out = $stdout)
env = cgi.__send__(:env_table)
env.delete "HTTP_CONTENT_LENGTH"
cgi.stdinput.extend ProperStream
2007-01-22 14:43:50 +01:00
env["SCRIPT_NAME"] = "" if env["SCRIPT_NAME"] == "/"
2007-01-22 14:43:50 +01:00
env.update({
"rack.version" => [0,1],
"rack.input" => cgi.stdinput,
"rack.errors" => $stderr,
"rack.multithread" => false,
"rack.multiprocess" => true,
"rack.run_once" => false,
"rack.url_scheme" => ["yes", "on", "1"].include?(env["HTTPS"]) ? "https" : "http"
})
2007-01-22 14:43:50 +01:00
env["QUERY_STRING"] ||= ""
env["HTTP_VERSION"] ||= env["SERVER_PROTOCOL"]
env["REQUEST_PATH"] ||= "/"
env.delete "PATH_INFO" if env["PATH_INFO"] == ""
status, headers, body = app.call(env)
2007-01-22 14:43:50 +01:00
begin
out.binmode if out.respond_to?(:binmode)
out.sync = false if out.respond_to?(:sync=)
headers['Status'] = status.to_s
if headers.include?('Set-Cookie')
headers['cookie'] = headers.delete('Set-Cookie').split("\n")
end
out.write(cgi.header(headers))
body.each { |part|
out.write part
out.flush if out.respond_to?(:flush)
}
ensure
body.close if body.respond_to?(:close)
2007-01-22 14:43:50 +01:00
end
end
end
class CgiRequest #:nodoc:
DEFAULT_SESSION_OPTIONS = {
:database_manager => nil,
:prefix => "ruby_sess.",
:session_path => "/",
:session_key => "_session_id",
:cookie_only => true,
:session_http_only => true
}
end
2007-01-22 14:43:50 +01:00
end