Sha256: 10948d3636dc21f2473c311205a79849d65373f78887f51db39877c52183dfbe

Contents?: true

Size: 1.47 KB

Versions: 48

Compression:

Stored size: 1.47 KB

Contents

# frozen_string_literal: true

module HTTPX
  module Plugins
    #
    # This plugin adds support for upgrading an HTTP/1.1 connection to HTTP/2
    # via an Upgrade: h2 response declaration
    #
    # https://gitlab.com/honeyryderchuck/httpx/wikis/Upgrade#h2
    #
    module H2
      class << self
        def configure(klass)
          klass.default_options.upgrade_handlers.register "h2", self
        end

        def call(connection, _request, _response)
          connection.upgrade_to_h2
        end
      end

      module ConnectionMethods
        using URIExtensions

        def upgrade_to_h2
          prev_parser = @parser

          if prev_parser
            prev_parser.reset
            @inflight -= prev_parser.requests.size
          end

          @parser = Connection::HTTP2.new(@write_buffer, @options)
          set_parser_callbacks(@parser)
          @upgrade_protocol = :h2

          # what's happening here:
          # a deviation from the state machine is done to perform the actions when a
          # connection is closed, without transitioning, so the connection is kept in the pool.
          # the state is reset to initial, so that the socket reconnect works out of the box,
          # while the parser is already here.
          purge_after_closed
          transition(:idle)

          prev_parser.requests.each do |req|
            req.transition(:idle)
            send(req)
          end
        end
      end
    end
    register_plugin(:"upgrade/h2", H2)
  end
end

Version data entries

48 entries across 48 versions & 1 rubygems

Version Path
httpx-0.22.5 lib/httpx/plugins/upgrade/h2.rb
httpx-0.22.4 lib/httpx/plugins/upgrade/h2.rb
httpx-0.22.3 lib/httpx/plugins/upgrade/h2.rb
httpx-0.22.2 lib/httpx/plugins/upgrade/h2.rb
httpx-0.22.1 lib/httpx/plugins/upgrade/h2.rb
httpx-0.22.0 lib/httpx/plugins/upgrade/h2.rb
httpx-0.21.1 lib/httpx/plugins/upgrade/h2.rb
httpx-0.21.0 lib/httpx/plugins/upgrade/h2.rb
httpx-0.20.5 lib/httpx/plugins/upgrade/h2.rb
httpx-0.20.4 lib/httpx/plugins/upgrade/h2.rb
httpx-0.20.3 lib/httpx/plugins/upgrade/h2.rb
httpx-0.20.2 lib/httpx/plugins/upgrade/h2.rb
httpx-0.20.1 lib/httpx/plugins/upgrade/h2.rb
httpx-0.20.0 lib/httpx/plugins/upgrade/h2.rb
httpx-0.19.8 lib/httpx/plugins/upgrade/h2.rb
httpx-0.19.7 lib/httpx/plugins/upgrade/h2.rb
httpx-0.19.6 lib/httpx/plugins/upgrade/h2.rb
httpx-0.19.5 lib/httpx/plugins/upgrade/h2.rb
httpx-0.19.4 lib/httpx/plugins/upgrade/h2.rb
httpx-0.19.3 lib/httpx/plugins/upgrade/h2.rb