module Plum::HPACK::Context
Attributes
dynamic_table[R]
limit[R]
size[R]
Public Class Methods
new(dynamic_table_limit)
click to toggle source
# File lib/plum/hpack/context.rb, line 12 def initialize(dynamic_table_limit) @limit = dynamic_table_limit @dynamic_table = [] @size = 0 end
Public Instance Methods
limit=(value)
click to toggle source
# File lib/plum/hpack/context.rb, line 6 def limit=(value) @limit = value evict end
Private Instance Methods
evict()
click to toggle source
# File lib/plum/hpack/context.rb, line 51 def evict while @size > @limit name, value = @dynamic_table.pop @size -= name.bytesize + value.bytesize + 32 end end
fetch(index)
click to toggle source
# File lib/plum/hpack/context.rb, line 25 def fetch(index) if index == 0 raise HPACKError.new("index can't be 0") elsif index <= STATIC_TABLE_SIZE STATIC_TABLE[index - 1] elsif index <= STATIC_TABLE.size + @dynamic_table.size @dynamic_table[index - STATIC_TABLE_SIZE - 1] else raise HPACKError.new("invalid index: #{index}") end end
search(name, value)
click to toggle source
# File lib/plum/hpack/context.rb, line 37 def search(name, value) si = STATIC_TABLE.index { |n, v| n == name && v == value } return si + 1 if si di = @dynamic_table.index { |n, v| n == name && v == value } return di + STATIC_TABLE_SIZE + 1 if di end
search_half(name)
click to toggle source
# File lib/plum/hpack/context.rb, line 44 def search_half(name) si = STATIC_TABLE.index { |n, v| n == name } return si + 1 if si di = @dynamic_table.index { |n, v| n == name } return di + STATIC_TABLE_SIZE + 1 if di end
store(name, value)
click to toggle source
# File lib/plum/hpack/context.rb, line 18 def store(name, value) value = value.to_s @dynamic_table.unshift([name.freeze, value.freeze]) @size += name.bytesize + value.bytesize + 32 evict end