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