Sha256: 1f3af94254b0fbefd79b1a348acda0da84c29cca50cf2155cea5379988f4554c

Contents?: true

Size: 838 Bytes

Versions: 15

Compression:

Stored size: 838 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

15 entries across 15 versions & 1 rubygems

Version Path
tipi-0.43 lib/tipi/handler.rb
tipi-0.42 lib/tipi/handler.rb
tipi-0.41 lib/tipi/handler.rb
tipi-0.40 lib/tipi/handler.rb
tipi-0.39 lib/tipi/handler.rb
tipi-0.38 lib/tipi/handler.rb
tipi-0.37.2 lib/tipi/handler.rb
tipi-0.37.1 lib/tipi/handler.rb
tipi-0.37 lib/tipi/handler.rb
tipi-0.36 lib/tipi/handler.rb
tipi-0.35 lib/tipi/handler.rb
tipi-0.34 lib/tipi/handler.rb
tipi-0.33 lib/tipi/handler.rb
tipi-0.32 lib/tipi/handler.rb
tipi-0.31 lib/tipi/handler.rb