dnstraverse 0.1.8 → 0.1.9

Sign up to get free protection for your applications and to get access to all the features.
@@ -25,6 +25,7 @@ module DNSTraverse
25
25
  class Referral
26
26
  include MessageUtility
27
27
 
28
+ attr_reader :status # :normal, :loop, :noglue
28
29
  attr_reader :server, :serverips, :qname, :qclass, :qtype, :nsatype
29
30
  attr_reader :refid, :refkey, :infocache, :parent, :bailiwick
30
31
  attr_reader :warnings, :children, :parent_ip
@@ -85,6 +86,7 @@ module DNSTraverse
85
86
  # of a resolution of a referral that didn't have glue records will have
86
87
  # this set to true so that you can distringuish this detail
87
88
  def initialize(args)
89
+ @status = args[:status] || :normal
88
90
  @resolver = args[:resolver] # Dnsruby::Resolver object
89
91
  @qname = args[:qname]
90
92
  @qclass = args[:qclass] || :IN
@@ -191,14 +193,16 @@ module DNSTraverse
191
193
  raise "This Referral object has already been resolved" if resolved?
192
194
  if noglue? then
193
195
  # foo.net IN NS ns.foo.net - no IP cached & no glue = failure
194
- Log.debug { "Attempt to resolve #{@server} with a bailiwick referral " +
196
+ Log.debug { "Resolve: #{@server} with a bailiwick referral " +
195
197
  " of #{bailiwick} - no glue record provided" }
196
- return Array.new
198
+ @status = :noglue
199
+ return EMPTY_ARRAY
197
200
  end
198
201
  if loop? then
199
202
  # b IN NS c.d, d IN NS a.b
200
- Log.debug { "Loop reached at server #{server}" }
201
- return Array.new
203
+ Log.debug { "Resolve: Loop reached at server #{server}" }
204
+ @status = :loop
205
+ return EMPTY_ARRAY
202
206
  end
203
207
  child_refid = 1
204
208
  starters, newbailiwick = @infocache.get_startservers(@server)
@@ -223,7 +227,8 @@ module DNSTraverse
223
227
  Log.debug { "Calculating resolution: #{self}" }
224
228
  # create stats_resolve containing all the statistics of the resolution
225
229
  @stats_resolve = Hash.new
226
- if noglue? then # in-bailiwick referral without glue
230
+ case @status
231
+ when :noglue # in-bailiwick referral without glue
227
232
  r = DNSTraverse::Response::NoGlue.new(:qname => @qname,
228
233
  :qclass => @qclass,
229
234
  :qtype => @qtype,
@@ -232,7 +237,7 @@ module DNSTraverse
232
237
  :bailiwick => @bailiwick)
233
238
  @stats_resolve[r.stats_key] = { :prob => 1.0, :response => r,
234
239
  :referral => self }
235
- elsif loop? then # endless loop, e.g. b. NS c.d, d NS a.b
240
+ when :loop # endless loop, e.g. b. NS c.d, d NS a.b
236
241
  r = DNSTraverse::Response::Loop.new(:qname => @qname,
237
242
  :qclass => @qclass,
238
243
  :qtype => @qtype,
@@ -347,7 +352,6 @@ module DNSTraverse
347
352
  def resolved?
348
353
  # root-root is always resolved, otherwise check we have IP addresses
349
354
  return true if is_rootroot?
350
- return true if @noglue
351
355
  return false if @serverips.nil?
352
356
  return true
353
357
  end
@@ -17,7 +17,7 @@ module DNSTraverse
17
17
 
18
18
  class Response::Loop < Response
19
19
 
20
- attr_reader :qname, :qclass, :qtype, :ip, :bailiwick, :server
20
+ attr_reader :qname, :qclass, :qtype, :ip, :bailiwick, :server, :status
21
21
 
22
22
  def initialize(args)
23
23
  # we queried @ip about @qname/@qclass/@qtype and received @server as a
@@ -28,10 +28,6 @@ module DNSTraverse
28
28
  @bailiwick = args[:bailiwick]
29
29
  @ip = args[:ip]
30
30
  @server = args[:server]
31
- @decoded_query = nil
32
- @infocache = nil
33
- @starters = nil
34
- @starters_bailiwick = nil
35
31
  @status = :loop
36
32
  update_stats_key
37
33
  return self
@@ -42,7 +38,7 @@ module DNSTraverse
42
38
  end
43
39
 
44
40
  def update_stats_key
45
- @stats_key = "key:#{@ip}:#{@status}:#{@qname}:#{@qclass}:#{@qtype}:#{@server}:#{@bailiwick}"
41
+ @stats_key = "key:#{@status}:#{@ip}:#{@qname}:#{@qclass}:#{@qtype}:#{@server}:#{@bailiwick}"
46
42
  end
47
43
 
48
44
  def to_s
@@ -17,7 +17,7 @@ module DNSTraverse
17
17
 
18
18
  class Response::NoGlue < Response
19
19
 
20
- attr_reader :qname, :qclass, :qtype, :ip, :bailiwick, :server
20
+ attr_reader :qname, :qclass, :qtype, :ip, :bailiwick, :server, :status
21
21
 
22
22
  def initialize(args)
23
23
  # we queried @ip about @qname/@qclass/@qtype and received @server as a
@@ -28,10 +28,6 @@ module DNSTraverse
28
28
  @bailiwick = args[:bailiwick]
29
29
  @ip = args[:ip]
30
30
  @server = args[:server]
31
- @decoded_query = nil
32
- @infocache = nil
33
- @starters = nil
34
- @starters_bailiwick = nil
35
31
  @status = :noglue
36
32
  update_stats_key
37
33
  return self
@@ -42,7 +38,7 @@ module DNSTraverse
42
38
  end
43
39
 
44
40
  def update_stats_key
45
- @stats_key = "key:#{@ip}:#{@status}:#{@qname}:#{@qclass}:#{@qtype}:#{@server}:#{@bailiwick}"
41
+ @stats_key = "key:#{@status}:#{@ip}:#{@qname}:#{@qclass}:#{@qtype}:#{@server}:#{@bailiwick}"
46
42
  end
47
43
 
48
44
  def to_s
@@ -51,4 +47,4 @@ module DNSTraverse
51
47
 
52
48
  end
53
49
 
54
- end
50
+ end
@@ -2,7 +2,7 @@ module DNSTraverse
2
2
  module Version
3
3
  MAJOR = 0
4
4
  MINOR = 1
5
- PATCH = 8
5
+ PATCH = 9
6
6
  STRING = "#{MAJOR}.#{MINOR}.#{PATCH}"
7
7
  end
8
8
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dnstraverse
3
3
  version: !ruby/object:Gem::Version
4
- hash: 11
4
+ hash: 9
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 8
10
- version: 0.1.8
9
+ - 9
10
+ version: 0.1.9
11
11
  platform: ruby
12
12
  authors:
13
13
  - James Ponder
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-08-20 00:00:00 +01:00
18
+ date: 2011-08-21 00:00:00 +01:00
19
19
  default_executable: dnstraverse
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency