Sha256: 6d45bc453dc51ddcc26f603899e9b65b0843c54ff3ac4cb7eba63f61bb245af7

Contents?: true

Size: 828 Bytes

Versions: 10

Compression:

Stored size: 828 Bytes

Contents

# frozen_string_literal: true

require_relative './rack_adapter'
require_relative './http1_adapter'
require_relative './http2_adapter'

module Tipi
  class DefaultHandler
    def initialize(config)
      @config = config

      app_path = ARGV.first || './config.ru'
      @app = Tipi::RackAdapter.load(app_path)
    end

    def call(socket)
      socket.no_delay if socket.respond_to?(:no_delay)
      adapter = protocol_adapter(socket, {})
      adapter.each(&@app)
    ensure
      socket.close
    end

    ALPN_PROTOCOLS = %w[h2 http/1.1].freeze
    H2_PROTOCOL = 'h2'

    def protocol_adapter(socket, opts)
      use_http2 = socket.respond_to?(:alpn_protocol) &&
                  socket.alpn_protocol == H2_PROTOCOL

      klass = use_http2 ? HTTP2Adapter : HTTP1Adapter
      klass.new(socket, opts)
    end
  end
end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
tipi-0.55 lib/tipi/handler.rb
tipi-0.54 lib/tipi/handler.rb
tipi-0.53 lib/tipi/handler.rb
tipi-0.52 lib/tipi/handler.rb
tipi-0.51 lib/tipi/handler.rb
tipi-0.50 lib/tipi/handler.rb
tipi-0.49 lib/tipi/handler.rb
tipi-0.47 lib/tipi/handler.rb
tipi-0.46 lib/tipi/handler.rb
tipi-0.45 lib/tipi/handler.rb