diff --git a/lib/httpx/channel/http1.rb b/lib/httpx/channel/http1.rb index f79b9ba0..78d3e1da 100644 --- a/lib/httpx/channel/http1.rb +++ b/lib/httpx/channel/http1.rb @@ -17,7 +17,6 @@ module HTTPX @version = [1,1] @pending = [] @requests = [] - @responses = [] end def reset @@ -28,7 +27,7 @@ module HTTPX def empty? # this means that for every request there's an available # partial response, so there are no in-flight requests waiting. - @requests.size == @responses.size + @requests.size == @requests.count { |r| r.response.nil? } end def <<(data) @@ -60,9 +59,9 @@ module HTTPX log { "headers received" } headers = @options.headers_class.new(h) response = @options.response_class.new(@requests.last, @parser.status_code, headers, @options) - @responses << response - log { response.headers.each.map { |f, v| "-> #{f}: #{v}" }.join("\n") } request = @requests.last + request.response = response + log { response.headers.each.map { |f, v| "-> #{f}: #{v}" }.join("\n") } # parser can't say if it's parsing GET or HEAD, # call the completeness callback manually on_message_complete if request.verb == :head @@ -70,13 +69,13 @@ module HTTPX def on_body(chunk) log { "-> #{chunk.inspect}" } - @responses.last << chunk + @requests.last.response << chunk end def on_message_complete log { "parsing complete" } request = @requests.shift - response = @responses.shift + response = request.response reset emit(:response, request, response)