Sha256: 2df81fbfb4e84fe9b0cbb4b334c27bcf83e33fa2da6e6eca0353f35e1e0c1690
Contents?: true
Size: 1.38 KB
Versions: 7
Compression:
Stored size: 1.38 KB
Contents
module Excon module Middleware # Hijack is an Excon middleware which parses response headers and then # yields the underlying TCP socket for raw TCP communication (used to # attach to STDIN of containers). class Hijack < Base def response_call(datum) if datum[:hijack_block] # Need to process the response headers here rather than in # Excon::Middleware::ResponseParser as the response parser will # block trying to read the body. socket = datum[:connection].send(:socket) # c.f. Excon::Response.parse until match = /^HTTP\/\d+\.\d+\s(\d{3})\s/.match(socket.readline); end status = match[1].to_i datum[:response] = { :body => '', :headers => Excon::Headers.new, :status => status, :remote_ip => socket.respond_to?(:remote_ip) && socket.remote_ip, :local_port => socket.respond_to?(:local_port) && socket.local_port, :local_address => socket.respond_to?(:local_address) && socket.local_address } Excon::Response.parse_headers(socket, datum) datum[:hijack_block].call socket.instance_variable_get(:@socket) end @stack.response_call(datum) end end end end
Version data entries
7 entries across 7 versions & 1 rubygems