Class: Dnsruby::Section
- Inherits:
-
Array
- Object
- Array
- Dnsruby::Section
- Defined in:
- lib/dnsruby/message/section.rb
Instance Method Summary collapse
- #==(other) ⇒ Object
-
#initialize(msg = nil) ⇒ Section
constructor
A new instance of Section.
- #remove_rrset(name, type) ⇒ Object
-
#rrset(name, type = Types.A, klass = Classes::IN) ⇒ Object
Return the rrset of the specified type in this section.
-
#rrsets(type = nil, include_opt = false) ⇒ Object
Return an array of all the rrsets in the section.
Constructor Details
#initialize(msg = nil) ⇒ Section
Returns a new instance of Section.
4 5 6 7 |
# File 'lib/dnsruby/message/section.rb', line 4 def initialize(msg = nil) @msg = msg super(0) end |
Instance Method Details
#==(other) ⇒ Object
67 68 69 70 71 72 73 74 75 76 77 |
# 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) ⇒ Object
79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
# 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) ⇒ Object
Return the rrset of the specified type in this section
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
# 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) ⇒ Object
Return an array of all the rrsets in the section
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
# 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 |