net-dns 0.6.1 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (53) hide show
  1. data/.gitignore +8 -6
  2. data/.travis.yml +14 -0
  3. data/CHANGELOG.md +79 -0
  4. data/Gemfile +4 -0
  5. data/Rakefile +56 -66
  6. data/demo/check_soa.rb +1 -1
  7. data/demo/threads.rb +1 -1
  8. data/lib/net/dns.rb +24 -22
  9. data/lib/net/dns/header.rb +77 -103
  10. data/lib/net/dns/{names/names.rb → names.rb} +19 -20
  11. data/lib/net/dns/packet.rb +231 -256
  12. data/lib/net/dns/question.rb +11 -40
  13. data/lib/net/dns/resolver.rb +248 -250
  14. data/lib/net/dns/resolver/socks.rb +6 -6
  15. data/lib/net/dns/resolver/timeouts.rb +1 -1
  16. data/lib/net/dns/rr.rb +112 -117
  17. data/lib/net/dns/rr/a.rb +98 -89
  18. data/lib/net/dns/rr/aaaa.rb +84 -68
  19. data/lib/net/dns/rr/classes.rb +91 -106
  20. data/lib/net/dns/rr/cname.rb +64 -45
  21. data/lib/net/dns/rr/hinfo.rb +90 -50
  22. data/lib/net/dns/rr/mr.rb +61 -44
  23. data/lib/net/dns/rr/mx.rb +73 -48
  24. data/lib/net/dns/rr/ns.rb +60 -46
  25. data/lib/net/dns/rr/null.rb +11 -12
  26. data/lib/net/dns/rr/ptr.rb +47 -34
  27. data/lib/net/dns/rr/soa.rb +5 -6
  28. data/lib/net/dns/rr/srv.rb +1 -4
  29. data/lib/net/dns/rr/txt.rb +14 -14
  30. data/lib/net/dns/rr/types.rb +13 -13
  31. data/lib/net/dns/version.rb +8 -14
  32. data/net-dns.gemspec +35 -0
  33. data/setup.rb +3 -2
  34. data/test/header_test.rb +18 -18
  35. data/test/names_test.rb +21 -0
  36. data/test/packet_test.rb +38 -31
  37. data/test/question_test.rb +23 -24
  38. data/test/resolver/timeouts_test.rb +13 -13
  39. data/test/resolver_test.rb +28 -20
  40. data/test/rr/a_test.rb +70 -23
  41. data/test/rr/aaaa_test.rb +109 -0
  42. data/test/rr/classes_test.rb +61 -49
  43. data/test/rr/cname_test.rb +97 -0
  44. data/test/rr/hinfo_test.rb +117 -0
  45. data/test/rr/mr_test.rb +105 -0
  46. data/test/rr/mx_test.rb +112 -0
  47. data/test/rr/ns_test.rb +34 -12
  48. data/test/rr/types_test.rb +4 -4
  49. data/test/rr_test.rb +1 -1
  50. metadata +77 -52
  51. data/AUTHORS.rdoc +0 -7
  52. data/CHANGELOG.rdoc +0 -46
  53. data/VERSION.yml +0 -5
