Class: Quicsilver::Server::RequestHandler
- Inherits:
-
Object
- Object
- Quicsilver::Server::RequestHandler
- Defined in:
- lib/quicsilver/server/request_handler.rb
Constant Summary collapse
- SAFE_METHODS =
%w[GET HEAD OPTIONS].freeze
Instance Attribute Summary collapse
-
#adapter ⇒ Object
readonly
Returns the value of attribute adapter.
Instance Method Summary collapse
- #call(connection, stream, early_data: false) ⇒ Object
-
#initialize(app:, configuration:, request_registry:, cancelled_streams:, cancelled_mutex:) ⇒ RequestHandler
constructor
A new instance of RequestHandler.
Constructor Details
#initialize(app:, configuration:, request_registry:, cancelled_streams:, cancelled_mutex:) ⇒ RequestHandler
Returns a new instance of RequestHandler.
10 11 12 13 14 15 16 |
# File 'lib/quicsilver/server/request_handler.rb', line 10 def initialize(app:, configuration:, request_registry:, cancelled_streams:, cancelled_mutex:) @configuration = configuration @request_registry = request_registry @cancelled_streams = cancelled_streams @cancelled_mutex = cancelled_mutex @adapter = Protocol::Adapter.new(app) end |
Instance Attribute Details
#adapter ⇒ Object (readonly)
Returns the value of attribute adapter.
8 9 10 |
# File 'lib/quicsilver/server/request_handler.rb', line 8 def adapter @adapter end |
Instance Method Details
#call(connection, stream, early_data: false) ⇒ Object
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/quicsilver/server/request_handler.rb', line 18 def call(connection, stream, early_data: false) request = parse_request(connection, stream, early_data: early_data) return unless request response = @adapter.call(request) send_response(connection, stream, request, response) rescue Server::DrainTimeoutError Quicsilver.logger.debug("Request interrupted by drain: stream #{stream.stream_id}") rescue Protocol::FrameError => e Quicsilver.logger.error("Frame error: #{e.} (0x#{e.error_code.to_s(16)})") Quicsilver.connection_shutdown(connection.handle, e.error_code, false) rescue nil rescue Protocol::MessageError => e Quicsilver.logger.error("Message error: #{e.} (0x#{e.error_code.to_s(16)})") Quicsilver.stream_reset(stream.stream_handle, e.error_code) if stream.writable? rescue => e Quicsilver.logger.error("Error handling request: #{e.class} - #{e.}") Quicsilver.logger.debug(e.backtrace.first(5).join("\n")) connection.send_error(stream, 500, "Internal Server Error") if stream.writable? ensure @request_registry.complete(stream.stream_id) if @request_registry.include?(stream.stream_id) @cancelled_mutex.synchronize { @cancelled_streams.delete(stream.stream_id) } end |