Module: Requests::HPACK::Integer
- Defined in:
- lib/requests/hpack.rb
Class Method Summary collapse
Class Method Details
.decode(bytes, pos, prefix_bits) ⇒ Object
135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 |
# File 'lib/requests/hpack.rb', line 135 def decode(bytes, pos, prefix_bits) max = (1 << prefix_bits) - 1 value = bytes.getbyte(pos) & max pos += 1 if value == max m = 0 loop do b = bytes.getbyte(pos) raise Requests::ContentDecodingError, 'truncated hpack integer' if b.nil? pos += 1 value += (b & 127) * (2**m) m += 7 break if b & 128 == 0 end end [value, pos] end |
.encode(value, prefix_bits, first_byte = 0) ⇒ Object
121 122 123 124 125 126 127 128 129 130 131 132 133 134 |
# File 'lib/requests/hpack.rb', line 121 def encode(value, prefix_bits, first_byte = 0) max = (1 << prefix_bits) - 1 if value < max [first_byte | value].pack('C') else out = [first_byte | max].pack('C') value -= max while value >= 128 out << [(value % 128) | 128].pack('C') value /= 128 end out << [value].pack('C') end end |