data/.gitignore CHANGED
@@ -1,6 +1,8 @@
1
- .DS_Store
2
- nbproject
3
- .idea
4
- pkg
5
- doc
6
- coverage
1
+ # Bundler
2
+ .bundle
3
+ pkg/*
4
+ Gemfile.lock
5
+
6
+ # YARD artifacts
7
+ .yardoc
8
+ yardoc/
@@ -0,0 +1,14 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.8.7
4
+ - 1.9.2
5
+ - 1.9.3
6
+ # - jruby-18mode
7
+ # - jruby-19mode
8
+ - rbx-18mode
9
+ # - ruby-head
10
+ # - jruby-head
11
+ - ree
12
+ notifications:
13
+ recipients:
14
+ - weppos@weppos.net
@@ -0,0 +1,79 @@
1
+ # Changelog
2
+
3
+
4
+ ## Release 0.7.0
5
+
6
+ * ADDED: Added (experimental) Support for HINFO record.
7
+
8
+ * FIXED: Use Net::DNS::Resolver::Error class (not ResolverError, which does not exist).
9
+
10
+ * FIXED: Cleaned up require dependency and recursive require statements.
11
+
12
+ * FIXED: Use RbConfig instead of obsolete and deprecated Config (GH-28, GH-33) [Thanks @shadowbq, @eik3]
13
+
14
+ * FIXED: SRV record not required by Net::DNS::RR (GH-27) [Thanks @sebastian]
15
+
16
+ * FIXED: Resolver now supports IPv6 (GH-32) [Thanks @jamesotron]
17
+
18
+ * FIXED: Net::DNS::RR::PTR references an invalid parameter (GH-19) [Thanks @dd23]
19
+
20
+ * FIXED: Net::DNS::Question changes input arguments (GH-7) [Thanks @gfarfl]
21
+
22
+ * CHANGED: Refactoring unit test to follow most used Ruby conventions.
23
+
24
+ * CHANGED: Rewritten and simplified Net::DNS::Classes. Improved test harness.
25
+
26
+ * CHANGED: Removed Jeweler development dependency.
27
+
28
+ * CHANGED: The library is now compatible with Bundler.
29
+
30
+ * CHANGED: Minimum supported Ruby version changed to Ruby 1.8.7.
31
+
32
+ * CHANGED: Rescue NameError so unsupported record types only result in a warning.
33
+
34
+ * CHANGED: Renamed Net::DNS::Resolver#send to Net::DNS::Resolver#query to avoid overriding default meaning of send method.
35
+
36
+
37
+ ## Release 0.6.1
38
+
39
+ * ADDED: Net::DNS::Packet#to_s method (alias of #inspect)
40
+
41
+ * FIXED: typo in lib/net/dns/rr/ptr.rb [Thanks Chris Lundquist]
42
+
43
+ * FIXED: warning: method redefined; discarding old inspect (GH-3) [Thanks Kevin Baker]
44
+
45
+ * FIXED: issue with rescue ArgumentError (GH-5) and with IPAddr handling (GH-6)
46
+
47
+
48
+ ## Release 0.6.0
49
+
50
+ *WARNING:* If you are upgrading from a previous minor release, check out the Compatibility issue list below.
51
+
52
+ * FIXED: Added missing #to_s method to Net::DNS::Question.
53
+
54
+ * FIXED: Compatibility with Ruby 1.9
55
+
56
+ * FIXED: Types regexp order issue
57
+
58
+ * CHANGED: Refactoring unit test to follow most used Ruby conventions
59
+
60
+ * CHANGED: default timeout is now 5 seconds for both UDP and TCP
61
+
62
+ * CHANGED: Moved main dns.rb file to lib/net folder as default for GEMs. In this way it can be autoloaded when the gem is required.
63
+
64
+ ### Compatibility issues
65
+
66
+ * CHANGED: RR#set_stype scope is now private to prevent invalid usage.
67
+
68
+ * CHANGED: DnsTimeout#timeout now raises LocalJumpError instead of DnsTimeoutArgumentError when block is missing.
69
+
70
+ * CHANGED: Renamed Net::DNS::RR::Types::Types to Net::DNS::RR::Types::TYPES to follow Ruby coding standards.
71
+
72
+
73
+ ## Release 0.4
74
+
75
+ * many bug fixes (thanks guys!)
76
+ * a whole new class Net::DNS::Header::RCode
77
+ * new methods in Net::DNS::Resolver class to do AXFR queries
78
+ * a new SRV resource record written by Dan Janowski
79
+ * more documentation written and corrected
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in whois.gemspec
4
+ gemspec
data/Rakefile CHANGED
@@ -1,80 +1,70 @@
1
1
  require 'rubygems'
2
- require 'rake'
3
- require 'rake/clean'
4
-
5
- begin
6
- require 'jeweler'
7
- Jeweler::Tasks.new do |gemspec|
8
- gemspec.name = "net-dns"
9
- gemspec.summary = "Pure Ruby DNS library"
10
- gemspec.description = "Net::DNS is a pure Ruby DNS library, with a clean OO interface and an extensible API"
11
- gemspec.authors = ["Marco Ceresa", "Simone Carletti"]
12
- gemspec.email = ["ceresa@gmail.com", "weppos@weppos.net"]
13
- gemspec.homepage = "http://github.com/bluemonk/net-dns"
14
- gemspec.extra_rdoc_files = ["README.rdoc", "CHANGELOG.rdoc", "AUTHORS.rdoc", "THANKS.rdoc"]
15
- gemspec.rubyforge_project = "net-dns"
16
-
17
- gemspec.add_development_dependency "rcov"
18
- end
19
- Jeweler::GemcutterTasks.new
20
- rescue LoadError
21
- puts "Jeweler not available."
2
+ require 'bundler'
3
+
4
+ $:.unshift(File.dirname(__FILE__) + "/lib")
5
+ require 'net/dns'
6
+
7
+
8
+ # Common package properties
9
+ PKG_NAME = ENV['PKG_NAME'] || 'net-dns'
10
+ PKG_VERSION = ENV['PKG_VERSION'] || Net::DNS::VERSION
11
+
12
+
13
+ # Run test by default.
14
+ task :default => :test
15
+
16
+
17
+ spec = Gem::Specification.new do |s|
18
+ s.name = PKG_NAME
19
+ s.version = PKG_VERSION
20
+ s.summary = "Pure Ruby DNS library."
21
+ s.description = "Net::DNS is a pure Ruby DNS library, with a clean OO interface and an extensible API."
22
+
23
+ s.required_ruby_version = ">= 1.8.7"
24
+
25
+ s.authors = ["Marco Ceresa", "Simone Carletti"]
26
+ s.email = ["ceresa@gmail.com", "weppos@weppos.net"]
27
+ s.homepage = "http://github.com/bluemonk/net-dns"
28
+ s.rubyforge_project = "net-dns"
29
+
30
+ s.add_development_dependency "rake", "~> 0.9"
31
+ s.add_development_dependency "yard"
32
+
33
+ s.files = `git ls-files`.split("\n")
34
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
35
+ s.require_paths = %w( lib )
22
36
  end
23
37
 
24
- require 'rake/testtask'
25
- Rake::TestTask.new(:test) do |test|
26
- test.libs << 'test'
27
- test.pattern = 'test/**/*_test.rb'
28
- test.verbose = true
38
+
39
+ require 'rubygems/package_task'
40
+
41
+ Gem::PackageTask.new(spec) do |pkg|
42
+ pkg.gem_spec = spec
29
43
  end
