rubydns 0.6.5 → 0.6.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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