Module: HTTP::Protocol::HTTP2::Padded
- Included in:
- DataFrame, HeadersFrame, PushPromiseFrame
- Defined in:
- lib/http/protocol/http2/padded.rb
Overview
Certain frames can have padding: http2.github.io/http2-spec/#padding
---------------
|Pad Length? (8)| ---------------
———————————————–+ | Data (*) … ---------------------------------------------------------------
| Padding (*) … ---------------------------------------------------------------
Constant Summary collapse
- MODULUS =
We will round up frames to the given length:
0x0F
Instance Method Summary collapse
- #pack(data, modulus: MODULUS, padding_size: nil, maximum_size: nil) ⇒ Object
- #padded? ⇒ Boolean
- #unpack ⇒ Object
Instance Method Details
#pack(data, modulus: MODULUS, padding_size: nil, maximum_size: nil) ⇒ Object
46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
# File 'lib/http/protocol/http2/padded.rb', line 46 def pack(data, modulus: MODULUS, padding_size: nil, maximum_size: nil) padding_size ||= (MODULUS - data.bytesize) % MODULUS if maximum_size maximum_padding_size = maximum_size - data.bytesize if padding_size > maximum_padding_size padding_size = maximum_padding_size end end if padding_size > 0 set_flags(PADDED) buffer = String.new.b buffer << padding_size.chr buffer << data buffer << "\0" * padding_size super buffer else clear_flags(PADDED) super data end end |
#padded? ⇒ Boolean
39 40 41 |
# File 'lib/http/protocol/http2/padded.rb', line 39 def padded? flag_set?(PADDED) end |
#unpack ⇒ Object
74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
# File 'lib/http/protocol/http2/padded.rb', line 74 def unpack if padded? padding_size = @payload[0].ord data_size = @payload.bytesize - 1 - padding_size if data_size < 0 raise ProtocolError, "Invalid padding length: #{padding_size}" end return @payload.byteslice(1, data_size) else return @payload end end |