Module: Protocol::HTTP2::Padded
- Included in:
- DataFrame, HeadersFrame, PushPromiseFrame
- Defined in:
- lib/protocol/http2/padded.rb
Overview
Certain frames can have padding: http2.github.io/http2-spec/#padding
---------------
|Pad Length? (8)| ---------------
———————————————–+ | Data (*) … ---------------------------------------------------------------
| Padding (*) … ---------------------------------------------------------------
Instance Method Summary collapse
Instance Method Details
#pack(data, padding_size: nil, maximum_size: nil) ⇒ Object
42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
# File 'lib/protocol/http2/padded.rb', line 42 def pack(data, padding_size: nil, maximum_size: nil) if padding_size set_flags(PADDED) buffer = String.new.b buffer << padding_size.chr buffer << data if padding_size > 1 buffer << "\0" * (padding_size - 1) end super buffer else clear_flags(PADDED) super data end end |
#padded? ⇒ Boolean
38 39 40 |
# File 'lib/protocol/http2/padded.rb', line 38 def padded? flag_set?(PADDED) end |
#unpack ⇒ Object
63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
# File 'lib/protocol/http2/padded.rb', line 63 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 |