class Lib::DHCP::Message::LeaseQuery

Public Class Methods

new(htype: 1, hlen: 6, hops: 0, xid: nil, secs: 0, flags: 0, ciaddr: 0, yiaddr: 0, siaddr: 0, giaddr: 0, chaddr: , sname: '.', file: '.', options: nil) click to toggle source
Calls superclass method
# File lib/lib/dhcp/messages/lease_query.rb, line 12
def initialize(htype: 1, hlen: 6, hops: 0, xid: nil, secs: 0, flags: 0, ciaddr: 0, yiaddr: 0, siaddr: 0, giaddr: 0, chaddr: , sname: '.', file: '.', options: nil)
  super(
      :op => BOOTREQUEST,
      :htype => htype,
      :hlen => hlen,
      :hops => hops,
      :xid => xid,
      :secs => secs,
      :flags => flags,
      :ciaddr => ciaddr,
      :yiaddr => yiaddr,
      :siaddr => siaddr,
      :giaddr => giaddr,
      :chaddr => chaddr,
      :sname => sname,
      :file => file
  )
  if options.is_a? Array or options.is_a? Lib::DHCP::Options
    options.each { |option| self.options.add option unless option.oid.to_i == Option::MESSAGE_TYPE }
  elsif options.is_a? Lib::DHCP::Option
    self.options.add options
  elsif !options.nil?
    raise TypeError, "Can't convert #{options.class.name} to Lib::DHCP::Option"
  end
  self.options.add Lib::DHCP::Option53.new(LEASE_QUERY)

end
unpack(packet) click to toggle source
Calls superclass method Lib::DHCP::Message::unpack
# File lib/lib/dhcp/messages/lease_query.rb, line 48
def self.unpack(packet)
  res = super(packet)
  raise TypeError, "No implicit conversion of #{res.class.name} into #{self.class.name}" unless res.is_a? self.class
  res
end

Public Instance Methods

pack() click to toggle source
Calls superclass method Lib::DHCP::Message#pack
# File lib/lib/dhcp/messages/lease_query.rb, line 40
def pack
  # noinspection RubyResolve
  self.option53 = LEASE_QUERY
  self.op = BOOTREQUEST
  sanity_check
  super
end
query_by_client_id?() click to toggle source
# File lib/lib/dhcp/messages/lease_query.rb, line 62
def query_by_client_id?
  option61.nil? ? false : true
end
query_by_ip?() click to toggle source
# File lib/lib/dhcp/messages/lease_query.rb, line 54
def query_by_ip?
  (ciaddr != 0) ? true : false
end
query_by_mac?() click to toggle source
# File lib/lib/dhcp/messages/lease_query.rb, line 58
def query_by_mac?
  (htype != 0 and hlen != 0 and chaddr != 0) ? true : false
end

Protected Instance Methods

sanity_check() click to toggle source

noinspection RubyResolve

# File lib/lib/dhcp/messages/lease_query.rb, line 71
def sanity_check
  if query_by_ip?
    raise Lib::DHCP::SanityCheck::LeaseQuery, 'The values of htype, hlen, and chaddr MUST be set to zero '+
        'in the query by IP' unless self.htype == 0 and self.hlen == 0  and self.chaddr == 0
    raise Lib::DHCP::SanityCheck::LeaseQuery, 'The Client-identifier option (option 61) MUST NOT appear in the ' +
        'query by IP'  unless self.option61.nil?
  elsif query_by_mac?
    raise Lib::DHCP::SanityCheck::LeaseQuery, 'The "ciaddr" field MUST be set to zero in the query ' +
        'by MAC address' unless self.ciaddr == 0
    raise Lib::DHCP::SanityCheck::LeaseQuery, 'The Client-identifier option (option 61) MUST NOT appear in the ' +
        'query by MAC'  if self.option61
  elsif query_by_client_id?
    raise Lib::DHCP::SanityCheck::LeaseQuery, 'The "ciaddr" field MUST be set to zero in the query ' +
        'by Client identifier' unless self.ciaddr == 0
    raise Lib::DHCP::SanityCheck::LeaseQuery, 'The values of htype, hlen, and chaddr MUST be set to zero in ' +
        'the query by Client identifier' unless self.htype == 0 or self.hlen == 0  and self.chaddr != 0
  else
    raise Lib::DHCP::SanityCheck::LeaseQuery, 'Unknown query type'
  end
end