Object
The header portion of a DNS packet
RFC 1035 Section 4.1.1
The Authenticated Data flag Relevant in DNSSEC context. (The AD bit is only set on answers where signatures have been cryptographically verified or the server is authoritative for the data and is allowed to set the bit by policy.)
# File lib/Dnsruby/message.rb, line 778 def Header.decrement_arcount_encoded(bytes) header = Header.new header_end = 0 MessageDecoder.new(bytes) {|msg| header.decode(msg) header_end = msg.index } header.arcount = header.arcount - 1 bytes[0,header_end]=MessageEncoder.new {|msg| header.encode(msg)}.to_s return bytes end
# File lib/Dnsruby/message.rb, line 718 def initialize(*args) if (args.length == 0) @id = rand(MAX_ID) @qr = false @opcode=OpCode.Query @aa = false @ad=false @tc = false @rd = false # recursion desired @ra = false # recursion available @cd=false @rcode=RCode.NoError @qdcount = 0 @nscount = 0 @ancount = 0 @arcount = 0 elsif (args.length == 1) decode(args[0]) end end
# File lib/Dnsruby/message.rb, line 791 def ==(other) return @qr == other.qr && @opcode == other.opcode && @aa == other.aa && @tc == other.tc && @rd == other.rd && @ra == other.ra && @cd == other.cd && @ad == other.ad && @rcode == other.get_header_rcode end
# File lib/Dnsruby/message.rb, line 754 def data return MessageEncoder.new {|msg| self.encode(msg) }.to_s end
# File lib/Dnsruby/message.rb, line 840 def decode(msg) @id, flag, @qdcount, @ancount, @nscount, @arcount = msg.get_unpack('nnnnnn') @qr = (((flag >> 15)&1)==1)?true:false @opcode = OpCode.new((flag >> 11) & 15) @aa = (((flag >> 10)&1)==1)?true:false @tc = (((flag >> 9)&1)==1)?true:false @rd = (((flag >> 8)&1)==1)?true:false @ra = (((flag >> 7)&1)==1)?true:false @ad = (((flag >> 5)&1)==1)?true:false @cd = (((flag >> 4)&1)==1)?true:false @rcode = RCode.new(flag & 15) end
# File lib/Dnsruby/message.rb, line 760 def encode(msg) msg.put_pack('nnnnnn', @id, (@qr ? 1:0) << 15 | (@opcode.code & 15) << 11 | (@aa ? 1:0) << 10 | (@tc ? 1:0) << 9 | (@rd ? 1:0) << 8 | (@ra ? 1:0) << 7 | (@ad ? 1:0) << 5 | (@cd ? 1:0) << 4 | (@rcode.code & 15), @qdcount, @ancount, @nscount, @arcount) end
This new get_header_rcode method is intended for use only by the Message class. This is because the Message OPT section may contain an extended rcode (see RFC 2671 section 4.6). Using the header rcode only ignores this extension, and is not recommended.
# File lib/Dnsruby/message.rb, line 702 def get_header_rcode @rcode end
# File lib/Dnsruby/message.rb, line 739 def opcode=(op) @opcode = OpCode.new(op) end
# File lib/Dnsruby/message.rb, line 743 def rcode=(rcode) @rcode = RCode.new(rcode) end
# File lib/Dnsruby/message.rb, line 803 def to_s to_s_with_rcode(@rcode) end
# File lib/Dnsruby/message.rb, line 807 def to_s_with_rcode(rcode) retval = ";; id = #{@id}\n"; if (@opcode == OpCode::Update) retval += ";; qr = #{@qr} " + "opcode = #{@opcode.string} "+ "rcode = #{@rcode.string}\n"; retval += ";; zocount = #{@qdcount} "+ "prcount = #{@ancount} " + "upcount = #{@nscount} " + "adcount = #{@arcount}\n"; else retval += ";; qr = #{@qr} " + "opcode = #{@opcode.string} " + "aa = #{@aa} " + "tc = #{@tc} " + "rd = #{@rd}\n"; retval += ";; ra = #{@ra} " + "ad = #{@ad} " + "cd = #{@cd} " + "rcode = #{rcode.string}\n"; retval += ";; qdcount = #{@qdcount} " + "ancount = #{@ancount} " + "nscount = #{@nscount} " + "arcount = #{@arcount}\n"; end return retval; end
Generated with the Darkfish Rdoc Generator 2.