30
44
 
31
- begin
32
- require 'rcov/rcovtask'
33
- Rcov::RcovTask.new(:rcov) do |test|
34
- test.libs << 'test'
35
- test.pattern = 'test/**/*_test.rb'
36
- test.verbose = true
37
- end
38
- rescue LoadError
39
- task :rcov => :check_dependencies
45
+ desc "Build the gemspec file #{spec.name}.gemspec"
46
+ task :gemspec do
47
+ file = File.dirname(__FILE__) + "/#{spec.name}.gemspec"
48
+ File.open(file, "w") {|f| f << spec.to_ruby }
40
49
  end
41
50
 
42
- task :default => :test
43
51
 
44
- require 'rake/rdoctask'
45
- Rake::RDocTask.new do |rdoc|
46
- if File.exist?('VERSION.yml')
47
- config = YAML.load(File.read('VERSION.yml'))
48
- version = "#{config[:major]}.#{config[:minor]}.#{config[:patch]}"
49
- else
50
- puts "VERSION.yml not found!"
51
- version = ""
52
- end
53
-
54
- rdoc.rdoc_dir = 'rdoc'
55
- rdoc.title = "net-dns #{version}"
56
- rdoc.rdoc_files.include('*.rdoc')
57
- rdoc.rdoc_files.include('lib/**/*.rb')
58
- end
52
+ require 'rake/testtask'
59
53
 
60
- desc "Look for TODO and FIXME tags in the code"
61
- task :todo do
62
- def egrep(pattern)
63
- Dir['**/*.rb'].each do |fn|
64
- count = 0
65
- open(fn) do |f|
66
- while line = f.gets
67
- count += 1
68
- if line =~ pattern
69
- puts "#{fn}:#{count}:#{line}"
70
- end
71
- end
72
- end
73
- end
74
- end
75
- egrep /(FIXME|TODO|TBD)/
54
+ # Run all the tests in the /test folder
55
+ Rake::TestTask.new do |t|
56
+ t.libs << "test"
57
+ t.test_files = FileList["test/**/*_test.rb"]
58
+ t.verbose = true
76
59
  end
