lib/goliath/connection.rb in goliath-0.9.4 vs lib/goliath/connection.rb in goliath-1.0.0.beta.1

- old
+ new

@@ -20,26 +20,23 @@ @requests = [] @pending = [] @parser = Http::Parser.new @parser.on_headers_complete = proc do |h| - env = Thread.current[GOLIATH_ENV] = Goliath::Env.new env[SERVER_PORT] = port.to_s env[RACK_LOGGER] = logger env[OPTIONS] = options env[STATUS] = status env[CONFIG] = config env[REMOTE_ADDR] = remote_address r = Goliath::Request.new(@app, self, env) r.parse_header(h, @parser) do - @api.set_event_handler!(env) if @api - - env[ASYNC_HEADERS] = env.event_handler.method(:on_headers) if env.event_handler.respond_to? :on_headers - env[ASYNC_BODY] = env.event_handler.method(:on_body) if env.event_handler.respond_to? :on_body - env[ASYNC_CLOSE] = env.event_handler.method(:on_close) if env.event_handler.respond_to? :on_close + env[ASYNC_HEADERS] = api.method(:on_headers) if api.respond_to?(:on_headers) + env[ASYNC_BODY] = api.method(:on_body) if api.respond_to?(:on_body) + env[ASYNC_CLOSE] = api.method(:on_close) if api.respond_to?(:on_close) end @requests.push(r) end @@ -55,24 +52,34 @@ @current.succeed else @pending.push(req) end - req.process + req.process if !@parser.upgrade? && !req.env[:terminate_connection] end end def receive_data(data) begin @parser << data + + if @parser.upgrade? + if !@current.env[UPGRADE_DATA] + @current.env[UPGRADE_DATA] = @parser.upgrade_data + @current.process + else + @current.parse(data) + end + end + rescue HTTP::Parser::Error => e terminate_request(false) end end def unbind - @requests.map {|r| r.close } - @pending.map {|r| r.close } + @requests.map { |r| r.close } + @pending.map { |r| r.close } @current.close if @current end def terminate_request(keep_alive) if req = @pending.shift