Method: Dnsruby::RRSet#add

Defined in:
lib/Dnsruby/resource/resource.rb

#add(rin, do_clone = true) ⇒ Object

Add the RR to this RRSet Takes a copy of the RR by default. To suppress this, pass false as the second parameter.



72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
# 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