Class: Iodine::Http::Http2::HPACK

Inherits:
Object
  • Object
show all
Defined in:
lib/iodine/http/hpack.rb

Defined Under Namespace

Classes: IndexTable

Instance Method Summary collapse

Constructor Details

#initializeHPACK

Returns a new instance of HPACK.



60
61
62
63
# File 'lib/iodine/http/hpack.rb', line 60

def initialize
  @decoding_list = IndexTable.new
  @encoding_list = IndexTable.new
end

Instance Method Details

#decode(data) ⇒ Object



65
66
67
68
69
70
71
72
73
# File 'lib/iodine/http/hpack.rb', line 65

def decode data
  data = StringIO.new data
  results = {}
  while (field = decode_field(data))
    name = (field[0].is_a?(String) && field[0][0] == ':'.freeze) ? field[0][1..-1].to_sym : field[0]
    results[name] ? (results[name].is_a?(String) ? (results[name] = [results[name], field[1]]) : (results[name] << field[1]) ) : (results[name] = field[1]) if field[1]
  end
  results
end

#encode(headers = {}) ⇒ Object



74
75
76
77
78
# File 'lib/iodine/http/hpack.rb', line 74

def encode headers = {}
  buffer = String.new.force_encoding(::Encoding::ASCII_8BIT)
  headers.each {|k, v| buffer << encode_field( (k.is_a?(String) ? k : ":#{k.to_s}".freeze) ,v) if v}
  buffer.force_encoding(::Encoding::ASCII_8BIT)
end

#resize(max) ⇒ Object



79
80
81
82
# File 'lib/iodine/http/hpack.rb', line 79

def resize max
  @decoding_list.resize max
  @encoding_list.resize max
end