class PacketGen::Header::TCP::Options

Container for TCP options in {TCP TCP header}. @author Sylvain Daubert

Public Class Methods

option_classes() click to toggle source

Get {Option} subclasses @return [Array<Class>]

# File lib/packetgen/header/tcp/options.rb, line 20
def self.option_classes
  return @klasses if defined? @klasses

  @klasses = []
  Option.constants.each do |cst|
    next unless cst.to_s.end_with? '_KIND'

    optname = cst.to_s.sub(/_KIND/, '')
    @klasses[Option.const_get(cst)] = TCP.const_get(optname)
  end
  @klasses
end

Private Instance Methods

real_type(opt) click to toggle source
# File lib/packetgen/header/tcp/options.rb, line 49
def real_type(opt)
  klasses = self.class.option_classes
  klasses[opt.kind].nil? ? Option : klasses[opt.kind]
end
record_from_hash(hsh) click to toggle source
# File lib/packetgen/header/tcp/options.rb, line 35
def record_from_hash(hsh)
  if hsh.key? :opt
    klassname = hsh.delete(:opt)
    raise ArgumentError, 'opt should be a TCP::Option subclass' unless TCP.const_defined?(klassname)

    klass = TCP.const_get(klassname)
    raise ArgumentError, 'opt should be a TCP::Option subclass' unless klass < Option

    klass.new(hsh)
  else
    hsh
  end
end