module HTTPX::Plugins::H2C::ConnectionMethods

  1. lib/httpx/plugins/h2c.rb

Methods

Public Class

  1. new

Public Instance

  1. send
  2. upgrade_to_h2c

Public Class methods

new(*)
[show source]
   # File lib/httpx/plugins/h2c.rb
47 def initialize(*)
48   super
49   @h2c_handshake = false
50 end

Public Instance methods

send(request)
[show source]
   # File lib/httpx/plugins/h2c.rb
52 def send(request)
53   return super if @h2c_handshake
54 
55   return super unless request.valid_h2c_verb? && request.scheme == "http"
56 
57   return super if @upgrade_protocol == "h2c"
58 
59   @h2c_handshake = true
60 
61   # build upgrade request
62   request.headers.add("connection", "upgrade")
63   request.headers.add("connection", "http2-settings")
64   request.headers["upgrade"] = "h2c"
65   request.headers["http2-settings"] = ::HTTP2::Client.settings_header(request.options.http2_settings)
66 
67   super
68 end
upgrade_to_h2c(request, response)
[show source]
   # File lib/httpx/plugins/h2c.rb
70 def upgrade_to_h2c(request, response)
71   prev_parser = @parser
72 
73   if prev_parser
74     prev_parser.reset
75     @inflight -= prev_parser.requests.size
76   end
77 
78   @parser = request.options.h2c_class.new(@write_buffer, @options)
79   set_parser_callbacks(@parser)
80   @inflight += 1
81   @parser.upgrade(request, response)
82   @upgrade_protocol = "h2c"
83 
84   prev_parser.requests.each do |req|
85     req.transition(:idle)
86     send(req)
87   end
88 end