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