def read_http_message(connection)
parser = HTTP::Parser.new
headers_done = false
parser.on_headers_complete = proc { headers_done = true; :stop }
while !headers_done
data = connection.read(16384)
offset = parser << data
end
if offset < data.length
connection.pushback(data[offset .. -1])
end
if !parser.http_method.nil?
request = FTW::Request.new
request.method = parser.http_method
request.request_uri = parser.request_url
request.version = "#{parser.http_major}.#{parser.http_minor}".to_f
parser.headers.each { |field, value| request.headers.add(field, value) }
return request
else
response = FTW::Response.new
response.version = "#{parser.http_major}.#{parser.http_minor}".to_f
response.status = parser.status_code
parser.headers.each { |field, value| response.headers.add(field, value) }
return response
end
end