def do_GET request, response
start_time = Time.now
status = 'OK'
iowa_log = Logger['iowa_log']
buffer = ""
req = Iowa::Request.new
req.uri = request.path.to_s
req.request_time = request.request_time
req.hostname = request.host
req.unparsed_uri = request.unparsed_uri
req.filename = request.path
req.args = request.query_string
request.query.each do |k,v|
req.params[ k ] = v.list.length > 1 ? v.list.join("\0") : v
end
request.header.each do |k,v| req.headers_in[ k ] = v end
read_time = Time.now
context = nil
exception = catch(:session_error) do
begin
context = Iowa::Context.new(req, buffer)
Iowa.app.handleRequest(context)
rescue Exception => exception
end
end
if exception.to_s != '' and exception.kind_of? Exception
buffer << "<p>#{exception}<br/>"
buffer << exception.backtrace.join("<br/>\n").to_s
buffer << "</p>"
iowa_log.warn "Execution Error: #{exception} :: " + exception.backtrace.join(".....").to_s
status = 'EOUT'
end
response[ "Date" ] = "#{Time.now.asctime}"
response[ "Pragma" ] = "no_cache"
response[ "Connection" ] = "close"
response[ "Content-Type" ] = req.content_type || "text/html"
response[ "Content-Length" ] = buffer.length
req.headers_out.each do |k,v| response[ k ] = v end
response.body = context.response
end_time = Time.now
referer = req.headers_in['Referer'] != '' ? req.headers_in['Referer'] : request.uri
iowa_log.info "#{start_time} (#{read_time.to_f - start_time.to_f}/#{end_time.to_f - start_time.to_f}) :: #{req.uri} #{status} #{buffer.length}B"
end