Class: RubyDNS::Resolver::Request

Inherits:
Object
  • Object
show all
Includes:
EventMachine::Deferrable
Defined in:
lib/rubydns/resolver.rb

Overview

Manages a single DNS question message across one or more servers.

Defined Under Namespace

Modules: TCPRequestHandler, UDPRequestHandler

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(message, servers, options = {}, &block) ⇒ Request

Returns a new instance of Request.



88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
# File 'lib/rubydns/resolver.rb', line 88

def initialize(message, servers, options = {}, &block)
	@message = message
	@packet = message.encode
	
	@servers = servers.dup
	
	# We select the protocol based on the size of the data:
	if @packet.bytesize > UDP_TRUNCATION_SIZE
		@servers.delete_if{|server| server[0] == :udp}
	end
	
	# Measured in seconds:
	@timeout = options[:timeout] || 5
	
	@logger = options[:logger]
end

Instance Attribute Details

#loggerObject (readonly)

Returns the value of attribute logger.



107
108
109
# File 'lib/rubydns/resolver.rb', line 107

def logger
  @logger
end

#messageObject (readonly)

Returns the value of attribute message.



105
106
107
# File 'lib/rubydns/resolver.rb', line 105

def message
  @message
end

#packetObject (readonly)

Returns the value of attribute packet.



106
107
108
# File 'lib/rubydns/resolver.rb', line 106

def packet
  @packet
end

Class Method Details

.fetch(*args) ⇒ Object



74
75
76
77
78
79
80
81
82
83
84
85
86
# File 'lib/rubydns/resolver.rb', line 74

def self.fetch(*args)
	request = self.new(*args)
	
	request.callback do |message|
		yield message
	end
	
	request.errback do |error|
		yield error
	end
	
	request.run!
end

Instance Method Details

#process_response!(response) ⇒ Object



113
114
115
116
117
118
119
120
121
122
# File 'lib/rubydns/resolver.rb', line 113

def process_response!(response)
	if response.tc != 0
		@logger.warn "[#{@message.id}] Received truncated response!" if @logger
		# We hardcode this behaviour for now.
		try_next_server!
	else
		@logger.warn "[#{@message.id}] Received valid response #{response.inspect}" if @logger
		succeed response
	end
end

#run!Object



109
110
111
# File 'lib/rubydns/resolver.rb', line 109

def run!
	try_next_server!
end