77
60
 
61
+
62
+ require 'yard'
63
+ require 'yard/rake/yardoc_task'
64
+
65
+ YARD::Rake::YardocTask.new(:yardoc)
66
+
67
+
78
68
  desc "Open an irb session preloaded with this library"
79
69
  task :console do
80
70
  sh "irb -rubygems -I lib -r net/dns.rb"
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  require 'rubygems' if "#{RUBY_VERSION}" < "1.9.0"
4
- require 'net/dns/resolver'
4
+ require 'net/dns'
5
5
 
6
6
 
7
7
  #------------------------------------------------------------------------------
@@ -1,5 +1,5 @@
1
1
  require 'rubygems' if "#{RUBY_VERSION}" < "1.9.0"
2
- require 'net/dns/resolver'
2
+ require 'net/dns'
3
3
 
4
4
  a = ["ibm.com", "sun.com", "redhat.com"]
5
5
 
@@ -1,30 +1,31 @@
1
1
  require 'net/dns/core_ext'
2
2
  require 'net/dns/version'
3
+ require 'net/dns/resolver'
3
4
 
4
- module Net # :nodoc:
5
+ module Net
5
6
  module DNS
6
-
7
+
7
8
  # Packet size in bytes
8
- PACKETSZ = 512
9
-
10
- # Size of the header
11
- HFIXEDSZ = 12
12
-
9
+ PACKETSZ = 512
10
+
11
+ # Size of the header
12
+ HFIXEDSZ = 12
13
+
13
14
  # Size of the question portion (type and class)
14
- QFIXEDSZ = 4
15
-
15
+ QFIXEDSZ = 4
16
+
16
17
  # Size of an RR portion (type,class,lenght and ttl)
17
18
  RRFIXEDSZ = 10
18
-
19
+
19
20
  # Size of an int 32 bit
20
- INT32SZ = 4
21
-
21
+ INT32SZ = 4
22
+
22
23
  # Size of a short int
23
- INT16SZ = 2
24
+ INT16SZ = 2
24
25
 
25
26
 
26
27
  module QueryTypes
27
-
28
+
28
29
  SIGZERO = 0
29
30
  A = 1
30
31
  NS = 2
@@ -83,28 +84,29 @@ module Net # :nodoc:
83
84
  ANY = 255
84
85
 
85
86
  end
86
-
87
+
87
88
  module QueryClasses
88
-
89
+
89
90
  # Internet class
90
91
  IN = 1
91
-
92
+
92
93
  # Chaos class
93
94
  CH = 3
94
-
95
+
95
96
  # Hesiod class
96
97
  HS = 4
97
-
98
+
98
99
  # None class
99
100
  NONE = 254
100
-
101
+
101
102
  # Any class
102
103
  ANY = 255
103
-
104
+
104
105
  end
105
-
106
+
106
107
  include QueryTypes
107
108
  include QueryClasses
108
109
 
109
110
  end
111
+
110
112
  end
@@ -1,8 +1,5 @@
1
- require 'net/dns'
2
-
3
-
4
- module Net # :nodoc:
5
- module DNS
1
+ module Net
2
+ module DNS
6
3
 
7
4
  #
8
5
  # =Name
@@ -10,15 +7,15 @@ module Net # :nodoc:
10
7
  # Net::DNS::Header - DNS packet header class
11
8
  #
12
9
  # =Synopsis
13
- #
10
+ #
14
11
  # require 'net/dns/header'
15
12
  #
16
13
  # =Description
17
- #
18
- # The Net::DNS::Header class represents the header portion of a
14
+ #
15
+ # The Net::DNS::Header class represents the header portion of a
19
16
  # DNS packet. An Header object is created whenever a new packet
20
17
  # is parsed or as user request.
21
- #
18
+ #
22
19
  # header = Net::DNS::Header.new
23
20
  # # ;; id = 18123
24
21
  # # ;; qr = 0 opCode: 0 aa = 0 tc = 0 rd = 1
@@ -46,53 +43,30 @@ module Net # :nodoc:
46
43
  #
47
44
  # A lot of methods were written to keep a compatibility layer with
