Dnsruby::IPv6 class
IPv6 address format a:b:c:d:e:f:g:h
Compresses IPv6 format a::b
A composite IPv6 address RegExp
Created a new IPv6 address from +arg+ which may be:
IPv6 | returns arg |
String | arg must match one of the IPv6::Regex* constants |
# File lib/Dnsruby/ipv6.rb, line 55 55: def self.create(arg) 56: case arg 57: when IPv6 58: return arg 59: when String 60: address = '' 61: if Regex_8Hex =~ arg 62: arg.scan(/[0-9A-Fa-f]+/) {|hex| address << [hex.hex].pack('n')} 63: elsif Regex_CompressedHex =~ arg 64: prefix = $1 65: suffix = $2 66: a1 = '' 67: a2 = '' 68: prefix.scan(/[0-9A-Fa-f]+/) {|hex| a1 << [hex.hex].pack('n')} 69: suffix.scan(/[0-9A-Fa-f]+/) {|hex| a2 << [hex.hex].pack('n')} 70: omitlen = 16 - a1.length - a2.length 71: address << a1 << "\00"" * omitlen << a2 72: elsif Regex_6Hex4Dec =~ arg 73: prefix, a, b, c, d = $1, $2.to_i, $3.to_i, $4.to_i, $5.to_i 74: if (0..255) === a && (0..255) === b && (0..255) === c && (0..255) === d 75: prefix.scan(/[0-9A-Fa-f]+/) {|hex| address << [hex.hex].pack('n')} 76: address << [a, b, c, d].pack('CCCC') 77: else 78: raise ArgumentError.new("not numeric IPv6 address: " + arg) 79: end 80: elsif Regex_CompressedHex4Dec =~ arg 81: prefix, suffix, a, b, c, d = $1, $2, $3.to_i, $4.to_i, $5.to_i, $6.to_i 82: if (0..255) === a && (0..255) === b && (0..255) === c && (0..255) === d 83: a1 = '' 84: a2 = '' 85: prefix.scan(/[0-9A-Fa-f]+/) {|hex| a1 << [hex.hex].pack('n')} 86: suffix.scan(/[0-9A-Fa-f]+/) {|hex| a2 << [hex.hex].pack('n')} 87: omitlen = 12 - a1.length - a2.length 88: address << a1 << "\00"" * omitlen << a2 << [a, b, c, d].pack('CCCC') 89: else 90: raise ArgumentError.new("not numeric IPv6 address: " + arg) 91: end 92: else 93: raise ArgumentError.new("not numeric IPv6 address: " + arg) 94: end 95: return IPv6.new(address) 96: else 97: raise ArgumentError.new("cannot interpret as IPv6 address: #{arg.inspect}") 98: end 99: end
# File lib/Dnsruby/ipv6.rb, line 140 140: def hash 141: return @address.hash 142: end
Turns this IPv6 address into a Dnsruby::Name —
ip6.arpa should be searched too. [RFC3152]
# File lib/Dnsruby/ipv6.rb, line 126 126: def to_name 127: return Name.create( 128: # @address.unpack("H32")[0].split(//).reverse + ['ip6', 'arpa']) 129: @address.unpack("H32")[0].split(//).reverse.join(".") + ".ip6.arpa") 130: end
Disabled; run with --debug to generate this.
Generated with the Darkfish Rdoc Generator 1.1.6.