70 lines
1.5 KiB
Ruby
70 lines
1.5 KiB
Ruby
# -*- coding: binary -*-
|
|
##
|
|
#
|
|
# Net::DNS::RR::TXT
|
|
#
|
|
# $Id: TXT.rb,v 1.4 2006/07/28 07:33:36 bluemonk Exp $
|
|
#
|
|
##
|
|
|
|
|
|
module Net
|
|
module DNS
|
|
class RR
|
|
|
|
#------------------------------------------------------------
|
|
# RR type TXT
|
|
#------------------------------------------------------------
|
|
class TXT < RR
|
|
attr_reader :txt
|
|
|
|
private
|
|
|
|
def build_pack
|
|
str = ""
|
|
@txt.split(" ").each do |txt|
|
|
str += [txt.length,txt].pack("C a*")
|
|
end
|
|
@txt_pack = str
|
|
@rdlength = @txt_pack.size
|
|
end
|
|
|
|
def set_type
|
|
@type = Net::DNS::RR::Types.new("TXT")
|
|
end
|
|
|
|
def get_data
|
|
@txt_pack
|
|
end
|
|
|
|
def subclass_new_from_hash(args)
|
|
if args.has_key? :txt
|
|
@txt = args[:txt].strip
|
|
else
|
|
raise RRArgumentError, ":txt field is mandatory but missing"
|
|
end
|
|
end
|
|
|
|
def subclass_new_from_string(str)
|
|
@txt = str.strip
|
|
end
|
|
|
|
def subclass_new_from_binary(data,offset)
|
|
off_end = offset + @rdlength
|
|
@txt = ""
|
|
while offset < off_end
|
|
len = data.unpack("@#{offset} C")[0]
|
|
offset += 1
|
|
str = data[offset..offset+len-1]
|
|
offset += len
|
|
@txt << str << " "
|
|
end
|
|
return offset
|
|
end
|
|
|
|
end # class TXT
|
|
|
|
end # class RR
|
|
end # module DNS
|
|
end # module Net
|