Parent

Class Index [+]

Quicksearch

Dnsruby::IPv6

Dnsruby::IPv6 class

Constants

Regex_8Hex

IPv6 address format a:b:c:d:e:f:g:h

Regex_CompressedHex

Compresses IPv6 format a::b

Regex_6Hex4Dec

IPv4 mapped IPv6 address format a:b:c:d:e:f:w.x.y.z

Regex_CompressedHex4Dec

Compressed IPv4 mapped IPv6 address format a::b:w.x.y.z

Regex

A composite IPv6 address RegExp

Attributes

address[R]

The raw IPv6 address as a String

Public Class Methods

create(arg) click to toggle source
 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

Public Instance Methods

hash() click to toggle source
     # File lib/Dnsruby/ipv6.rb, line 140
140:     def hash
141:       return @address.hash
142:     end
to_name() click to toggle source

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
to_s() click to toggle source
     # File lib/Dnsruby/ipv6.rb, line 111
111:     def to_s
112:       address = sprintf("%X:%X:%X:%X:%X:%X:%X:%X", *@address.unpack("nnnnnnnn"))
113:       unless address.sub!(/(^|:)0(:0)+(:|$)/, '::')
114:         address.sub!(/(^|:)0(:|$)/, '::')
115:       end
116:       return address
117:     end

Disabled; run with --debug to generate this.

[Validate]

Generated with the Darkfish Rdoc Generator 1.1.6.