Object
RFC2181, section 5 "It is however possible for most record types to exist with the same label, class and type, but with different data. Such a group of records is hereby defined to be a Resource Record Set (RRSet)." This class also stores the RRSIG records which cover the RRSet
# File lib/Dnsruby/resource/resource.rb, line 111 def <=>(other) # return 1 if ((!other) || !(other.name) || !(other.type)) # return -1 if (!@name) if (name.canonical == other.name.canonical) return type.code <=> other.type.code else return name <=> other.name end end
# File lib/Dnsruby/resource/resource.rb, line 139 def ==(other) return false unless other.instance_of?RRSet return false if (other.sigs.length != self.sigs.length) return false if (other.rrs.length != self.rrs.length) return false if (other.ttl != self.ttl) otherrrs = other.rrs self.rrs.each {|rr| return false if (!otherrrs.include?rr) } othersigs= other.sigs self.sigs.each {|sig| return false if (!othersigs.include?sig) } return true end
# File lib/Dnsruby/resource/resource.rb, line 163 def [](index) return @rrs[index] end
Add the RR to this RRSet Takes a copy of the RR by default. To suppress this, pass false as the second parameter.
# File lib/Dnsruby/resource/resource.rb, line 72 def add(rin, do_clone = true) if (rin.instance_of?RRSet) ret = false [rin.rrs, rin.sigs].each {|rr| ret = add(rr)} return ret end # r = RR.create(r.to_s) # clone the record r = nil if do_clone r = rin.clone else r = rin end if (@rrs.size() == 0) # && !(r.type == Types.RRSIG)) return privateAdd(r) end # Check the type, klass and ttl are correct first = @rrs[0] if (!r.sameRRset(first)) return false # raise ArgumentError.new("record does not match rrset") end if (!(r.type == Types::RRSIG) && (!(first.type == Types::RRSIG))) if (r.ttl != first.ttl) # RFC2181, section 5.2 if (r.ttl > first.ttl) r.ttl=(first.ttl) else @rrs.each do |rr| rr.ttl = r.ttl end end end end return privateAdd(r) # return true end
# File lib/Dnsruby/resource/resource.rb, line 158 def each @rrs.each do |rr| yield rr end end
Return the klass of this RRSet
# File lib/Dnsruby/resource/resource.rb, line 174 def klass return @rrs[0].klass end
# File lib/Dnsruby/resource/resource.rb, line 202 def length return @rrs.length end
# File lib/Dnsruby/resource/resource.rb, line 188 def name if (@rrs[0]) return @rrs[0].name else return nil end end
The RRs (not RRSIGs) stored in this RRSet
# File lib/Dnsruby/resource/resource.rb, line 47 def rrs return @rrs[0, @rrs.length-@num_sigs] end
# File lib/Dnsruby/resource/resource.rb, line 43 def sigs return @rrs[@rrs.length-@num_sigs, @num_sigs] end
# File lib/Dnsruby/resource/resource.rb, line 121 def sort_canonical #Make a list, for all the RRs, where each RR contributes #the canonical RDATA encoding canonical_rrs = {} self.rrs.each do |rr| data = MessageEncoder.new {|msg| rr.encode_rdata(msg, true) }.to_s canonical_rrs[data] = rr end return_rrs = RRSet.new canonical_rrs.keys.sort.each { |rdata| return_rrs.add(canonical_rrs[rdata], false) } return return_rrs end
# File lib/Dnsruby/resource/resource.rb, line 195 def to_s ret = "" each {|rec| ret += rec.to_s + "\n" } return ret end
Return the ttl of this RRSet
# File lib/Dnsruby/resource/resource.rb, line 178 def ttl return @rrs[0].ttl end
# File lib/Dnsruby/resource/resource.rb, line 181 def ttl=(ttl) [rrs, sigs].each {|rrs| rrs.each {|rr| rr.ttl = ttl } } end
Return the type of this RRSet
# File lib/Dnsruby/resource/resource.rb, line 167 def type if (@rrs[0]) return @rrs[0].type end return nil end
Generated with the Darkfish Rdoc Generator 2.