class Dnsruby::Section
Public Class Methods
new(msg = nil)
click to toggle source
Calls superclass method
# File lib/dnsruby/message/section.rb, line 4 def initialize(msg = nil) @msg = msg super(0) end
Public Instance Methods
==(other)
click to toggle source
# File lib/dnsruby/message/section.rb, line 67 def ==(other) return false unless self.class == other.class return false if other.rrsets(nil, true).length != self.rrsets(nil, true).length otherrrsets = other.rrsets(nil) self.rrsets(nil).each {|rrset| return false unless otherrrsets.include?(rrset) } true end
remove_rrset(name, type)
click to toggle source
# File lib/dnsruby/message/section.rb, line 79 def remove_rrset(name, type) # Remove all RRs with the name and type from the section. # Need to worry about header counts here - can we get Message to # update the counts itself, rather than the section worrying about it? rrs_to_delete = [] each do |rr| next if rr.rr_type == Types::OPT if (rr.name.to_s.downcase == name.to_s.downcase) && ((rr.type == type) || ((rr.type == Types::RRSIG) && (rr.type_covered == type))) rrs_to_delete.push(rr) end end rrs_to_delete.each { |rr| delete(rr) } @msg.update_counts if @msg end
rrset(name, type=Types.A, klass=Classes::IN)
click to toggle source
Return the rrset of the specified type in this section
# File lib/dnsruby/message/section.rb, line 10 def rrset(name, type=Types.A, klass=Classes::IN) rrs = select{|rr| type_ok = (rr.type==type) if rr.type == Types::RRSIG type_ok = (rr.type_covered == type) end unless /\.\z/ =~ name.to_s name = name.to_s + '.' end type_ok && (rr.klass == klass) && (rr.name.to_s(true).downcase == name.to_s().downcase) } rrset = RRSet.new() rrs.each do |rr| rrset.add(rr) end rrset end
rrsets(type = nil, include_opt = false)
click to toggle source
Return an array of all the rrsets in the section
# File lib/dnsruby/message/section.rb, line 29 def rrsets(type = nil, include_opt = false) if type && !(Types === type) type = Types.new(type) end ret = [] each do |rr| next if (!include_opt && (rr.type == Types::OPT)) # if (type) # next if ((rr.type == Types.RRSIG) && (type != Types.RRSIG) && (rr.type_covered != type)) # next if (rr.type != type) # end if (type) # if this is an rrsig type, then : # only include it if the type_covered is the type requested, # OR if the type requested is an RRSIG if rr.type == Types::RRSIG if (rr.type_covered == type) || (type == Types::RRSIG) else next end # next if ((rr.type_covered != type) || (type != Types.RRSIG)) elsif rr.type != type next end end found_rrset = false ret.each do |rrset| found_rrset = rrset.add(rr) break if found_rrset end unless found_rrset ret.push(RRSet.new(rr)) end end ret end