class PacketGen::PcapNG::Block
@abstract Base class for all block types @author Sylvain Daubert
Attributes
endian[RW]
@return [:little, :big]
Public Class Methods
new(options={})
click to toggle source
Calls superclass method
# File lib/packetgen/pcapng/block.rb, line 29 def initialize(options={}) super end
Public Instance Methods
options?()
click to toggle source
Has this block option? @return [Boolean] @since 2.7.0
# File lib/packetgen/pcapng/block.rb, line 36 def options? @fields.key?(:options) && @fields[:options].sz.positive? end
pad_field(*fields)
click to toggle source
Pad given field to 32 bit boundary, if needed @param [Array<Symbol>] fields block fields to pad @return [void]
# File lib/packetgen/pcapng/block.rb, line 50 def pad_field(*fields) fields.each do |field| obj = @fields[field] pad_size = (obj.sz % 4).zero? ? 0 : (4 - (obj.sz % 4)) obj << "\x00" * pad_size end end
recalc_block_len()
click to toggle source
Calculate block length and update :block_len and block_len2 fields @return [void]
# File lib/packetgen/pcapng/block.rb, line 42 def recalc_block_len len = fields.map { |f| @fields[f].to_s }.join.size self.block_len = self.block_len2 = len end
Private Instance Methods
check_len_coherency()
click to toggle source
# File lib/packetgen/pcapng/block.rb, line 72 def check_len_coherency raise InvalidFileError, 'Incoherency in Block length' unless self.block_len == self.block_len2 end
endianness(endian)
click to toggle source
Set the endianness for the various Int classes handled by self. Must be called by all subclass initialize method. @param [:little, :big] endian @return [:little, :big] returns endian
# File lib/packetgen/pcapng/block.rb, line 64 def endianness(endian) raise ArgumentError, "unknown endianness for #{self.class}" unless %i[little big].include?(endian) @endian = endian @fields.each { |_f, v| v.endian = endian if v.is_a?(Types::Int) } endian end
read_blocklen2_and_check(io)
click to toggle source
# File lib/packetgen/pcapng/block.rb, line 88 def read_blocklen2_and_check(io) self[:block_len2].read io.read(4) check_len_coherency end
remove_padding(io, data_len)
click to toggle source
# File lib/packetgen/pcapng/block.rb, line 82 def remove_padding(io, data_len) data_pad_len = (4 - (data_len % 4)) % 4 io.read data_pad_len data_pad_len end
to_io(str_or_io)
click to toggle source
# File lib/packetgen/pcapng/block.rb, line 76 def to_io(str_or_io) return str_or_io if str_or_io.respond_to? :read StringIO.new(force_binary(str_or_io.to_s)) end