class Gem::Resolv::DNS::Message

:nodoc:

def ==(other)

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

def add_additional(name, ttl, data)

def add_additional(name, ttl, data)
  @additional << [Name.create(name), ttl, data]
end

def add_answer(name, ttl, data)

def add_answer(name, ttl, data)
  @answer << [Name.create(name), ttl, data]
end

def add_authority(name, ttl, data)

def add_authority(name, ttl, data)
  @authority << [Name.create(name), ttl, data]
end

def add_question(name, typeclass)

def add_question(name, typeclass)
  @question << [Name.create(name), typeclass]
end

def each_additional

def each_additional
  @additional.each {|name, ttl, data|
    yield name, ttl, data
  }
end

def each_answer

def each_answer
  @answer.each {|name, ttl, data|
    yield name, ttl, data
  }
end

def each_authority

def each_authority
  @authority.each {|name, ttl, data|
    yield name, ttl, data
  }
end

def each_question

def each_question
  @question.each {|name, typeclass|
    yield name, typeclass
  }
end

def each_resource

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

def encode

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

def initialize(id = (@@identifier += 1) & 0xffff)

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