Class Dnsruby::Message::Section
In: lib/Dnsruby/message.rb
Parent: Array
Message Update ResolvError EncodeError OtherResolvError ServFail FormErr DecodeError NXRRSet YXDomain NotImp NXDomain VerifyError NotAuth YXRRSet NotZone Refused TsigError CodeMapper Types MetaTypes QTypes Nsec3HashAlgorithms Algorithms OpCode Classes ExtendedRCode Modes RCode Comparable Name RRSet TsigNotSignedResponseError Resolver SingleResolver StandardError TimeoutError ResolvTimeout DNS Dnssec Hosts 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/DHCID.rb\nlib/Dnsruby/resource/DLV.rb\nlib/Dnsruby/resource/DNSKEY.rb\nlib/Dnsruby/resource/DS.rb\nlib/Dnsruby/resource/HINFO.rb\nlib/Dnsruby/resource/HIP.rb\nlib/Dnsruby/resource/IN.rb\nlib/Dnsruby/resource/IPSECKEY.rb\nlib/Dnsruby/resource/ISDN.rb\nlib/Dnsruby/resource/KX.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/SSHFP.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] Recursor IPv6 IPv4 ZoneTransfer MessageDecoder MessageEncoder Question Header TheLog ValidatorThread PacketSender ResolverRuby Config KeyCache Cache SingleVerifier SelectThread Resolv ZoneReader lib/Dnsruby/DNS.rb lib/Dnsruby/dnssec.rb lib/Dnsruby/Hosts.rb lib/Dnsruby/resource/PX.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/select_thread.rb lib/Dnsruby/name.rb lib/dnsruby.rb lib/Dnsruby/resource/TKEY.rb lib/Dnsruby/zone_reader.rb Dnsruby dot/m_61_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 152
152:       def ==(other)
153:         return false unless (other.instance_of?Message::Section)
154:         return false if (other.rrsets(nil, true).length != self.rrsets(nil, true).length)
155:         otherrrsets = other.rrsets(nil, true)
156:         self.rrsets(nil, true).each {|rrset|
157:           return false unless otherrrsets.include?rrset
158:         }
159:         return true
160:       end

[Source]

     # File lib/Dnsruby/message.rb, line 162
162:       def remove_rrset(name, type)
163:         # Remove all RRs with the name and type from the section.
164:         # Need to worry about header counts here - can we get Message to
165:         # update the counts itself, rather than the section worrying about it?
166:         rrs_to_delete = []
167:         each do |rr|
168:           next if rr.rr_type == Types::OPT
169:           if ((rr.name.to_s.downcase == name.to_s.downcase) &&
170:                 ((rr.type == type) ||
171:                   ((rr.type == Types::RRSIG) && (rr.type_covered == type)) ))
172:             rrs_to_delete.push(rr)
173:           end
174:         end
175:         rrs_to_delete.each {|rr|
176:           delete(rr)
177:         }
178:         @msg.update_counts if @msg
179:       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:           if (!(/\.\z/ =~ name.to_s))
103:             name = name.to_s + "."
104:           end
105:           type_ok && (rr.klass == klass) && (rr.name.to_s(true).downcase == name.to_s().downcase)
106:         }
107:         rrset = RRSet.new()
108:         rrs.each do |rr|
109:           rrset.add(rr)
110:         end
111:         return rrset
112:       end

Return an array of all the rrsets in the section

[Source]

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

[Validate]