# -*- coding: binary -*-
##
#
# Net::DNS::RR::AAAA
# $id$
require 'ipaddr'
module Net
module DNS
class RR
# RR type AAAA
class AAAA < RR
attr_reader :address
# Assign to the RR::AAAA object a new IPv6 address, which can be in the
# form of a string or an IPAddr object
# a.address = "::1"
# a.address = IPAddr.new("::1")
def address=(addr)
@address = check_address addr
build_pack
end # address=
private
def check_address(addr)
address = ""
case addr
when String
address = IPAddr.new addr
when IPAddr
address = addr
else
raise RRArgumentError, "Unknown address type: #{addr.inspect}"
end
raise RRArgumentError, "Must specify an IPv6 address" unless address.ipv6?
address
rescue ArgumentError
raise RRArgumentError, "Invalid address #{addr.inspect}"
def build_pack
@address_pack = @address.hton
@rdlength = @address_pack.size
def set_type
@type = Net::DNS::RR::Types.new("AAAA")
def get_data
@address_pack
def get_inspect
"#@address"
def subclass_new_from_hash(args)
if args.has_key? :address
@address = check_address args[:address]
raise RRArgumentError, ":address field is mandatory but missing"
def subclass_new_from_string(str)
@address = check_address(str)
def subclass_new_from_binary(data,offset)
arr = data.unpack("@#{offset} n8")
@address = IPAddr.new sprintf("%x:%x:%x:%x:%x:%x:%x:%x",*arr)
return offset + 16
end # class AAAA
end # class RR
end # module DNS
end # module Net