48
45
  # the Perl version of the library, as long as methods name which are
49
- # more or less the same.
50
- #
51
- # =Error classes
52
- #
53
- # Some error classes has been defined for the Net::DNS::Header class,
54
- # which are listed here to keep a light and browsable main documentation.
55
- # We have:
56
- #
57
- # ArgumentError:: Argument Error for class Net::DNS::Packet
58
- # WrongCountError:: A wrong +count+ parameter has been passed
59
- # WrongRecursiveError:: A wrong +recursive+ parameter has been passed
60
- # WrongOpcodeError:: A not valid +opCode+ has been specified
61
- # DuplicateIDError:: The requested ID is already in use
62
- #
63
- # =Copyright
64
- #
65
- # Copyright (c) 2006 Marco Ceresa
66
- #
67
- # All rights reserved. This program is free software; you may redistribute
68
- # it and/or modify it under the same terms as Ruby itself.
46
+ # more or less the same.
69
47
  #
70
48
  class Header
71
-
72
- # Argument Error for class Net::DNS::Header.
73
- class ArgumentError < ArgumentError
74
- end
75
-
76
- # A wrong +count+ parameter has been passed-
49
+
50
+ # A wrong +count+ parameter has been passed.
77
51
  class WrongCountError < ArgumentError
78
52
  end
79
-
80
- # A wrong +recursive+ parameter has been passed-
53
+
54
+ # A wrong +recursive+ parameter has been passed.
81
55
  class WrongRecursiveError < ArgumentError
82
56
  end
83
-
57
+
84
58
  # An invalid +opCode+ has been specified.
85
59
  class WrongOpcodeError < ArgumentError
86
60
  end
87
-
61
+
88
62
  # Base error class.
89
63
  class Error < StandardError
90
64
  end
91
-
65
+
92
66
  # The requested ID is already in use.
93
67
  class DuplicateIDError < Error
94
68
  end
95
-
69
+
96
70
 
97
71
  #
98
72
  # = Name
@@ -109,13 +83,13 @@ module Net # :nodoc:
109
83
  #
110
84
  # =Description
111
85
  #
112
- # The RCode class represents the RCode field in the Header portion of a
113
- # DNS packet. This field (called Response Code) is used to get informations
86
+ # The RCode class represents the RCode field in the Header portion of a
87
+ # DNS packet. This field (called Response Code) is used to get informations
114
88
  # about the status of a DNS operation, such as a query or an update. These
115
89
  # are the values in the original Mockapetris's standard (RFC1035):
116
90
  #
117
91
  # * 0 No error condition
118
- # * 1 Format error - The name server was unable to interpret
92
+ # * 1 Format error - The name server was unable to interpret
119
93
  # the query.
120
94
  # * 2 Server failure - The name server was
121
95
  # unable to process this query due to a
@@ -137,7 +111,7 @@ module Net # :nodoc:
137
111
  # transfer) for particular data.
138
112
  # * 6-15 Reserved for future use.
139
113
  #
140
- # In the next DNS RFCs, codes 6-15 has been assigned to the following
114
+ # In the next DNS RFCs, codes 6-15 has been assigned to the following
141
115
  # errors:
142
116
  #
143
117
  # * 6 YXDomain
@@ -149,7 +123,7 @@ module Net # :nodoc:
149
123
  # More RCodes has to come for TSIGs and other operations.
150
124
  #
151
125
  class RCode
152
-
126
+
153
127
  # Constant for +rcode+ Response Code No Error
154
128
  NOERROR = 0
155
129
  # Constant for +rcode+ Response Code Format Error
@@ -164,10 +138,10 @@ module Net # :nodoc:
164
138
  REFUSED = 5
165
139
 
166
140
 
167
-
168
- RCodeType = %w[NoError FormErr ServFail NXDomain NotImp
169
- Refused YXDomain YXRRSet NXRRSet NotAuth NotZone]
170
-
141
+
142
+ RCodeType = %w[NoError FormErr ServFail NXDomain NotImp
143
+ Refused YXDomain YXRRSet NXRRSet NotAuth NotZone]
144
+
171
145
  RCodeErrorString = ["No errors",
172
146
  "The name server was unable to interpret the query",
173
147
  "The name server was unable to process this query due to problem with the name server",
@@ -179,24 +153,24 @@ module Net # :nodoc:
179
153
  "",
180
154
  "",
181
155
  ""]
