Class: Net::DNS::Question
- Inherits:
-
Object
- Object
- Net::DNS::Question
- Includes:
- Names
- Defined in:
- lib/net/dns/question.rb
Overview
Name
Net::DNS::Question - DNS packet question class
Synopsis
require 'net/dns/question'
Description
This class represent the Question portion of a DNS packet. The number of question entries is stored in the qdCount
variable of an Header object.
A new object can be created passing the name of the query and the type of answer desired, plus an optional argument containing the class:
question = Net::DNS::Question.new("google.com.", Net::DNS::A)
#=> "google.com. A IN"
Alternatevly, a new object is created when processing a binary packet, as when an answer is received. To obtain the binary data from a question object you can use the method Question#data:
question.data
#=> "\006google\003com\000\000\001\000\001"
A lot of methods were written to keep a compatibility layer with the Perl version of the library, as long as methods name which are more or less the same.
Error classes
Some error classes has been defined for the Net::DNS::Header class, which are listed here to keep a light and browsable main documentation. We have:
-
QuestionArgumentError: generic argument error
-
QuestionNameError: an error in the
name
part of a Question entry
Copyright
Copyright © 2006 Marco Ceresa
All rights reserved. This program is free software; you may redistribute it and/or modify it under the same terms as Ruby itself.
Constant Summary
Constants included from Names
Instance Attribute Summary collapse
-
#qClass ⇒ Object
readonly
class
part of a Question entry. -
#qName ⇒ Object
readonly
name
part of a Question entry. -
#qType ⇒ Object
readonly
type
part of a Question entry.
Class Method Summary collapse
-
.parse(arg) ⇒ Object
Return a new Net::DNS::Question object created by parsing binary data, such as an answer from the nameserver.
Instance Method Summary collapse
-
#comp_data ⇒ Object
Return the binary data of the objects, plus an offset and an Hash with references to compressed names.
-
#data ⇒ Object
Outputs binary data from a Question object.
-
#initialize(name, type = Net::DNS::A, cls = Net::DNS::IN) ⇒ Question
constructor
If not specified,
type
andcls
arguments defaults to Net::DNS::A and Net::DNS::IN respectively. -
#inspect ⇒ Object
Known inspect method with nice formatting.
Methods included from Names
#dn_comp, #dn_expand, #names_array, #pack_name, #valid?
Constructor Details
#initialize(name, type = Net::DNS::A, cls = Net::DNS::IN) ⇒ Question
If not specified, type
and cls
arguments defaults to Net::DNS::A and Net::DNS::IN respectively.
85 86 87 88 89 |
# File 'lib/net/dns/question.rb', line 85 def initialize(name,type=Net::DNS::A,cls=Net::DNS::IN) @qName = check_name name @qType = Net::DNS::RR::Types.new type @qClass = Net::DNS::RR::Classes.new cls end |
Instance Attribute Details
#qClass ⇒ Object (readonly)
class
part of a Question entry
71 72 73 |
# File 'lib/net/dns/question.rb', line 71 def qClass @qClass end |
#qName ⇒ Object (readonly)
name
part of a Question entry
67 68 69 |
# File 'lib/net/dns/question.rb', line 67 def qName @qName end |
#qType ⇒ Object (readonly)
type
part of a Question entry
69 70 71 |
# File 'lib/net/dns/question.rb', line 69 def qType @qType end |
Class Method Details
.parse(arg) ⇒ Object
99 100 101 102 103 104 105 106 107 |
# File 'lib/net/dns/question.rb', line 99 def self.parse(arg) if arg.kind_of? String o = allocate o.send(:new_from_binary,arg) o else raise QuestionArgumentError, "Wrong argument format, must be a String" end end |
Instance Method Details
#comp_data ⇒ Object
Return the binary data of the objects, plus an offset and an Hash with references to compressed names. For use in Net::DNS::Packet compressed packet creation.
132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 |
# File 'lib/net/dns/question.rb', line 132 def comp_data arr = @qName.split(".") str = pack_name(@qName) string = "" names = {} offset = Net::DNS::HFIXEDSZ arr.size.times do |i| x = i+1 elem = arr[-x] len = elem.size string = ((string.reverse)+([len,elem].pack("Ca*")).reverse).reverse names[string] = offset offset += len end offset += 2 * Net::DNS::INT16SZ str += "\000" [[str,@qType.to_i,@qClass.to_i].pack("a*nn"),offset,names] end |
#data ⇒ Object
Outputs binary data from a Question object
question.data
#=> "\006google\003com\000\000\001\000\001"
124 125 126 |
# File 'lib/net/dns/question.rb', line 124 def data [pack_name(@qName),@qType.to_i,@qClass.to_i].pack("a*nn") end |
#inspect ⇒ Object
Known inspect method with nice formatting
110 111 112 113 114 115 116 117 |
# File 'lib/net/dns/question.rb', line 110 def inspect if @qName.size > 29 then len = @qName.size + 1 else len = 29 end [@qName,@qClass.to_s,@qType.to_s].pack("A#{len} A8 A8") end |