redns 0.1.17 → 0.2.0

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: d2bafcebc9a854b66739ac0f38dd909dd56ec4ef
4
+ data.tar.gz: e3da07761ddd463efaecdbf544d28ef4a8fa7bbd
5
+ SHA512:
6
+ metadata.gz: 51dc9b6de6d62d44cad19112d858a98ad14cc8457213841665c5526da4d6e5eac7045d9c20f0750d8f3622d412e77d4c0f8ec39f013ee4eb160ebacb33d48d2a
7
+ data.tar.gz: 617feea176a9adf4f3e7895bc0f46da460850654ccaa598e26aa168dea00acfa262490f9cee88d62af526b747dafbcbd96f67e588dc2e723ccc4efbc6d476ace
data/.travis.yml ADDED
@@ -0,0 +1,8 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.9.3-p551
4
+ - 2.0.0-p648
5
+ - 2.1.10
6
+ - 2.2.5
7
+ - 2.3.1
8
+ - 2.4.1
data/Gemfile ADDED
@@ -0,0 +1,8 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gem 'rake'
4
+ gem 'eventmachine'
5
+
6
+ group :test do
7
+ gem 'test-unit'
8
+ end
data/LICENSE.txt ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2005-2016 Scott Tadman
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,31 @@
1
+ # redns
2
+
3
+ Reactor-Ready DNS Library
4
+
5
+ This library includes native Ruby encoder/decoder classes for typical
6
+ DNS records that are specified in RFC1035.
7
+
8
+ In addition, RFC2671 extension mechanisms are also supported.
9
+
10
+ ## Installation
11
+
12
+ To install as a dependency, add to your `Gemfile`:
13
+
14
+ gem 'redns'
15
+
16
+ Then `bundle install` should pick up any dependencies.
17
+
18
+ ## Usage
19
+
20
+
21
+
22
+ ## References
23
+
24
+ * [RFC1035](http://www.faqs.org/rfcs/rfc1035.html) - Domain names - implementation and specification
25
+ * [RFC2671](http://www.faqs.org/rfcs/rfc2671.html) - Extension Mechanisms for DNS (EDNS0)
26
+
27
+ ## Copyright
28
+
29
+ (C) 2005-2017 Scott Tadman
30
+
31
+ See [LICENSE](LICENSE.txt) for more details.
data/Rakefile CHANGED
@@ -19,22 +19,11 @@ rescue LoadError
19
19
  end
20
20
 
21
21
  require 'rake/testtask'
22
+
22
23
  Rake::TestTask.new(:test) do |test|
23
24
  test.libs << 'lib' << 'test'
24
25
  test.pattern = 'test/**/test_*.rb'
25
26
  test.verbose = true
26
27
  end
27
28
 
28
- task :test => :check_dependencies
29
-
30
- task :default => :test
31
-
32
- require 'rake/rdoctask'
33
- Rake::RDocTask.new do |rdoc|
34
- version = File.exist?('VERSION') ? File.read('VERSION') : ""
35
-
36
- rdoc.rdoc_dir = 'rdoc'
37
- rdoc.title = "redns #{version}"
38
- rdoc.rdoc_files.include('README*')
39
- rdoc.rdoc_files.include('lib/**/*.rb')
40
- end
29
+ task default: :test
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.17
1
+ 0.2.0
data/bin/redig CHANGED
@@ -4,12 +4,13 @@ $LOAD_PATH << File.expand_path(File.join('..','lib'), File.dirname(__FILE__))
4
4
 
5
5
  require 'optparse'
6
6
 
7
+ require 'eventmachine'
7
8
  require 'redns'
8
9
 
9
10
  # == Main ===================================================================
10
11
 
11
12
  options = {
12
- :query_type => :any,
13
+ query_type: :any,
13
14
  }
14
15
 
15
16
  op = OptionParser.new do |op|
@@ -30,20 +31,26 @@ queries = op.parse(*ARGV).select do |query|
30
31
  end
31
32
  end
32
33
 
33
- resolver = ReDNS::Resolver.new do |resolver|
34
- if (options[:nameservers])
35
- resolver.servers = options[:nameservers]
34
+ EventMachine.run do
35
+ resolver = ReDNS::Connection.instance do |c|
36
+ if (options[:nameservers])
37
+ c.nameservers = options[:nameservers]
38
+ end
39
+
40
+ c.timeout = 2
36
41
  end
37
- end
38
42
 
39
- queries.each do |query|
40
- results = resolver.simple_query(options[:query_type], query)
41
-
42
- if (results)
43
- results.each do |result|
44
- puts result.to_s
43
+ queries.each do |query|
44
+ resolver.resolve(query, options[:query_type]) do |results|
45
+ if (results)
46
+ results.each do |result|
47
+ puts result.to_s
48
+ end
49
+ else
50
+ puts "No results"
51
+ end
52
+
53
+ EventMachine.stop_event_loop
45
54
  end
46
- else
47
- puts "No results"
48
55
  end
49
56
  end
data/lib/redns.rb CHANGED
@@ -4,26 +4,26 @@ module ReDNS
4
4
  # RFC1035 Resource Record Type Constants
5
5
 
6
6
  RR_TYPE = {
7
- :a => 1,
8
- :ns => 2,
9
- :md => 3,
10
- :mf => 4,
11
- :cname => 5,
12
- :soa => 6,
13
- :mb => 7,
14
- :mg => 8,
15
- :mr => 9,
16
- :null => 10,
17
- :wks => 11,
18
- :ptr => 12,
19
- :hinfo => 13,
20
- :minfo => 14,
21
- :mx => 15,
22
- :txt => 16,
23
- :axfr => 252,
24
- :mailb => 253,
25
- :maila => 254,
26
- :any => 255
7
+ a: 1,
8
+ ns: 2,
9
+ md: 3,
10
+ mf: 4,
11
+ cname: 5,
12
+ soa: 6,
13
+ mb: 7,
14
+ mg: 8,
15
+ mr: 9,
16
+ null: 10,
17
+ wks: 11,
18
+ ptr: 12,
19
+ hinfo: 13,
20
+ minfo: 14,
21
+ mx: 15,
22
+ txt: 16,
23
+ axfr: 252,
24
+ mailb: 253,
25
+ maila: 254,
26
+ any: 255
27
27
  }.freeze
28
28
 
29
29
  RR_TYPE_LABEL = RR_TYPE.invert.freeze
@@ -34,28 +34,28 @@ module ReDNS
34
34
  # context. This library is entirely IN(internet)-bound.
35
35
 
36
36
  RR_CLASS = {
37
- :in => 1
37
+ in: 1
38
38
  }.freeze
39
39
 
40
40
  RR_CLASS_LABEL = RR_CLASS.invert.freeze
41
41
 
42
42
  OPCODE = {
43
- :query => 0,
44
- :iquery => 1,
45
- :status => 2,
46
- :unknown => 15
43
+ query: 0,
44
+ iquery: 1,
45
+ status: 2,
46
+ unknown: 15
47
47
  }.freeze
48
48
 
49
49
  OPCODE_LABEL = OPCODE.invert.freeze
50
50
 
51
51
  RCODE = {
52
- :noerror => 0,
53
- :format_error => 1,
54
- :server_failure => 2,
55
- :name_error => 3,
56
- :not_implemented => 4,
57
- :refused => 5,
58
- :unknown => 15
52
+ noerror: 0,
53
+ format_error: 1,
54
+ server_failure: 2,
55
+ name_error: 3,
56
+ not_implemented: 4,
57
+ refused: 5,
58
+ unknown: 15
59
59
  }.freeze
60
60
 
61
61
  RCODE_LABEL = RCODE.invert.freeze
data/lib/redns/address.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  class ReDNS::Address < ReDNS::Fragment
2
2
  # == Attributes ===========================================================
3
3
 
4
- attribute :address, :default => '0.0.0.0'
4
+ attribute :address, default: '0.0.0.0'
5
5
 
6
6
  # == Class Methods ========================================================
7
7
 
@@ -14,7 +14,7 @@ class ReDNS::Address < ReDNS::Fragment
14
14
  # method, not intercepted and treated as an actual String
15
15
  super(contents)
16
16
  when String
17
- super(:address => contents)
17
+ super(address: contents)
18
18
  else
19
19
  super(contents)
20
20
  end
@@ -24,21 +24,21 @@ class ReDNS::Address < ReDNS::Fragment
24
24
  self.address == '0.0.0.0'
25
25
  end
26
26
 
27
- def to_s
28
- self.address
29
- end
30
-
31
- def to_a
32
- [ to_s ]
33
- end
34
-
35
- def serialize(buffer = ReDNS::Buffer.new)
36
- buffer.append(inet_aton(self.address))
37
- buffer
38
- end
39
-
40
- def deserialize(buffer)
41
- self.address = inet_ntoa(buffer)
42
- self
43
- end
27
+ def to_s
28
+ self.address
29
+ end
30
+
31
+ def to_a
32
+ [ to_s ]
33
+ end
34
+
35
+ def serialize(buffer = ReDNS::Buffer.new)
36
+ buffer.append(inet_aton(self.address))
37
+ buffer
38
+ end
39
+
40
+ def deserialize(buffer)
41
+ self.address = inet_ntoa(buffer).encode('UTF-8')
42
+ self
43
+ end
44
44
  end
@@ -3,13 +3,13 @@ require 'socket'
3
3
  class ReDNS::Connection < EventMachine::Connection
4
4
  # == Constants ============================================================
5
5
 
6
- DEFAULT_TIMEOUT = 5
7
- DEFAULT_ATTEMPTS = 2
6
+ TIMEOUT_DEFAULT = 5.0
7
+ ATTEMPTS_DEFAULT = 5
8
8
  SEQUENCE_LIMIT = 0x10000
9
9
 
10
10
  # == Properties ===========================================================
11
11
 
12
- attr_accessor :timeout, :attempts
12
+ attr_reader :timeout, :attempts
13
13
 
14
14
  # == Extensions ===========================================================
15
15
 
@@ -37,14 +37,14 @@ class ReDNS::Connection < EventMachine::Connection
37
37
  # If the supplied value is zero or nil, will revert to the default.
38
38
  def timeout=(value)
39
39
  @timeout = value.to_i
40
- @timeout = DEFAULT_TIMEOUT if (@timeout == 0)
40
+ @timeout = TIMEOUT_DEFAULT if (@timeout == 0)
41
41
  end
42
42
 
43
43
  # Sets the current retry attempts parameter to the supplied value.
44
44
  # If the supplied value is zero or nil, will revert to the default.
45
45
  def attempts=(value)
46
46
  @attempts = value.to_i
47
- @attempts = DEFAULT_ATTEMPTS if (@attempts == 0)
47
+ @attempts = ATTEMPTS_DEFAULT if (@attempts == 0)
48
48
  end
49
49
 
50
50
  # Returns the configured list of nameservers as an Array. If not configured
@@ -62,7 +62,7 @@ class ReDNS::Connection < EventMachine::Connection
62
62
  @nameservers = nil if (list.empty?)
63
63
  end
64
64
 
65
- # Picks a random nameserver from the configured list=
65
+ # Picks a random nameserver from the configured list.
66
66
  def random_nameserver
67
67
  nameservers[rand(nameservers.length)]
68
68
  end
@@ -93,13 +93,13 @@ class ReDNS::Connection < EventMachine::Connection
93
93
 
94
94
  if (result > 0)
95
95
  @callback[@sequence] = {
96
- :serialized_message => serialized_message,
97
- :type => type,
98
- :filter_by_type => (type == :any || !filter) ? false : type,
99
- :nameserver => target_nameserver,
100
- :attempts => self.attempts - 1,
101
- :callback => callback,
102
- :at => Time.now
96
+ serialized_message: serialized_message,
97
+ type: type,
98
+ filter_by_type: (type == :any || !filter) ? false : type,
99
+ nameserver: target_nameserver,
100
+ attempts: self.attempts - 1,
101
+ callback: callback,
102
+ at: Time.now
103
103
  }
104
104
  else
105
105
  callback.call(nil)
@@ -118,8 +118,8 @@ class ReDNS::Connection < EventMachine::Connection
118
118
  # Callback tracking is done by matching response IDs in a lookup table
119
119
  @callback = { }
120
120
 
121
- @timeout ||= DEFAULT_TIMEOUT
122
- @attempts ||= DEFAULT_ATTEMPTS
121
+ @timeout ||= TIMEOUT_DEFAULT
122
+ @attempts ||= ATTEMPTS_DEFAULT
123
123
 
124
124
  EventMachine.add_periodic_timer(1) do
125
125
  check_for_timeouts!
@@ -155,7 +155,7 @@ protected
155
155
  # Checks all pending queries for timeouts and triggers callbacks or retries
156
156
  # if necessary.
157
157
  def check_for_timeouts!
158
- timeout_at = Time.now - (@timeout || DEFAULT_TIMEOUT)
158
+ timeout_at = Time.now - (@timeout || TIMEOUT_DEFAULT)
159
159
 
160
160
  @callback.keys.each do |k|
161
161
  if (params = @callback[k])
@@ -76,10 +76,10 @@ class ReDNS::Fragment
76
76
 
77
77
  # == Instance Methods =====================================================
78
78
 
79
- def initialize(contents = nil)
80
- @attributes = { }
79
+ def initialize(contents = nil)
80
+ @attributes = { }
81
81
 
82
- case (contents)
82
+ case (contents)
83
83
  when Hash
84
84
  assign(contents)
85
85
  when ReDNS::Buffer
@@ -94,8 +94,8 @@ class ReDNS::Fragment
94
94
  end
95
95
 
96
96
  yield(self) if (block_given?)
97
- end
98
-
97
+ end
98
+
99
99
  protected
100
100
  def assign(attributes)
101
101
  attributes.each do |k, v|
data/lib/redns/message.rb CHANGED
@@ -5,26 +5,26 @@ class ReDNS::Message < ReDNS::Fragment
5
5
 
6
6
  # == Attributes ===========================================================
7
7
 
8
- attribute :random_id, :default => lambda { rand(0x10000) }
8
+ attribute :random_id, default: lambda { rand(0x10000) }
9
9
 
10
- attribute :id, :convert => lambda { |v| v.to_i % 0x10000 }, :default => 1
11
- attribute :query, :boolean => true, :default => true
12
- attribute :opcode, :default => :query
13
- attribute :authorative, :boolean => true, :default => false
14
- attribute :truncated, :boolean => true, :default => false
15
- attribute :recursion_desired, :boolean => true, :default => true
16
- attribute :recursion_available, :boolean => true, :default => false
17
- attribute :response_code, :default => :noerror
18
-
19
- attribute :questions_count, :convert => :to_i, :default => 0
20
- attribute :answers_count, :convert => :to_i, :default => 0
21
- attribute :nameservers_count, :convert => :to_i, :default => 0
22
- attribute :additional_records_count, :convert => :to_i, :default => 0
23
-
24
- attribute :questions, :default => lambda { [ ] }
25
- attribute :answers, :default => lambda { [ ] }
26
- attribute :nameservers, :default => lambda { [ ] }
27
- attribute :additional_records, :default => lambda { [ ] }
10
+ attribute :id, convert: lambda { |v| v.to_i % 0x10000 }, default: 1
11
+ attribute :query, boolean: true, default: true
12
+ attribute :opcode, default: :query
13
+ attribute :authorative, boolean: true, default: false
14
+ attribute :truncated, boolean: true, default: false
15
+ attribute :recursion_desired, boolean: true, default: true
16
+ attribute :recursion_available, boolean: true, default: false
17
+ attribute :response_code, default: :noerror
18
+
19
+ attribute :questions_count, convert: :to_i, default: 0
20
+ attribute :answers_count, convert: :to_i, default: 0
21
+ attribute :nameservers_count, convert: :to_i, default: 0
22
+ attribute :additional_records_count, convert: :to_i, default: 0
23
+
24
+ attribute :questions, default: lambda { [ ] }
25
+ attribute :answers, default: lambda { [ ] }
26
+ attribute :nameservers, default: lambda { [ ] }
27
+ attribute :additional_records, default: lambda { [ ] }
28
28
 
29
29
  # == Class Methods ========================================================
30
30
 
@@ -42,10 +42,10 @@ class ReDNS::Message < ReDNS::Fragment
42
42
  end
43
43
 
44
44
  message = new(
45
- :questions => [
45
+ questions: [
46
46
  ReDNS::Question.new(
47
- :name => name,
48
- :qtype => qtype
47
+ name: name,
48
+ qtype: qtype
49
49
  )
50
50
  ]
51
51
  )
@@ -57,78 +57,78 @@ class ReDNS::Message < ReDNS::Fragment
57
57
 
58
58
  # == Instance Methods =====================================================
59
59
 
60
- def increment_id!
61
- self.id = (self.id + 1) % 0x10000
62
- end
60
+ def increment_id!
61
+ self.id = (self.id + 1) % 0x10000
62
+ end
63
63
 
64
64
  # Returns true if this is a response type message, false otherwise, as is
65
65
  # the case with query messages.
66
- def response?
67
- !self.query?
68
- end
69
-
70
- # Returns a string representation of the message in a format similar to what
71
- # the dig shell utility produces.
72
- def to_s
73
- flags = [ ]
74
- flags << 'qr' if (response?)
75
- flags << 'aa' if (authorative?)
76
- flags << 'tc' if (truncated?)
77
- flags << 'rd' if (recursion_desired?)
78
- flags << 'ra' if (recursion_available?)
79
-
80
- ";; HEADER:\n;; opcode: #{opcode.to_s.upcase} status: #{response_code.to_s.upcase} id: #{id} \n" +
81
- ";; flags: #{flags.join(' ')}; QUERY: #{questions.length}, ANSWER: #{answers.length}, AUTHORITY: #{nameservers.length}, ADDITIONAL: #{additional_records.length}" +
82
- "\n" +
83
- ";; QUESTION SECTION:\n" +
84
- questions.collect(&:to_s).join("\n") + "\n" +
85
- ";; ANSWER SECTION:\n" +
86
- answers.collect(&:to_s).join("\n") + "\n" +
87
- ";; NAMESERVER SECTION:\n" +
88
- nameservers.collect(&:to_s).join("\n") + "\n" +
89
- ";; ADDITIONAL SECTION:\n" +
90
- additional_records.collect(&:to_s).join("\n") + "\n"
91
- end
92
-
93
- # Returns the length of the encoded DNS request.
94
- def length
95
- to_dns.length
96
- end
97
-
98
- # Returns true if the questions, answers, nameservers and additional records
99
- # are all empty, false otherwise.
100
- def empty?
101
- questions.empty? and
102
- answers.empty? and
103
- nameservers.empty? and
104
- additional_records.empty?
105
- end
106
-
107
- # Returns a YAML serialized version of the message.
108
- def to_yaml
109
- @attributes.to_yaml
110
- end
66
+ def response?
67
+ !self.query?
68
+ end
69
+
70
+ # Returns a string representation of the message in a format similar to what
71
+ # the dig shell utility produces.
72
+ def to_s
73
+ flags = [ ]
74
+ flags << 'qr' if (response?)
75
+ flags << 'aa' if (authorative?)
76
+ flags << 'tc' if (truncated?)
77
+ flags << 'rd' if (recursion_desired?)
78
+ flags << 'ra' if (recursion_available?)
79
+
80
+ ";; HEADER:\n;; opcode: #{opcode.to_s.upcase} status: #{response_code.to_s.upcase} id: #{id} \n" +
81
+ ";; flags: #{flags.join(' ')}; QUERY: #{questions.length}, ANSWER: #{answers.length}, AUTHORITY: #{nameservers.length}, ADDITIONAL: #{additional_records.length}" +
82
+ "\n" +
83
+ ";; QUESTION SECTION:\n" +
84
+ questions.collect(&:to_s).join("\n") + "\n" +
85
+ ";; ANSWER SECTION:\n" +
86
+ answers.collect(&:to_s).join("\n") + "\n" +
87
+ ";; NAMESERVER SECTION:\n" +
88
+ nameservers.collect(&:to_s).join("\n") + "\n" +
89
+ ";; ADDITIONAL SECTION:\n" +
90
+ additional_records.collect(&:to_s).join("\n") + "\n"
91
+ end
92
+
93
+ # Returns the length of the encoded DNS request.
94
+ def length
95
+ to_dns.length
96
+ end
97
+
98
+ # Returns true if the questions, answers, nameservers and additional records
99
+ # are all empty, false otherwise.
100
+ def empty?
101
+ questions.empty? and
102
+ answers.empty? and
103
+ nameservers.empty? and
104
+ additional_records.empty?
105
+ end
106
+
107
+ # Returns a YAML serialized version of the message.
108
+ def to_yaml
109
+ @attributes.to_yaml
110
+ end
111
111
 
112
112
  # Serializes the message into a supplied buffer, or allocates a new one to
113
113
  # store it. Returns the buffer used.
114
- def serialize(buffer = ReDNS::Buffer.new)
115
- buffer.pack(
116
- 'nnnnnn',
117
- self.id,
118
- (
119
- (self.query? ? 0 : 0x8000) |
120
- (ReDNS::OPCODE[self.opcode] || ReDNS::OPCODE[:unknown]) << 12 |
121
- (self.authorative? ? 0x0400 : 0) |
122
- (self.truncated? ? 0x0200 : 0) |
123
- (self.recursion_desired? ? 0x0100 : 0) |
124
- (self.recursion_available? ? 0x0080 : 0) |
125
- (ReDNS::RCODE[self.response_code] || ReDNS::RCODE[:noerror])
126
- ),
127
- self.questions.length,
128
- self.answers.length,
129
- self.nameservers.length,
130
- self.additional_records.length
131
- )
114
+ def serialize(buffer = ReDNS::Buffer.new)
115
+ buffer.pack(
116
+ 'nnnnnn',
117
+ self.id,
118
+ (
119
+ (self.query? ? 0 : 0x8000) |
120
+ (ReDNS::OPCODE[self.opcode] || ReDNS::OPCODE[:unknown]) << 12 |
121
+ (self.authorative? ? 0x0400 : 0) |
122
+ (self.truncated? ? 0x0200 : 0) |
123
+ (self.recursion_desired? ? 0x0100 : 0) |
124
+ (self.recursion_available? ? 0x0080 : 0) |
125
+ (ReDNS::RCODE[self.response_code] || ReDNS::RCODE[:noerror])
126
+ ),
127
+ self.questions.length,
128
+ self.answers.length,
129
+ self.nameservers.length,
130
+ self.additional_records.length
131
+ )
132
132
 
133
133
  [ :questions, :answers, :nameservers, :additional_records ].each do |section|
134
134
  @attributes[section] and @attributes[section].each do |part|
@@ -137,50 +137,50 @@ class ReDNS::Message < ReDNS::Fragment
137
137
  end
138
138
 
139
139
  buffer
140
- end
140
+ end
141
141
 
142
142
  # Extracts a message from the supplied buffer. Will return the message if
143
143
  # successful, nil if an error occurred or no suitable data cound be found
144
144
  # in the buffer.
145
- def deserialize(buffer)
146
- return unless (buffer)
147
-
148
- data = buffer.unpack("nnnnnn")
149
-
150
- # Abandon efforts to decode if insufficient data is available.
151
- return if (data.length < 6)
152
-
153
- self.id = data.shift
145
+ def deserialize(buffer)
146
+ return unless (buffer)
147
+
148
+ data = buffer.unpack("nnnnnn")
149
+
150
+ # Abandon efforts to decode if insufficient data is available.
151
+ return if (data.length < 6)
152
+
153
+ self.id = data.shift
154
154
 
155
- flags = data.shift
156
- self.query = (flags & 0x8000 == 0)
157
- self.opcode = ReDNS::OPCODE_LABEL[(flags & 0x7800) >> 12]
158
- self.authorative = (flags & 0x0400 != 0)
159
- self.truncated = (flags & 0x0200 != 0)
160
- self.recursion_desired = (flags & 0x0100 != 0)
161
- self.recursion_available = (flags & 0x0080 != 0)
162
- self.response_code = ReDNS::RCODE_LABEL[flags & 0x000F]
163
-
164
- SECTIONS.each do |section|
165
- @attributes[:"#{section}_count"] = data.shift
166
- end
167
-
168
- SECTIONS.each do |section|
169
- collection = @attributes[section] = [ ]
170
-
171
- decode_class =
172
- case (section)
173
- when :questions
174
- ReDNS::Question
175
- else
176
- ReDNS::Resource
155
+ flags = data.shift
156
+ self.query = (flags & 0x8000 == 0)
157
+ self.opcode = ReDNS::OPCODE_LABEL[(flags & 0x7800) >> 12]
158
+ self.authorative = (flags & 0x0400 != 0)
159
+ self.truncated = (flags & 0x0200 != 0)
160
+ self.recursion_desired = (flags & 0x0100 != 0)
161
+ self.recursion_available = (flags & 0x0080 != 0)
162
+ self.response_code = ReDNS::RCODE_LABEL[flags & 0x000F]
163
+
164
+ SECTIONS.each do |section|
165
+ @attributes[:"#{section}_count"] = data.shift
166
+ end
167
+
168
+ SECTIONS.each do |section|
169
+ collection = @attributes[section] = [ ]
170
+
171
+ decode_class =
172
+ case (section)
173
+ when :questions
174
+ ReDNS::Question
175
+ else
176
+ ReDNS::Resource
177
177
  end
178
178
 
179
- @attributes[:"#{section}_count"].times do
180
- collection << decode_class.new(buffer)
181
- end
182
- end
183
-
184
- self
185
- end
179
+ @attributes[:"#{section}_count"].times do
180
+ collection << decode_class.new(buffer)
181
+ end
182
+ end
183
+
184
+ self
185
+ end
186
186
  end