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
56 def initialize(*)
57   super
58   @h2c_handshake = false
59 end

Public Instance methods

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