rubydns 0.6.5 → 0.6.6

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 186a24b0ad316d50292be0da61686018bd44aab2
4
- data.tar.gz: 3fe7719aa57dd9fb577f52a59363e7f4b9227198
3
+ metadata.gz: f4fda39223a95e55c2076290f606afad961a2329
4
+ data.tar.gz: 68c313608b3dfff428024fded19fc4ca09031417
5
5
  SHA512:
6
- metadata.gz: 8248f29e70c4e4e0a0a5bbc91d313a47acb66d764be5b26f939e5f5191d3c14424d60933ad1f49b5c6974347a4a37ed6e625431399ee7e94aee279429395cc4d
7
- data.tar.gz: dbd1cecbb5295763311a7724774c0d5065a28602e816385907961777635020f407f2596c0e0e73a62a48dc0da127c8971f6e01b511c54c8b381ad0e241be89d4
6
+ metadata.gz: 446b2658fd2a6438881ca805f0a202ca34f3d3e7b56480751ee230d5dfa3ac93757dac0f51f69edbad6fbc9afc925b8fd11efd774696b63439b1d8b6bfa5c044
7
+ data.tar.gz: 40fa8b55fc9351c2c7afba9791ea58632290f3c21871005729498e1058b01219cc45c3d638076599a203c453ffd2190a4facaeff7d495afbbea397964fd9603b
@@ -23,7 +23,7 @@ require 'rubydns/message'
23
23
  module RubyDNS
24
24
 
25
25
  def self.get_peer_details(connection)
26
- Socket.unpack_sockaddr_in(connection.get_peername)[1]
26
+ Socket.unpack_sockaddr_in(connection.get_peername)
27
27
  end
28
28
 
29
29
  module UDPHandler
@@ -61,7 +61,8 @@ module RubyDNS
61
61
  end
62
62
 
63
63
  def receive_data(data)
64
- options = {:peer => RubyDNS::get_peer_details(self)}
64
+ peer_port, peer_ip = RubyDNS::get_peer_details(self)
65
+ options = {:peer => peer_ip}
65
66
 
66
67
  UDPHandler.process(@server, data, options) do |answer|
67
68
  data = answer.encode
@@ -78,7 +79,8 @@ module RubyDNS
78
79
  data = truncation_error.encode
79
80
  end
80
81
 
81
- self.send_data(data)
82
+ # We explicitly use the ip and port given, because we found that send_data was unreliable in a callback.
83
+ self.send_datagram(data, peer_ip, peer_port)
82
84
  end
83
85
  end
84
86
  end
@@ -40,7 +40,8 @@ module RubyDNS
40
40
 
41
41
  # Provides the next sequence identification number which is used to keep track of DNS messages.
42
42
  def next_id!
43
- return (@sequence += 1)
43
+ # Sequence IDs are 16-bit integers.
44
+ return (@sequence += 1) % (2**16)
44
45
  end
45
46
 
46
47
  # Look up a named resource of the given resource_class.
@@ -115,6 +116,8 @@ module RubyDNS
115
116
  end
116
117
 
117
118
  def process_response!(response)
119
+ finish_request!
120
+
118
121
  if Exception === response
119
122
  @logger.warn "[#{@message.id}] Failure while processing response #{exception}!" if @logger
120
123
  RubyDNS.log_exception(@logger, response) if @logger
@@ -129,7 +132,7 @@ module RubyDNS
129
132
 
130
133
  try_next_server!
131
134
  else
132
- @logger.warn "[#{@message.id}] Received valid response #{response.inspect}" if @logger
135
+ @logger.debug "[#{@message.id}] Received valid response #{response.inspect}" if @logger
133
136
 
134
137
  succeed response
135
138
  end
@@ -137,12 +140,17 @@ module RubyDNS
137
140
 
138
141
  private
139
142
 
140
- def try_next_server!
143
+ def finish_request!
144
+ cancel_timeout
145
+
146
+ # Cancel an existing request if it is in flight:
141
147
  if @request
142
148
  @request.close_connection
143
149
  @request = nil
144
150
  end
145
-
151
+ end
152
+
153
+ def try_next_server!
146
154
  if @servers.size > 0
147
155
  @server = @servers.shift
148
156
 
@@ -159,9 +167,11 @@ module RubyDNS
159
167
  end
160
168
 
161
169
  # Setting up the timeout...
162
- EventMachine::Timer.new(@timeout) do
170
+ timeout(@timeout) do
163
171
  @logger.debug "[#{@message.id}] Request timed out!" if @logger
164
172
 
173
+ finish_request!
174
+
165
175
  try_next_server!
166
176
  end
167
177
  else
@@ -189,7 +199,7 @@ module RubyDNS
189
199
  def receive_data(data)
190
200
  # Receiving response from remote DNS server...
191
201
  message = RubyDNS::decode_message(data)
192
-
202
+
193
203
  # The message id must match, and it can't be truncated:
194
204
  @request.process_response!(message)
195
205
  rescue Resolv::DNS::DecodeError => error
@@ -19,5 +19,5 @@
19
19
  # THE SOFTWARE.
20
20
 
21
21
  module RubyDNS
22
- VERSION = "0.6.5"
22
+ VERSION = "0.6.6"
23
23
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubydns
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.5
4
+ version: 0.6.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Samuel Williams
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-08-29 00:00:00.000000000 Z
11
+ date: 2013-10-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rexec