net-dns 0.6.1 → 0.7.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.
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