Class Dnsruby::Message::Section
In: lib/Dnsruby/message.rb
Parent: Array
ResolvError EncodeError OtherResolvError ServFail FormErr DecodeError NXRRSet YXDomain NotImp NXDomain VerifyError NotAuth YXRRSet NotZone Refused TsigError Message Update CodeMapper Types MetaTypes QTypes Nsec3HashAlgorithms Algorithms OpCode Classes ExtendedRCode RCode Modes Comparable Name RRSet Resolver SingleResolver StandardError TimeoutError ResolvTimeout DNS Dnssec Hosts SelectThread\n[lib/Dnsruby/select_thread.rb\nlib/Dnsruby/select_thread.rb.michael.rb] Recursor IPv6 IPv4 ZoneTransfer MessageDecoder MessageEncoder Question Header TheLog RR\n[lib/Dnsruby/resource/A.rb\nlib/Dnsruby/resource/AAAA.rb\nlib/Dnsruby/resource/AFSDB.rb\nlib/Dnsruby/resource/CERT.rb\nlib/Dnsruby/resource/DLV.rb\nlib/Dnsruby/resource/DNSKEY.rb\nlib/Dnsruby/resource/DS.rb\nlib/Dnsruby/resource/HINFO.rb\nlib/Dnsruby/resource/IN.rb\nlib/Dnsruby/resource/ISDN.rb\nlib/Dnsruby/resource/LOC.rb\nlib/Dnsruby/resource/MINFO.rb\nlib/Dnsruby/resource/MX.rb\nlib/Dnsruby/resource/NAPTR.rb\nlib/Dnsruby/resource/NSAP.rb\nlib/Dnsruby/resource/NSEC.rb\nlib/Dnsruby/resource/NSEC3.rb\nlib/Dnsruby/resource/NSEC3PARAM.rb\nlib/Dnsruby/resource/OPT.rb\nlib/Dnsruby/resource/PX.rb\nlib/Dnsruby/resource/RP.rb\nlib/Dnsruby/resource/RRSIG.rb\nlib/Dnsruby/resource/RT.rb\nlib/Dnsruby/resource/SOA.rb\nlib/Dnsruby/resource/SPF.rb\nlib/Dnsruby/resource/SRV.rb\nlib/Dnsruby/resource/TKEY.rb\nlib/Dnsruby/resource/TSIG.rb\nlib/Dnsruby/resource/TXT.rb\nlib/Dnsruby/resource/X25.rb\nlib/Dnsruby/resource/domain_name.rb\nlib/Dnsruby/resource/generic.rb\nlib/Dnsruby/resource/resource.rb] ValidatorThread PacketSender ResolverRuby Config KeyCache Cache SingleVerifier Resolv Iana lib/Dnsruby/DNS.rb lib/Dnsruby/dnssec.rb lib/Dnsruby/Hosts.rb lib/Dnsruby/select_thread.rb.michael.rb lib/Dnsruby/Recursor.rb lib/Dnsruby/update.rb lib/Dnsruby/ipv6.rb lib/Dnsruby/ipv4.rb lib/Dnsruby/code_mapper.rb lib/Dnsruby/zone_transfer.rb lib/Dnsruby/message.rb lib/Dnsruby/TheLog.rb lib/Dnsruby/resource/resource.rb lib/Dnsruby/validator_thread.rb lib/Dnsruby/PacketSender.rb lib/Dnsruby/Resolver.rb lib/Dnsruby/Config.rb lib/Dnsruby/key_cache.rb lib/Dnsruby/Cache.rb lib/Dnsruby/single_verifier.rb lib/Dnsruby/SingleResolver.rb lib/Dnsruby/name.rb lib/dnsruby.rb lib/Dnsruby/resource/TKEY.rb lib/Dnsruby/iana_ports.rb Dnsruby dot/m_56_0.png

Methods

==   new   remove_rrset   rrset   rrsets  

Public Class methods

[Source]

    # File lib/Dnsruby/message.rb, line 91
91:       def initialize(msg = nil)
92:         @msg = msg
93:         super(0)
94:       end

Public Instance methods

[Source]

     # File lib/Dnsruby/message.rb, line 149
149:       def ==(other)
150:         return false unless (other.instance_of?Message::Section)
151:         return false if (other.rrsets(nil, true).length != self.rrsets(nil, true).length)
152:         otherrrsets = other.rrsets(nil, true)
153:         self.rrsets(nil, true).each {|rrset|
154:           return false unless otherrrsets.include?rrset
155:         }
156:         return true
157:       end

[Source]

     # File lib/Dnsruby/message.rb, line 159
159:       def remove_rrset(name, type)
160:         # Remove all RRs with the name and type from the section.
161:         # Need to worry about header counts here - can we get Message to
162:         # update the counts itself, rather than the section worrying about it?
163:         rrs_to_delete = []
164:         each do |rr|
165:           next if rr.rr_type == Types::OPT
166:           if ((rr.name.to_s.downcase == name.to_s.downcase) &&
167:                 ((rr.type == type) ||
168:                   ((rr.type == Types::RRSIG) && (rr.type_covered == type)) ))
169:             rrs_to_delete.push(rr)
170:           end
171:         end
172:         rrs_to_delete.each {|rr|
173:           delete(rr)
174:         }
175:         @msg.update_counts if @msg
176:       end

Return the rrset of the specified type in this section

[Source]

     # File lib/Dnsruby/message.rb, line 96
 96:       def rrset(name, type=Types.A, klass=Classes::IN)
 97:         rrs = select{|rr| 
 98:           type_ok = (rr.type==type)
 99:           if (rr.type == Types::RRSIG)
100:             type_ok = (rr.type_covered == type)
101:           end
102:           type_ok && (rr.klass == klass) && (rr.name.to_s.downcase == name.to_s.downcase)
103:         }
104:         rrset = RRSet.new()
105:         rrs.each do |rr|
106:           rrset.add(rr)
107:         end
108:         return rrset
109:       end

Return an array of all the rrsets in the section

[Source]

     # File lib/Dnsruby/message.rb, line 112
112:       def rrsets(type = nil, include_opt = false)
113:         if (type && !(Types === type))
114:           type = Types.new(type)
115:         end
116:         ret = []
117:         each do |rr|
118:           next if (!include_opt && (rr.type == Types::OPT))
119:           #          if (type)
120:           #            next if ((rr.type == Types.RRSIG) && (type != Types.RRSIG) && (rr.type_covered != type))
121:           #            next if (rr.type != type)
122:           #          end
123:           if (type)
124:             # if this is an rrsig type, then :
125:             #    only include it if the type_covered is the type requested,
126:             #    OR if the type requested is an RRSIG
127:             if (rr.type == Types::RRSIG)
128:               if ((rr.type_covered == type) || (type == Types::RRSIG))
129:               else
130:                 next
131:               end
132:               #              next if ((rr.type_covered != type) || (type != Types.RRSIG))
133:             elsif (rr.type != type)
134:               next
135:             end
136:           end
137: 
138:           found_rrset = false
139:           ret.each do |rrset|
140:             found_rrset = rrset.add(rr)
141:             break if found_rrset
142:           end
143:           if (!found_rrset)
144:             ret.push(RRSet.new(rr))
145:           end
146:         end
147:         return ret        
148:       end

[Validate]