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