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.
1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 |
# File 'lib/resolv.rb', line 1341 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.
1356 1357 1358 |
# File 'lib/resolv.rb', line 1356 def aa @aa end |
#additional ⇒ Object (readonly)
Returns the value of attribute additional.
1357 1358 1359 |
# File 'lib/resolv.rb', line 1357 def additional @additional end |
#answer ⇒ Object (readonly)
Returns the value of attribute answer.
1357 1358 1359 |
# File 'lib/resolv.rb', line 1357 def answer @answer end |
#authority ⇒ Object (readonly)
Returns the value of attribute authority.
1357 1358 1359 |
# File 'lib/resolv.rb', line 1357 def @authority end |
#id ⇒ Object
Returns the value of attribute id.
1356 1357 1358 |
# File 'lib/resolv.rb', line 1356 def id @id end |
#opcode ⇒ Object
Returns the value of attribute opcode.
1356 1357 1358 |
# File 'lib/resolv.rb', line 1356 def opcode @opcode end |
#qr ⇒ Object
Returns the value of attribute qr.
1356 1357 1358 |
# File 'lib/resolv.rb', line 1356 def qr @qr end |
#question ⇒ Object (readonly)
Returns the value of attribute question.
1357 1358 1359 |
# File 'lib/resolv.rb', line 1357 def question @question end |
#ra ⇒ Object
Returns the value of attribute ra.
1356 1357 1358 |
# File 'lib/resolv.rb', line 1356 def ra @ra end |
#rcode ⇒ Object
Returns the value of attribute rcode.
1356 1357 1358 |
# File 'lib/resolv.rb', line 1356 def rcode @rcode end |
#rd ⇒ Object
Returns the value of attribute rd.
1356 1357 1358 |
# File 'lib/resolv.rb', line 1356 def rd @rd end |
#tc ⇒ Object
Returns the value of attribute tc.
1356 1357 1358 |
# File 'lib/resolv.rb', line 1356 def tc @tc end |
Class Method Details
.decode(m) ⇒ Object
1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 |
# File 'lib/resolv.rb', line 1515 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
1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 |
# File 'lib/resolv.rb', line 1359 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
1404 1405 1406 |
# File 'lib/resolv.rb', line 1404 def add_additional(name, ttl, data) @additional << [Name.create(name), ttl, data] end |
#add_answer(name, ttl, data) ⇒ Object
1384 1385 1386 |
# File 'lib/resolv.rb', line 1384 def add_answer(name, ttl, data) @answer << [Name.create(name), ttl, data] end |
#add_authority(name, ttl, data) ⇒ Object
1394 1395 1396 |
# File 'lib/resolv.rb', line 1394 def (name, ttl, data) @authority << [Name.create(name), ttl, data] end |
#add_question(name, typeclass) ⇒ Object
1374 1375 1376 |
# File 'lib/resolv.rb', line 1374 def add_question(name, typeclass) @question << [Name.create(name), typeclass] end |
#each_additional ⇒ Object
1408 1409 1410 1411 1412 |
# File 'lib/resolv.rb', line 1408 def each_additional @additional.each {|name, ttl, data| yield name, ttl, data } end |
#each_answer ⇒ Object
1388 1389 1390 1391 1392 |
# File 'lib/resolv.rb', line 1388 def each_answer @answer.each {|name, ttl, data| yield name, ttl, data } end |
#each_authority ⇒ Object
1398 1399 1400 1401 1402 |
# File 'lib/resolv.rb', line 1398 def @authority.each {|name, ttl, data| yield name, ttl, data } end |
#each_question ⇒ Object
1378 1379 1380 1381 1382 |
# File 'lib/resolv.rb', line 1378 def each_question @question.each {|name, typeclass| yield name, typeclass } end |
#each_resource ⇒ Object
1414 1415 1416 1417 1418 |
# File 'lib/resolv.rb', line 1414 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
1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 |
# File 'lib/resolv.rb', line 1420 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 |