75 lines
1.8 KiB
Ruby
75 lines
1.8 KiB
Ruby
# -*- coding: binary -*-
|
|
##
|
|
#
|
|
# Net::DNS::RR::HINFO
|
|
#
|
|
# $Id: HINFO.rb,v 1.4 2006/07/28 07:33:36 bluemonk Exp $
|
|
#
|
|
##
|
|
|
|
module Net
|
|
module DNS
|
|
class RR
|
|
|
|
#------------------------------------------------------------
|
|
# RR type HINFO
|
|
#------------------------------------------------------------
|
|
class HINFO < RR
|
|
attr_reader :cpu, :os
|
|
|
|
private
|
|
|
|
def check_hinfo(str)
|
|
if str.strip =~ /^["'](.*?)["']\s+["'](.*?)["']$/
|
|
return $1,$2
|
|
else
|
|
raise RRArgumentError, "HINFO section not valid: #{str.inspect}"
|
|
end
|
|
end
|
|
|
|
def build_pack
|
|
@hinfo_pack = [@cpu.size].pack("C") + @cpu
|
|
@hinfo_pack += [@os.size].pack("C") + @os
|
|
@rdlength = @hinfo_pack.size
|
|
end
|
|
|
|
def set_type
|
|
@type = Net::DNS::RR::Types.new("HINFO")
|
|
end
|
|
|
|
def get_data
|
|
@hinfo_pack
|
|
end
|
|
|
|
def get_inspect
|
|
"#@cpu #@os"
|
|
end
|
|
|
|
def subclass_new_from_hash(args)
|
|
if args.has_key? :cpu and args.has_key? :os
|
|
@cpu = args[:cpu]
|
|
@os = args[:os]
|
|
else
|
|
raise RRArgumentError, ":cpu and :os fields are mandatory but missing"
|
|
end
|
|
end
|
|
|
|
def subclass_new_from_string(str)
|
|
@cpu,@os = check_hinfo(str)
|
|
end
|
|
|
|
def subclass_new_from_binary(data,offset)
|
|
len = data.unpack("@#{offset} C")[0]
|
|
@cpu = data[offset+1..offset+1+len]
|
|
offset += len+1
|
|
len = data.unpack("@#{offset} C")[0]
|
|
@os = data[offset+1..offset+1+len]
|
|
return offset += len+1
|
|
end
|
|
|
|
end # class HINFO
|
|
|
|
end # class RR
|
|
end # module DNS
|
|
end # module Net
|