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 (*) … ---------------------------------------------------------------
Provides padding functionality for HTTP/2 frames. Padding can be used to obscure the actual size of frame payloads.
Instance Method Summary collapse
-
#pack(data, padding_size: nil, maximum_size: nil) ⇒ Object
Pack data with optional padding into the frame.
-
#padded? ⇒ Boolean
Check if the frame has padding enabled.
-
#unpack ⇒ Object
Unpack frame data, removing padding if present.
Instance Method Details
#pack(data, padding_size: nil, maximum_size: nil) ⇒ Object
Pack data with optional padding into the frame.
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/protocol/http2/padded.rb', line 34 def pack(data, padding_size: nil, maximum_size: nil) if padding_size set_flags(PADDED) buffer = String.new.b buffer << padding_size buffer << data if padding_size buffer << ("\0" * padding_size) end super buffer else clear_flags(PADDED) super data end end |
#padded? ⇒ Boolean
Check if the frame has padding enabled.
26 27 28 |
# File 'lib/protocol/http2/padded.rb', line 26 def padded? flag_set?(PADDED) end |
#unpack ⇒ Object
Unpack frame data, removing padding if present.
58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
# File 'lib/protocol/http2/padded.rb', line 58 def unpack if padded? padding_size = @payload[0].ord # 1 byte for the padding octet, and padding_size bytes for the padding itself: 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 |