class Tipi::HTTP2Adapter
HTTP2
server adapter
Constants
- UPGRADE_MESSAGE
Public Class Methods
new(conn, opts, upgrade_headers = nil, upgrade_body = nil)
click to toggle source
# File lib/tipi/http2_adapter.rb, line 25 def initialize(conn, opts, upgrade_headers = nil, upgrade_body = nil) @conn = conn @opts = opts @upgrade_headers = upgrade_headers @upgrade_body = upgrade_body @first = true @rx = (upgrade_headers && upgrade_headers[':rx']) || 0 @tx = (upgrade_headers && upgrade_headers[':tx']) || 0 @interface = ::HTTP2::Server.new @connection_fiber = Fiber.current @interface.on(:frame, &method(:send_frame)) @streams = {} end
upgrade_each(socket, opts, headers, body, &block)
click to toggle source
# File lib/tipi/http2_adapter.rb, line 20 def self.upgrade_each(socket, opts, headers, body, &block) adapter = new(socket, opts, headers, body) adapter.each(&block) end
Public Instance Methods
close()
click to toggle source
# File lib/tipi/http2_adapter.rb, line 107 def close @conn.shutdown if @conn.respond_to?(:shutdown) rescue nil @conn.close end
each(&block)
click to toggle source
Iterates over incoming requests
# File lib/tipi/http2_adapter.rb, line 68 def each(&block) @interface.on(:stream) { |stream| start_stream(stream, &block) } upgrade if @upgrade_headers @conn.recv_loop do |data| @rx += data.bytesize @interface << data end rescue SystemCallError, IOError, HTTP2::Error::Error # ignore ensure finalize_client_loop end
finalize_client_loop()
click to toggle source
# File lib/tipi/http2_adapter.rb, line 100 def finalize_client_loop @interface = nil @streams.each_key(&:stop) @conn.shutdown if @conn.respond_to?(:shutdown) rescue nil @conn.close end
get_rx_count()
click to toggle source
# File lib/tipi/http2_adapter.rb, line 82 def get_rx_count count = @rx @rx = 0 count end
get_tx_count()
click to toggle source
# File lib/tipi/http2_adapter.rb, line 88 def get_tx_count count = @tx @tx = 0 count end
send_frame(data)
click to toggle source
# File lib/tipi/http2_adapter.rb, line 40 def send_frame(data) if @transfer_count_request @transfer_count_request.tx_incr(data.bytesize) end @conn << data rescue Polyphony::BaseException raise rescue Exception => e @connection_fiber.transfer e end
set_request_for_transfer_count(request)
click to toggle source
# File lib/tipi/http2_adapter.rb, line 112 def set_request_for_transfer_count(request) @transfer_count_request = request end
start_stream(stream, &block)
click to toggle source
# File lib/tipi/http2_adapter.rb, line 94 def start_stream(stream, &block) stream = HTTP2StreamHandler.new(self, stream, @conn, @first, &block) @first = nil if @first @streams[stream] = true end
unset_request_for_transfer_count(request)
click to toggle source
# File lib/tipi/http2_adapter.rb, line 116 def unset_request_for_transfer_count(request) return unless @transfer_count_request == request @transfer_count_request = nil end
upgrade()
click to toggle source
# File lib/tipi/http2_adapter.rb, line 58 def upgrade @conn << UPGRADE_MESSAGE @tx += UPGRADE_MESSAGE.bytesize settings = @upgrade_headers['http2-settings'] @interface.upgrade(settings, @upgrade_headers, @upgrade_body || '') ensure @upgrade_headers = nil end