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.
1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 |
# File 'lib/resolv.rb', line 1319 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
1334 1335 1336 |
# File 'lib/resolv.rb', line 1334 def aa @aa end |
#additional ⇒ Object (readonly)
Returns the value of attribute additional
1335 1336 1337 |
# File 'lib/resolv.rb', line 1335 def additional @additional end |
#answer ⇒ Object (readonly)
Returns the value of attribute answer
1335 1336 1337 |
# File 'lib/resolv.rb', line 1335 def answer @answer end |
#authority ⇒ Object (readonly)
Returns the value of attribute authority
1335 1336 1337 |
# File 'lib/resolv.rb', line 1335 def @authority end |
#id ⇒ Object
Returns the value of attribute id
1334 1335 1336 |
# File 'lib/resolv.rb', line 1334 def id @id end |
#opcode ⇒ Object
Returns the value of attribute opcode
1334 1335 1336 |
# File 'lib/resolv.rb', line 1334 def opcode @opcode end |
#qr ⇒ Object
Returns the value of attribute qr
1334 1335 1336 |
# File 'lib/resolv.rb', line 1334 def qr @qr end |
#question ⇒ Object (readonly)
Returns the value of attribute question
1335 1336 1337 |
# File 'lib/resolv.rb', line 1335 def question @question end |
#ra ⇒ Object
Returns the value of attribute ra
1334 1335 1336 |
# File 'lib/resolv.rb', line 1334 def ra @ra end |
#rcode ⇒ Object
Returns the value of attribute rcode
1334 1335 1336 |
# File 'lib/resolv.rb', line 1334 def rcode @rcode end |
#rd ⇒ Object
Returns the value of attribute rd
1334 1335 1336 |
# File 'lib/resolv.rb', line 1334 def rd @rd end |
#tc ⇒ Object
Returns the value of attribute tc
1334 1335 1336 |
# File 'lib/resolv.rb', line 1334 def tc @tc end |
Class Method Details
.decode(m) ⇒ Object
1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 |
# File 'lib/resolv.rb', line 1493 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
1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 |
# File 'lib/resolv.rb', line 1337 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
1382 1383 1384 |
# File 'lib/resolv.rb', line 1382 def add_additional(name, ttl, data) @additional << [Name.create(name), ttl, data] end |
#add_answer(name, ttl, data) ⇒ Object
1362 1363 1364 |
# File 'lib/resolv.rb', line 1362 def add_answer(name, ttl, data) @answer << [Name.create(name), ttl, data] end |
#add_authority(name, ttl, data) ⇒ Object
1372 1373 1374 |
# File 'lib/resolv.rb', line 1372 def (name, ttl, data) @authority << [Name.create(name), ttl, data] end |
#add_question(name, typeclass) ⇒ Object
1352 1353 1354 |
# File 'lib/resolv.rb', line 1352 def add_question(name, typeclass) @question << [Name.create(name), typeclass] end |
#each_additional ⇒ Object
1386 1387 1388 1389 1390 |
# File 'lib/resolv.rb', line 1386 def each_additional @additional.each {|name, ttl, data| yield name, ttl, data } end |
#each_answer ⇒ Object
1366 1367 1368 1369 1370 |
# File 'lib/resolv.rb', line 1366 def each_answer @answer.each {|name, ttl, data| yield name, ttl, data } end |
#each_authority ⇒ Object
1376 1377 1378 1379 1380 |
# File 'lib/resolv.rb', line 1376 def @authority.each {|name, ttl, data| yield name, ttl, data } end |
#each_question ⇒ Object
1356 1357 1358 1359 1360 |
# File 'lib/resolv.rb', line 1356 def each_question @question.each {|name, typeclass| yield name, typeclass } end |
#each_resource ⇒ Object
1392 1393 1394 1395 1396 |
# File 'lib/resolv.rb', line 1392 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
1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 |
# File 'lib/resolv.rb', line 1398 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 |