Class: Resolv::DNS::Message
- Inherits:
-
Object
- Object
- Resolv::DNS::Message
- Defined in:
- lib/resolv.rb
Overview
:nodoc:
Defined Under Namespace
Classes: MessageDecoder, MessageEncoder
Constant Summary collapse
- @@identifier =
1
Instance Attribute Summary collapse
-
#aa ⇒ Object
Returns the value of attribute aa.
-
#additional ⇒ Object
readonly
Returns the value of attribute additional.
-
#answer ⇒ Object
readonly
Returns the value of attribute answer.
-
#authority ⇒ Object
readonly
Returns the value of attribute authority.
-
#id ⇒ Object
Returns the value of attribute id.
-
#opcode ⇒ Object
Returns the value of attribute opcode.
-
#qr ⇒ Object
Returns the value of attribute qr.
-
#question ⇒ Object
readonly
Returns the value of attribute question.
-
#ra ⇒ Object
Returns the value of attribute ra.
-
#rcode ⇒ Object
Returns the value of attribute rcode.
-
#rd ⇒ Object
Returns the value of attribute rd.
-
#tc ⇒ Object
Returns the value of attribute tc.
Class Method Summary collapse
Instance Method Summary collapse
- #==(other) ⇒ Object
- #add_additional(name, ttl, data) ⇒ Object
- #add_answer(name, ttl, data) ⇒ Object
- #add_authority(name, ttl, data) ⇒ Object
- #add_question(name, typeclass) ⇒ Object
- #each_additional ⇒ Object
- #each_answer ⇒ Object
- #each_authority ⇒ Object
- #each_question ⇒ Object
- #each_resource ⇒ Object
- #encode ⇒ Object
-
#initialize(id = (@@identifier += 1) & 0xffff) ⇒ Message
constructor
A new instance of Message.
Constructor Details
#initialize(id = (@@identifier += 1) & 0xffff) ⇒ Message
Returns a new instance of Message.
1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 |
# File 'lib/resolv.rb', line 1176 def initialize(id = (@@identifier += 1) & 0xffff) @id = id @qr = 0 @opcode = 0 @aa = 0 @tc = 0 @rd = 0 # recursion desired @ra = 0 # recursion available @rcode = 0 @question = [] @answer = [] @authority = [] @additional = [] end |
Instance Attribute Details
#aa ⇒ Object
Returns the value of attribute aa
1191 1192 1193 |
# File 'lib/resolv.rb', line 1191 def aa @aa end |
#additional ⇒ Object (readonly)
Returns the value of attribute additional
1192 1193 1194 |
# File 'lib/resolv.rb', line 1192 def additional @additional end |
#answer ⇒ Object (readonly)
Returns the value of attribute answer
1192 1193 1194 |
# File 'lib/resolv.rb', line 1192 def answer @answer end |
#authority ⇒ Object (readonly)
Returns the value of attribute authority
1192 1193 1194 |
# File 'lib/resolv.rb', line 1192 def @authority end |
#id ⇒ Object
Returns the value of attribute id
1191 1192 1193 |
# File 'lib/resolv.rb', line 1191 def id @id end |
#opcode ⇒ Object
Returns the value of attribute opcode
1191 1192 1193 |
# File 'lib/resolv.rb', line 1191 def opcode @opcode end |
#qr ⇒ Object
Returns the value of attribute qr
1191 1192 1193 |
# File 'lib/resolv.rb', line 1191 def qr @qr end |
#question ⇒ Object (readonly)
Returns the value of attribute question
1192 1193 1194 |
# File 'lib/resolv.rb', line 1192 def question @question end |
#ra ⇒ Object
Returns the value of attribute ra
1191 1192 1193 |
# File 'lib/resolv.rb', line 1191 def ra @ra end |
#rcode ⇒ Object
Returns the value of attribute rcode
1191 1192 1193 |
# File 'lib/resolv.rb', line 1191 def rcode @rcode end |
#rd ⇒ Object
Returns the value of attribute rd
1191 1192 1193 |
# File 'lib/resolv.rb', line 1191 def rd @rd end |
#tc ⇒ Object
Returns the value of attribute tc
1191 1192 1193 |
# File 'lib/resolv.rb', line 1191 def tc @tc end |
Class Method Details
.decode(m) ⇒ Object
1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 |
# File 'lib/resolv.rb', line 1348 def Message.decode(m) o = Message.new(0) MessageDecoder.new(m) {|msg| id, flag, qdcount, ancount, nscount, arcount = msg.get_unpack('nnnnnn') o.id = id o.qr = (flag >> 15) & 1 o.opcode = (flag >> 11) & 15 o.aa = (flag >> 10) & 1 o.tc = (flag >> 9) & 1 o.rd = (flag >> 8) & 1 o.ra = (flag >> 7) & 1 o.rcode = flag & 15 (1..qdcount).each { name, typeclass = msg.get_question o.add_question(name, typeclass) } (1..ancount).each { name, ttl, data = msg.get_rr o.add_answer(name, ttl, data) } (1..nscount).each { name, ttl, data = msg.get_rr o.(name, ttl, data) } (1..arcount).each { name, ttl, data = msg.get_rr o.add_additional(name, ttl, data) } } return o end |
Instance Method Details
#==(other) ⇒ Object
1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 |
# File 'lib/resolv.rb', line 1194 def ==(other) return @id == other.id && @qr == other.qr && @opcode == other.opcode && @aa == other.aa && @tc == other.tc && @rd == other.rd && @ra == other.ra && @rcode == other.rcode && @question == other.question && @answer == other.answer && @authority == other. && @additional == other.additional end |
#add_additional(name, ttl, data) ⇒ Object
1239 1240 1241 |
# File 'lib/resolv.rb', line 1239 def add_additional(name, ttl, data) @additional << [Name.create(name), ttl, data] end |
#add_answer(name, ttl, data) ⇒ Object
1219 1220 1221 |
# File 'lib/resolv.rb', line 1219 def add_answer(name, ttl, data) @answer << [Name.create(name), ttl, data] end |
#add_authority(name, ttl, data) ⇒ Object
1229 1230 1231 |
# File 'lib/resolv.rb', line 1229 def (name, ttl, data) @authority << [Name.create(name), ttl, data] end |
#add_question(name, typeclass) ⇒ Object
1209 1210 1211 |
# File 'lib/resolv.rb', line 1209 def add_question(name, typeclass) @question << [Name.create(name), typeclass] end |
#each_additional ⇒ Object
1243 1244 1245 1246 1247 |
# File 'lib/resolv.rb', line 1243 def each_additional @additional.each {|name, ttl, data| yield name, ttl, data } end |
#each_answer ⇒ Object
1223 1224 1225 1226 1227 |
# File 'lib/resolv.rb', line 1223 def each_answer @answer.each {|name, ttl, data| yield name, ttl, data } end |
#each_authority ⇒ Object
1233 1234 1235 1236 1237 |
# File 'lib/resolv.rb', line 1233 def @authority.each {|name, ttl, data| yield name, ttl, data } end |
#each_question ⇒ Object
1213 1214 1215 1216 1217 |
# File 'lib/resolv.rb', line 1213 def each_question @question.each {|name, typeclass| yield name, typeclass } end |
#each_resource ⇒ Object
1249 1250 1251 1252 1253 |
# File 'lib/resolv.rb', line 1249 def each_resource each_answer {|name, ttl, data| yield name, ttl, data} {|name, ttl, data| yield name, ttl, data} each_additional {|name, ttl, data| yield name, ttl, data} end |
#encode ⇒ Object
1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 |
# File 'lib/resolv.rb', line 1255 def encode return MessageEncoder.new {|msg| msg.put_pack('nnnnnn', @id, (@qr & 1) << 15 | (@opcode & 15) << 11 | (@aa & 1) << 10 | (@tc & 1) << 9 | (@rd & 1) << 8 | (@ra & 1) << 7 | (@rcode & 15), @question.length, @answer.length, @authority.length, @additional.length) @question.each {|q| name, typeclass = q msg.put_name(name) msg.put_pack('nn', typeclass::TypeValue, typeclass::ClassValue) } [@answer, @authority, @additional].each {|rr| rr.each {|r| name, ttl, data = r msg.put_name(name) msg.put_pack('nnN', data.class::TypeValue, data.class::ClassValue, ttl) msg.put_length16 {data.encode_rdata(msg)} } } }.to_s end |