Class: Resolv::IPv6

Class | Resolv::IPv6
In: | resolv.rb
Parent: | Object

### Methods

== create eql? hash inspect new to_name to_s

### Constants

Regex_8Hex | = | /\A (?:[0-9A-Fa-f]{1,4}:){7} [0-9A-Fa-f]{1,4} \z/x
Regex_CompressedHex | = | /\A ((?:[0-9A-Fa-f]{1,4}(?::[0-9A-Fa-f]{1,4})*)?) :: ((?:[0-9A-Fa-f]{1,4}(?::[0-9A-Fa-f]{1,4})*)?) \z/x
Regex_6Hex4Dec | = | /\A ((?:[0-9A-Fa-f]{1,4}:){6,6}) (\d+)\.(\d+)\.(\d+)\.(\d+) \z/x
Regex_CompressedHex4Dec | = | /\A ((?:[0-9A-Fa-f]{1,4}(?::[0-9A-Fa-f]{1,4})*)?) :: ((?:[0-9A-Fa-f]{1,4}:)*) (\d+)\.(\d+)\.(\d+)\.(\d+) \z/x
Regex | = | / (?:#{Regex_8Hex}) | (?:#{Regex_CompressedHex}) | (?:#{Regex_6Hex4Dec}) | (?:#{Regex_CompressedHex4Dec})/x

### Attributes

address | [R] |

### Public Class methods

create(arg)

[Source]

    # File resolv.rb, line 1797
        def self.create(arg)
          case arg
          when IPv6
            return arg
          when String
            address = ''
            if Regex_8Hex =~ arg
              arg.scan(/[0-9A-Fa-f]+/) {|hex| address << [hex.hex].pack('n')}
            elsif Regex_CompressedHex =~ arg
              prefix = $1
              suffix = $2
              a1 = ''
              a2 = ''
              prefix.scan(/[0-9A-Fa-f]+/) {|hex| a1 << [hex.hex].pack('n')}
              suffix.scan(/[0-9A-Fa-f]+/) {|hex| a2 << [hex.hex].pack('n')}
              omitlen = 16 - a1.length - a2.length
              address << a1 << "\0" * omitlen << a2
            elsif Regex_6Hex4Dec =~ arg
              prefix, a, b, c, d = $1, $2.to_i, $3.to_i, $4.to_i, $5.to_i
              if (0..255) === a && (0..255) === b && (0..255) === c && (0..255) === d
                prefix.scan(/[0-9A-Fa-f]+/) {|hex| address << [hex.hex].pack('n')}
                address << [a, b, c, d].pack('CCCC')
              else
                raise ArgumentError.new("not numeric IPv6 address: " + arg)
              end
            elsif Regex_CompressedHex4Dec =~ arg
              prefix, suffix, a, b, c, d = $1, $2, $3.to_i, $4.to_i, $5.to_i, $6.to_i
              if (0..255) === a && (0..255) === b && (0..255) === c && (0..255) === d
                a1 = ''
                a2 = ''
                prefix.scan(/[0-9A-Fa-f]+/) {|hex| a1 << [hex.hex].pack('n')}
                suffix.scan(/[0-9A-Fa-f]+/) {|hex| a2 << [hex.hex].pack('n')}
                omitlen = 12 - a1.length - a2.length
                address << a1 << "\0" * omitlen << a2 << [a, b, c, d].pack('CCCC')
              else
                raise ArgumentError.new("not numeric IPv6 address: " + arg)
              end
            else
              raise ArgumentError.new("not numeric IPv6 address: " + arg)
            end
            return IPv6.new(address)
          else
            raise ArgumentError.new("cannot interpret as IPv6 address: #{arg.inspect}")
          end
        end

new(address)

[Source]

    # File resolv.rb, line 1843
        def initialize(address)
          unless address.kind_of?(String) && address.length == 16
            raise ArgumentError.new('IPv6 address must be 16 bytes')
          end
          @address = address
        end

### Public Instance methods

==(other)

[Source]

    # File resolv.rb, line 1869
        def ==(other)
          return @address == other.address
        end

eql?(other)

[Source]

    # File resolv.rb, line 1873
        def eql?(other)
          return self == other
        end

hash()

[Source]

    # File resolv.rb, line 1877
        def hash
          return @address.hash
        end

inspect()

[Source]

    # File resolv.rb, line 1859
        def inspect
          return "#<#{self.class} #{self.to_s}>"
        end

to_name()

[Source]

    # File resolv.rb, line 1863
        def to_name
          # ip6.arpa should be searched too. [RFC3152]
          return DNS::Name.new(
            @address.unpack("H32")[0].split(//).reverse + ['ip6', 'int'])
        end

to_s()

[Source]

    # File resolv.rb, line 1851
        def to_s
          address = sprintf("%X:%X:%X:%X:%X:%X:%X:%X", *@address.unpack("nnnnnnnn"))
          unless address.sub!(/(^|:)0(:0)+(:|$)/, '::')
            address.sub!(/(^|:)0(:|$)/, '::')
          end
          return address
        end

[Validate]