182
-
156
+
183
157
  attr_reader :code, :type, :explanation
184
158
 
185
159
  def initialize(code)
186
160
  if (0..10).include? code
187
161
  @code = code
188
162
  @type = RCodeType[code]
189
- @explanation = RCodeErrorString[code]
163
+ @explanation = RCodeErrorString[code]
190
164
  else
191
165
  raise ArgumentError, "RCode `#{code}' out of range"
192
166
  end
193
167
  end
194
-
168
+
195
169
  def to_s
196
170
  @code.to_s
197
171
  end
198
172
  end
199
-
173
+
200
174
  # Constant for +opCode+ query
201
175
  QUERY = 0
202
176
  # Constant for +opCode+ iquery
@@ -207,8 +181,8 @@ module Net # :nodoc:
207
181
  OPARR = %w[QUERY IQUERY STATUS]
208
182
 
209
183
  @@id_arr = []
210
-
211
- # Reader for +id+ attribute
184
+
185
+ # Reader for +id+ attribute
212
186
  attr_reader :id
213
187
  # Reader for the operational code
214
188
  attr_reader :opCode
@@ -222,10 +196,10 @@ module Net # :nodoc:
222
196
  attr_reader :nsCount
223
197
  # Reader for addictional section entries number
224
198
  attr_reader :arCount
225
-
199
+
226
200
  # Creates a new Net::DNS::Header object with the desired values,
227
201
  # which can be specified as an Hash argument. When called without
228
- # arguments, defaults are used. If a data string is passed, values
202
+ # arguments, defaults are used. If a data string is passed, values
229
203
  # are taken from parsing the string.
230
204
  #
231
205
  # Examples:
@@ -266,7 +240,7 @@ module Net # :nodoc:
266
240
  end
267
241
  end
268
242
 
269
- # Creates a new Net::DNS::Header object from binary data, which is
243
+ # Creates a new Net::DNS::Header object from binary data, which is
270
244
  # passed as a string object as argument.
271
245
  # The configurations parameters are taken from parsing the string.
272
246
  #
@@ -275,8 +249,8 @@ module Net # :nodoc:
275
249
  # # Create a new Net::DNS::Header object with binary data
276
250
  # header = Net::DNS::Header.new(data)
277
251
  #
278
- # header.auth?
279
- # #=> "true" if it comes from authoritative name server
252
+ # header.auth?
253
+ # #=> "true" if it comes from authoritative name server
280
254
  #
281
255
  def self.parse(arg)
282
256
  if arg.kind_of? String
@@ -287,9 +261,9 @@ module Net # :nodoc:
287
261
  raise ArgumentError, "Wrong argument class `#{arg.class}'"
288
262
  end
289
263
  end
290
-
264
+
291
265
  # Inspect method, prints out all the options and relative values.
292
- #
266
+ #
293
267
  # p Net::DNS::Header.new
294
268
  # # ;; id = 18123
295
269
  # # ;; qr = 0 opCode: 0 aa = 0 tc = 0 rd = 1
@@ -299,7 +273,7 @@ module Net # :nodoc:
299
273
  # This method will maybe be changed in the future to a more pretty
300
274
  # way of display output.
301
275
  #
302
- def inspect
276
+ def inspect
303
277
  ";; id = #@id\n" +
304
278
  if false # @opCode == "UPDATE"
305
279
  #do stuff
@@ -319,11 +293,11 @@ module Net # :nodoc:
319
293
  "arCount = #@arCount\n"
320
294
  end
321
295
  end
322
-
296
+
323
297
  # The Net::DNS::Header#format method prints out the header
324
- # in a special ascii representation of data, in a way
325
- # similar to those often found on RFCs.
326
- #
298
+ # in a special ascii representation of data, in a way
299
+ # similar to those often found on RFCs.
300
+ #
327
301
  # p Net::DNS::Header.new.format
328
302
  # # +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
329
303
  # # | 18123 |
@@ -341,7 +315,7 @@ module Net # :nodoc:
341
315
  #
342
316
  # This can be very usefull for didactical purpouses :)
343
317
  #
