module Protocol::HTTP2::Padded

Certain frames can have padding: http2.github.io/http2-spec/#padding

--------------- |Pad Length? (8)| ---------------———————————————–+ | Data (*) … --------------------------------------------------------------- | Padding (*) … ---------------------------------------------------------------

Public Instance Methods

pack(data, padding_size: nil, maximum_size: nil) click to toggle source
Calls superclass method
# 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?() click to toggle source
# File lib/protocol/http2/padded.rb, line 38
def padded?
        flag_set?(PADDED)
end
unpack() click to toggle source
# 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