Class: Resolv::DNS
- Inherits:
-
Object
- Object
- Resolv::DNS
- Defined in:
- lib/rubydns/extensions/resolv-1.8.rb,
lib/rubydns/extensions/resolv-1.9.rb
Defined Under Namespace
Classes: Message
Instance Method Summary collapse
- #each_resource(name, typeclass, &proc) ⇒ Object
-
#fetch_resource(name, typeclass) ⇒ Object
This issue was not fixed in 1.9.3 but the proposed patch works as expected: bugs.ruby-lang.org/issues/4788.
-
#query(name, typeclass) ⇒ Object
Queries the given DNS server and returns its response in its entirety.
Instance Method Details
#each_resource(name, typeclass, &proc) ⇒ Object
68 69 70 71 72 |
# File 'lib/rubydns/extensions/resolv-1.9.rb', line 68 def each_resource(name, typeclass, &proc) fetch_resource(name, typeclass) do |reply, reply_name| extract_resources(reply, reply_name, typeclass, &proc) end end |
#fetch_resource(name, typeclass) ⇒ Object
This issue was not fixed in 1.9.3 but the proposed patch works as expected: bugs.ruby-lang.org/issues/4788
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
# File 'lib/rubydns/extensions/resolv-1.9.rb', line 27 def fetch_resource(name, typeclass) lazy_initialize requester = make_udp_requester senders = {} begin @config.resolv(name) {|candidate, tout, nameserver, port| msg = Message.new msg.rd = 1 msg.add_question(candidate, typeclass) unless sender = senders[[candidate, nameserver, port]] sender = senders[[candidate, nameserver, port]] = requester.sender(msg, candidate, nameserver, port) end reply, reply_name = requester.request(sender, tout) case reply.rcode when RCode::NoError if reply.tc == 1 and not Requester::TCP === requester requester.close # Retry via TCP: requester = make_tcp_requester(nameserver, port) senders = {} # This will use TCP for all remaining candidates (assuming the # current candidate does not already respond successfully via # TCP). This makes sense because we already know the full # response will not fit in an untruncated UDP packet. redo else yield(reply, reply_name) end return when RCode::NXDomain raise Config::NXDomain.new(reply_name.to_s) else raise Config::OtherResolvError.new(reply_name.to_s) end } ensure requester.close end end |
#query(name, typeclass) ⇒ Object
Queries the given DNS server and returns its response in its entirety. This allows such responses to be passed upstream with little or no modification/reinterpretation.
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/rubydns/extensions/resolv-1.8.rb', line 28 def query(name, typeclass) lazy_initialize requester = make_requester senders = {} begin @config.resolv(name) {|candidate, tout, nameserver| msg = Message.new msg.rd = 1 msg.add_question(candidate, typeclass) unless sender = senders[[candidate, nameserver]] sender = senders[[candidate, nameserver]] = requester.sender(msg, candidate, nameserver) end reply, reply_name = requester.request(sender, tout) return reply, reply_name } ensure requester.close end end |