344
- def format
318
+ def format
345
319
  del = ("+-" * 16) + "+\n"
346
320
  len = del.length
347
321
  str = del + "|" + @id.to_s.center(len-3) + "|\n"
@@ -360,8 +334,8 @@ module Net # :nodoc:
360
334
  str += del + "|" + @arCount.to_s.center(len-3) + "|\n" + del
361
335
  str
362
336
  end
363
-
364
- # Returns the header data in binary format, appropriate
337
+
338
+ # Returns the header data in binary format, appropriate
365
339
  # for use in a DNS query packet.
366
340
  #
367
341
  # hdata = header.data
@@ -393,15 +367,15 @@ module Net # :nodoc:
393
367
  raise ArgumentError, "ID `#{val}' out of range"
394
368
  end
395
369
  end
396
-
370
+
397
371
  # Checks whether the header is a query (+qr+ bit set to 0)
398
372
  #
399
373
  def query?
400
374
  @qr == 0
401
375
  end
402
376
 
403
- # Set the +qr+ query response flag to be either +true+ or
404
- # +false+. You can also use the values 0 and 1. This flag
377
+ # Set the +qr+ query response flag to be either +true+ or
378
+ # +false+. You can also use the values 0 and 1. This flag
405
379
  # indicates if the DNS packet contains a query or an answer,
406
380
  # so it should be set to +true+ in DNS answer packets.
407
381
  # If +qr+ is +true+, the packet is a response.
@@ -419,7 +393,7 @@ module Net # :nodoc:
419
393
  end
420
394
  end
421
395
 
422
- # Checks whether the header is a response
396
+ # Checks whether the header is a response
423
397
  # (+qr+ bit set to 1)
424
398
  #
425
399
  def response?
@@ -436,15 +410,15 @@ module Net # :nodoc:
436
410
  end
437
411
 
438
412
  # Set the +opCode+ variable to a new value. This fields indicates
439
- # the type of the question present in the DNS packet; +val+ can be
440
- # one of the values QUERY, IQUERY or STATUS.
413
+ # the type of the question present in the DNS packet; +val+ can be
414
+ # one of the values QUERY, IQUERY or STATUS.
441
415
  #
442
416
  # * QUERY is the standard DNS query
443
417
  # * IQUERY is the inverse query
444
418
  # * STATUS is used to query the nameserver for its status
445
419
  #
446
420
  # Example:
447
- #
421
+ #
448
422
  # include Net::DNS
449
423
  # header = Header.new
450
424
  # header.opCode = Header::STATUS
@@ -470,10 +444,10 @@ module Net # :nodoc:
470
444
  end
471
445
 
472
446
  # Set the +aa+ flag (authoritative answer) to either +true+
473
- # or +false+. You can also use 0 or 1.
447
+ # or +false+. You can also use 0 or 1.
474
448
  #
475
449
  # This flag indicates whether a DNS answer packet contains
476
- # authoritative data, meaning that is was generated by a
450
+ # authoritative data, meaning that is was generated by a
477
451
  # nameserver authoritative for the domain of the question.
478
452
  #
479
453
  # Must only be set to +true+ in DNS answer packets.
@@ -490,7 +464,7 @@ module Net # :nodoc:
490
464
  raise ArgumentError, ":aa must be true(or 1) or false(or 0)"
491
465
  end
492
466
  end
493
-
467
+
494
468
  # Checks whether the packet was truncated
495
469
  #
496
470
  # # Sending packet using UDP
@@ -504,14 +478,14 @@ module Net # :nodoc:
504
478
  @tc == 1
505
479
  end
506
480
 
507
- # Set the +tc+ flag (truncated packet) to either +true+
481
+ # Set the +tc+ flag (truncated packet) to either +true+
508
482
  # ot +false+. You can also use 0 or 1.
509
483
  #
510
484
  # The truncated flag is used in response packets to indicate
511
- # that the amount of data to be trasmitted exceedes the
512
- # maximum allowed by the protocol in use, tipically UDP, and
513
- # that the data present in the packet has been truncated.
514
- # A different protocol (such has TCP) need to be used to
485
+ # that the amount of data to be trasmitted exceedes the
486
+ # maximum allowed by the protocol in use, tipically UDP, and
487
+ # that the data present in the packet has been truncated.
488
+ # A different protocol (such has TCP) need to be used to
515
489
  # retrieve full data.
