class Lib::DHCP::Option122

Public Class Methods

new(*sub_option) click to toggle source
Calls superclass method Lib::DHCP::Option::new
# File lib/lib/dhcp/options/option122.rb, line 18
def initialize(*sub_option)
  oid = self.class.name.split('::').last.sub(/Option/, '').to_i
  sub_options = []
  sub_option.each do |sub|
    opt = create_sub_option(sub)
    sub_options << opt
    define_singleton_method("option#{opt.oid.to_i}".to_sym) { opt }
    #define_singleton_method(:option1) {opt}
  end
  super oid, sub_options
end
unpack(oid, len, payload) click to toggle source
# File lib/lib/dhcp/options/option122.rb, line 64
def self.unpack(oid, len, payload)
  raise ArgumentError, "Wrong Option #{Lib::DHCP::Option::NAME[oid]} length - #{len}" unless len > 0
  i = 0
  sub_options = []
  while i < len
    sub_oid, sub_len = payload.unpack("@#{i}C2")
    sub_payload = payload.unpack("@#{i+2}a#{sub_len}").first.to_s
    raise ArgumentError "Unknown OID format for DHCP  Option122 SubOption - #{sub_oid}" unless sub_oid.respond_to? :to_i
    raise ArgumentError, "Unknown OID for Option122 SubOption - #{sub_oid}" unless sub_oid.to_i > 0 and sub_oid.to_i < 255
    sub_options << eval("Lib::DHCP::Option122::SubOption::Option#{sub_oid.to_i.to_s}").unpack(sub_oid, sub_len, sub_payload)
    # case sub_oid
    #   when 1
    #     sub_options << Lib::DHCP::Option122::SubOption::Option1.unpack(sub_oid, sub_len, sub_payload)
    #   when 2
    #
    # end
    # sub_options << [sub_oid, sub_payload]
    i += (sub_len + 2)
  end
  self.new *sub_options
end

Public Instance Methods

add(sub_option) click to toggle source
# File lib/lib/dhcp/options/option122.rb, line 30
def add(sub_option)
  @payload << create_sub_option(sub_option)
end
len() click to toggle source
# File lib/lib/dhcp/options/option122.rb, line 44
def len
  l = 0
  @payload.each do |sub_option|
    l += (sub_option.len.to_i + 2).to_i
  end
  l
end
pack() click to toggle source
# File lib/lib/dhcp/options/option122.rb, line 53
def pack
  option_pack = ''
  sub_len = 2
  @payload.each do |sub_option|
    sub_len += sub_option.len
    option_pack += sub_option.pack
  end
  [@oid, self.len, option_pack].pack('C2a*')
end
to_s() click to toggle source
# File lib/lib/dhcp/options/option122.rb, line 35
def to_s
  #"Option #{@oid}, LEN #{self.len}, Value #{@payload.to_s}"
  s =''
  @payload.each do |sub_option|
    s += "Option #{sub_option.oid}, LEN #{sub_option.len}, Value #{@payload.to_s} \n\r"
  end
  s
end

Protected Instance Methods

create_sub_option(option) click to toggle source
# File lib/lib/dhcp/options/option122.rb, line 321
def create_sub_option(option)
  if option.is_a? Lib::DHCP::Option
    option
  elsif option.is_a? Array
    case option[0].to_i
      when 1
        Lib::DHCP::Option122::SubOption::Option1.new(option[1])
      when 2
        Lib::DHCP::Option122::SubOption::Option2.new(option[1])
      when 3
        Lib::DHCP::Option122::SubOption::Option3.new(option[1])
      when 4
        Lib::DHCP::Option122::SubOption::Option4.new(*option[1])
      when 5
        Lib::DHCP::Option122::SubOption::Option5.new(*option[1])
      when 6
        Lib::DHCP::Option122::SubOption::Option6.new(option[1])
      when 7
        Lib::DHCP::Option122::SubOption::Option7.new(option[1])
      when 8
        Lib::DHCP::Option122::SubOption::Option8.new(option[1])
      else
        #raise ArgumentError, "Not implemented sub option #{sub[0]} for Option 122"
        Lib::DHCP::Option122::SubOption::Option.new(option[0].to_i, option[1])
    end
  else
    raise ArgumentError, 'Unknown SubOption for Option122'
  end
end