Class: Resolv::DNS::Message
- Inherits:
-
Object
- Object
- Resolv::DNS::Message
- Defined in:
- lib/logmerge/resolv.rb
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.
1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 |
# File 'lib/logmerge/resolv.rb', line 1049 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.
1064 1065 1066 |
# File 'lib/logmerge/resolv.rb', line 1064 def aa @aa end |
#additional ⇒ Object (readonly)
Returns the value of attribute additional.
1065 1066 1067 |
# File 'lib/logmerge/resolv.rb', line 1065 def additional @additional end |
#answer ⇒ Object (readonly)
Returns the value of attribute answer.
1065 1066 1067 |
# File 'lib/logmerge/resolv.rb', line 1065 def answer @answer end |
#authority ⇒ Object (readonly)
Returns the value of attribute authority.
1065 1066 1067 |
# File 'lib/logmerge/resolv.rb', line 1065 def @authority end |
#id ⇒ Object
Returns the value of attribute id.
1064 1065 1066 |
# File 'lib/logmerge/resolv.rb', line 1064 def id @id end |
#opcode ⇒ Object
Returns the value of attribute opcode.
1064 1065 1066 |
# File 'lib/logmerge/resolv.rb', line 1064 def opcode @opcode end |
#qr ⇒ Object
Returns the value of attribute qr.
1064 1065 1066 |
# File 'lib/logmerge/resolv.rb', line 1064 def qr @qr end |
#question ⇒ Object (readonly)
Returns the value of attribute question.
1065 1066 1067 |
# File 'lib/logmerge/resolv.rb', line 1065 def question @question end |
#ra ⇒ Object
Returns the value of attribute ra.
1064 1065 1066 |
# File 'lib/logmerge/resolv.rb', line 1064 def ra @ra end |
#rcode ⇒ Object
Returns the value of attribute rcode.
1064 1065 1066 |
# File 'lib/logmerge/resolv.rb', line 1064 def rcode @rcode end |
#rd ⇒ Object
Returns the value of attribute rd.
1064 1065 1066 |
# File 'lib/logmerge/resolv.rb', line 1064 def rd @rd end |
#tc ⇒ Object
Returns the value of attribute tc.
1064 1065 1066 |
# File 'lib/logmerge/resolv.rb', line 1064 def tc @tc end |
Class Method Details
.decode(m) ⇒ Object
1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 |
# File 'lib/logmerge/resolv.rb', line 1221 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
1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 |
# File 'lib/logmerge/resolv.rb', line 1067 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
1112 1113 1114 |
# File 'lib/logmerge/resolv.rb', line 1112 def add_additional(name, ttl, data) @additional << [Name.create(name), ttl, data] end |
#add_answer(name, ttl, data) ⇒ Object
1092 1093 1094 |
# File 'lib/logmerge/resolv.rb', line 1092 def add_answer(name, ttl, data) @answer << [Name.create(name), ttl, data] end |
#add_authority(name, ttl, data) ⇒ Object
1102 1103 1104 |
# File 'lib/logmerge/resolv.rb', line 1102 def (name, ttl, data) @authority << [Name.create(name), ttl, data] end |
#add_question(name, typeclass) ⇒ Object
1082 1083 1084 |
# File 'lib/logmerge/resolv.rb', line 1082 def add_question(name, typeclass) @question << [Name.create(name), typeclass] end |
#each_additional ⇒ Object
1116 1117 1118 1119 1120 |
# File 'lib/logmerge/resolv.rb', line 1116 def each_additional @additional.each {|name, ttl, data| yield name, ttl, data } end |
#each_answer ⇒ Object
1096 1097 1098 1099 1100 |
# File 'lib/logmerge/resolv.rb', line 1096 def each_answer @answer.each {|name, ttl, data| yield name, ttl, data } end |
#each_authority ⇒ Object
1106 1107 1108 1109 1110 |
# File 'lib/logmerge/resolv.rb', line 1106 def @authority.each {|name, ttl, data| yield name, ttl, data } end |
#each_question ⇒ Object
1086 1087 1088 1089 1090 |
# File 'lib/logmerge/resolv.rb', line 1086 def each_question @question.each {|name, typeclass| yield name, typeclass } end |
#each_resource ⇒ Object
1122 1123 1124 1125 1126 |
# File 'lib/logmerge/resolv.rb', line 1122 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
1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 |
# File 'lib/logmerge/resolv.rb', line 1128 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 |