516
490
  #
517
491
  # Must only be set in DNS answer packets.
@@ -528,7 +502,7 @@ module Net # :nodoc:
528
502
  raise ArgumentError, ":tc must be true(or 1) or false(or 0)"
529
503
  end
530
504
  end
531
-
505
+
532
506
  # Checks whether the packet has a recursion bit
533
507
  # set, meaning that recursion is desired
534
508
  #
@@ -567,7 +541,7 @@ module Net # :nodoc:
567
541
  def rd=(val)
568
542
  self.recursive = val
569
543
  end
570
-
544
+
571
545
  # Checks whether recursion is available.
572
546
  # This flag is usually set by nameservers to indicate
573
547
  # that they support recursive-type queries.
@@ -602,7 +576,7 @@ module Net # :nodoc:
602
576
  @cd == 0
603
577
  end
604
578
 
605
- # Set the +cd+ flag (checking disabled) to either +true+
579
+ # Set the +cd+ flag (checking disabled) to either +true+
606
580
  # ot +false+. You can also use 0 or 1.
607
581
  #
608
582
  def cd=(val)
@@ -626,11 +600,11 @@ module Net # :nodoc:
626
600
  @ad == 1
627
601
  end
628
602
 
629
- # Set the +ad+ flag to either +true+
603
+ # Set the +ad+ flag to either +true+
630
604
  # ot +false+. You can also use 0 or 1.
631
605
  #
632
- # The AD bit is only set on answers where signatures have
633
- # been cryptographically verified or the server is
606
+ # The AD bit is only set on answers where signatures have
607
+ # been cryptographically verified or the server is
634
608
  # authoritative for the data and is allowed to set the bit by policy.
635
609
  #
636
610
  def ad=(val)
@@ -645,7 +619,7 @@ module Net # :nodoc:
645
619
  raise ArgumentError, ":ad must be true(or 1) or false(or 0)"
646
620
  end
647
621
  end
648
-
622
+
649
623
  # Returns an error array for the header response code, or
650
624
  # +nil+ if no error is generated.
651
625
  #
@@ -667,14 +641,14 @@ module Net # :nodoc:
667
641
  def error?
668
642
  @rCode.code > 0
669
643
  end
670
-
671
- # Set the rCode value. This should only be done in DNS
644
+
645
+ # Set the rCode value. This should only be done in DNS
672
646
  # answer packets.
673
647
  #
674
648
  def rCode=(val)
675
649
  @rCode = RCode.new(val)
676
650
  end
677
-
651
+
678
652
  # Sets the number of entries in a question section
679
653
  #
680
654
  def qdCount=(val)
@@ -716,16 +690,16 @@ module Net # :nodoc:
716
690
  end
717
691
 
718
692
  private
719
-
693
+
720
694
  def new_from_scratch
721
695
  @id = genID # generate ad unique id
722
696
  @qr = @aa = @tc = @ra = @ad = @cd = 0
723
- @rCode = RCode.new(0) # no error
697
+ @rCode = RCode.new(0) # no error
724
698
  @anCount = @nsCount = @arCount = 0
725
699
  @rd = @qdCount = 1
726
- @opCode = QUERY # standard query, default message
700
+ @opCode = QUERY # standard query, default message
727
701
  end
728
-
702
+
729
703
  def new_from_binary(str)
730
704
  unless str.size == Net::DNS::HFIXEDSZ
731
705
  raise ArgumentError, "Header binary data has wrong size: `#{str.size}' bytes"
@@ -746,14 +720,14 @@ module Net # :nodoc:
746
720
  @nsCount = arr[5]
747
721
  @arCount = arr[6]
748
722
  end
749
-
723
+
750
724
  def new_from_hash(hash)
751
725
  new_from_scratch
752
726
  hash.each do |key,val|
753
727
  eval "self.#{key.to_s} = val"
754
728
  end
755
729
  end
756
-
730
+
757
731
  def genID
758
732
  while (@@id_arr.include?(q = rand(65535)))
759
733
  end
@@ -764,4 +738,4 @@ module Net # :nodoc:
764
738
  end
765
739
 
766
740
  end
767
- end
741
+ end