Class Dnsruby::SingleResolver
In: lib/Dnsruby/SingleResolver.rb
Parent: Resolver
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/generic.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

Dnsruby::SingleResolver

 This class has been deprecated.
 This implementation exists for legacy clients. New code should use the Dnsruby::Resolver class.
 The SingleResolver class targets a single resolver, and controls the sending of a single
 packet with a packet timeout. It performs no retries. Only two threads are used - the client
 thread and a select thread (which is reused across all queries).

Methods

Synchronous

These methods raise an exception or return a response message with rcode==NOERROR

  • Dnsruby::SingleResolver#send_message(msg [, use_tcp]))
  • Dnsruby::SingleResolver#query(name [, type [, klass]])

Asynchronous

These methods use a response queue to return the response and the error to the client. Support for EventMachine has been deprecated

  • Dnsruby::SingleResolver#send_async(...)

Methods

External Aliases

packet_timeout -> query_timeout

Public Class methods

Can take a hash with the following optional keys :

  • :server
  • :port
  • :use_tcp
  • :no_tcp
  • :ignore_truncation
  • :src_address
  • :src_port
  • :udp_size
  • :persistent_tcp
  • :persistent_udp
  • :tsig
  • :packet_timeout
  • :recurse

[Source]

     # File lib/Dnsruby/SingleResolver.rb, line 56
 56:     def initialize(*args)
 57:       arg=args[0]
 58:       @single_res_mutex = Mutex.new
 59:       @packet_timeout = Resolver::DefaultPacketTimeout
 60:       @query_timeout = @packet_timeout
 61:       @port = Resolver::DefaultPort
 62:       @udp_size = Resolver::DefaultUDPSize
 63:       @dnssec = Resolver::DefaultDnssec
 64:       @use_tcp = false
 65:       @no_tcp = false
 66:       @tsig = nil
 67:       @ignore_truncation = false
 68:       @src_address        = nil
 69:       @src_port        = [0]
 70:       @recurse = true
 71:       @persistent_udp = false
 72:       @persistent_tcp = false
 73:       @retry_times = 1
 74:       @retry_delay = 0
 75:       @single_resolvers = []
 76:       @configured = false
 77:       @do_caching = true
 78:       @config = Config.new
 79: 
 80:       if (arg==nil)
 81:         # Get default config
 82:         @config = Config.new
 83:         @config.get_ready
 84:         @server = @config.nameserver[0]
 85:       elsif (arg.kind_of?String)
 86:         @config.get_ready
 87:         @configured= true
 88:         @config.nameserver=[arg]
 89:         @server = @config.nameserver[0]
 90:         #        @server=arg
 91:       elsif (arg.kind_of?Name)
 92:         @config.get_ready
 93:         @configured= true
 94:         @config.nameserver=arg
 95:         @server = @config.nameserver[0]
 96:         #        @server=arg
 97:       elsif (arg.kind_of?Hash)
 98:         arg.keys.each do |attr|
 99:           if (attr == :server)
100:             @config.get_ready
101:             @configured= true
102:             @config.nameserver=[arg[attr]]
103:             @server = @config.nameserver[0]
104: 
105:           else
106:             begin
107:               send(attr.to_s+"=", arg[attr])
108:             rescue Exception
109:               Dnsruby.log.error{"Argument #{attr} not valid\n"}
110:             end
111:           end
112:         end
113:       end
114: 
115:       isr = PacketSender.new({:server=>@server, :dnssec=>@dnssec,
116:           :use_tcp=>@use_tcp, :no_tcp=>@no_tcp, :packet_timeout=>@packet_timeout,
117:           :tsig => @tsig, :ignore_truncation=>@ignore_truncation,
118:           :src_address=>@src_address, :src_port=>@src_port,
119:           :do_caching=>@do_caching,
120:           :recurse=>@recurse, :udp_size=>@udp_size})
121: 
122:       @single_resolvers = [isr]
123: 
124:       #      ResolverRegister::register_single_resolver(self)
125:     end

Public Instance methods

Add the appropriate EDNS OPT RR for the specified packet. This is done automatically, unless you are using Resolver#send_plain_message

[Source]

     # File lib/Dnsruby/SingleResolver.rb, line 168
168:     def add_opt_rr(m)
169:       @single_res_mutex.synchronize {
170:         @single_resolvers[0].add_opt_rr(m)
171:       }
172:     end

[Source]

     # File lib/Dnsruby/SingleResolver.rb, line 161
161:     def packet_timeout=(t)
162:       @packet_timeout = t
163:       @query_timeout = t
164:     end
query_timeout=(t)

Alias for packet_timeout=

[Source]

     # File lib/Dnsruby/SingleResolver.rb, line 144
144:     def server
145:       #      @single_res_mutex.synchronize {
146:       if (!@configured)
147:         @config.get_ready
148:         add_config_nameservers
149:       end
150:       return @single_resolvers[0].server
151:       #      }
152:     end

[Source]

     # File lib/Dnsruby/SingleResolver.rb, line 127
127:     def server=(s)
128:       if (!@configured)
129:         @config.get_ready
130:       end
131:       @server = Config.resolve_server(s).to_s
132:       isr = PacketSender.new({:server=>@server, :dnssec=>@dnssec,
133:           :use_tcp=>@use_tcp, :no_tcp=>@no_tcp, :packet_timeout=>@packet_timeout,
134:           :tsig => @tsig, :ignore_truncation=>@ignore_truncation,
135:           :src_address=>@src_address, :src_port=>@src_port,
136:           :do_caching=>@do_caching,
137:           :recurse=>@recurse, :udp_size=>@udp_size})
138: 
139:       @single_res_mutex.synchronize {
140:         @single_resolvers = [isr]
141:       }
142:     end

[Validate]