In Files

  • resolv.rb

Resolv::DNS::Message

Attributes

aa[RW]
additional[R]
answer[R]
authority[R]
id[RW]
opcode[RW]
qr[RW]
question[R]
ra[RW]
rcode[RW]
rd[RW]
tc[RW]

Public Class Methods

decode(m) click to toggle source
 
               # File resolv.rb, line 1263
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.add_authority(name, ttl, data)
    }
    (1..arcount).each {
      name, ttl, data = msg.get_rr
      o.add_additional(name, ttl, data)
    }
  }
  return o
end
            
new(id = (@@identifier += 1) & 0xffff) click to toggle source
 
               # File resolv.rb, line 1091
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
            

Public Instance Methods

==(other) click to toggle source
 
               # File resolv.rb, line 1109
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.authority &&
         @additional == other.additional
end
            
add_additional(name, ttl, data) click to toggle source
 
               # File resolv.rb, line 1154
def add_additional(name, ttl, data)
  @additional << [Name.create(name), ttl, data]
end
            
add_answer(name, ttl, data) click to toggle source
 
               # File resolv.rb, line 1134
def add_answer(name, ttl, data)
  @answer << [Name.create(name), ttl, data]
end
            
add_authority(name, ttl, data) click to toggle source
 
               # File resolv.rb, line 1144
def add_authority(name, ttl, data)
  @authority << [Name.create(name), ttl, data]
end
            
add_question(name, typeclass) click to toggle source
 
               # File resolv.rb, line 1124
def add_question(name, typeclass)
  @question << [Name.create(name), typeclass]
end
            
each_additional() click to toggle source
 
               # File resolv.rb, line 1158
def each_additional
  @additional.each {|name, ttl, data|
    yield name, ttl, data
  }
end
            
each_answer() click to toggle source
 
               # File resolv.rb, line 1138
def each_answer
  @answer.each {|name, ttl, data|
    yield name, ttl, data
  }
end
            
each_authority() click to toggle source
 
               # File resolv.rb, line 1148
def each_authority
  @authority.each {|name, ttl, data|
    yield name, ttl, data
  }
end
            
each_question() click to toggle source
 
               # File resolv.rb, line 1128
def each_question
  @question.each {|name, typeclass|
    yield name, typeclass
  }
end
            
each_resource() click to toggle source
 
               # File resolv.rb, line 1164
def each_resource
  each_answer {|name, ttl, data| yield name, ttl, data}
  each_authority {|name, ttl, data| yield name, ttl, data}
  each_additional {|name, ttl, data| yield name, ttl, data}
end
            
encode() click to toggle source
 
               # File resolv.rb, line 1170
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
            

Commenting is here to help enhance the documentation. For example, code samples, or clarification of the documentation.

If you have questions about Ruby or the documentation, please post to one of the Ruby mailing lists. You will get better, faster, help that way.

If you wish to post a correction of the docs, please do so, but also file bug report so that it can be corrected for the next release. Thank you.

If you want to help improve the Ruby documentation, please visit Documenting-ruby.org.

blog comments powered by Disqus