Class: Resolv::IPv6
- Inherits:
-
Object
- Object
- Resolv::IPv6
- Defined in:
- lib/resolv.rb
Constant Summary collapse
- 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
Instance Attribute Summary collapse
-
#address ⇒ Object
readonly
Returns the value of attribute address.
Class Method Summary collapse
Instance Method Summary collapse
- #==(other) ⇒ Object
- #eql?(other) ⇒ Boolean
- #hash ⇒ Object
-
#initialize(address) ⇒ IPv6
constructor
A new instance of IPv6.
- #inspect ⇒ Object
- #to_name ⇒ Object
- #to_s ⇒ Object
Constructor Details
#initialize(address) ⇒ IPv6
Returns a new instance of IPv6.
1843 1844 1845 1846 1847 1848 |
# File 'lib/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 |
Instance Attribute Details
#address ⇒ Object (readonly)
Returns the value of attribute address.
1849 1850 1851 |
# File 'lib/resolv.rb', line 1849 def address @address end |
Class Method Details
.create(arg) ⇒ Object
1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 |
# File 'lib/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 |
Instance Method Details
#==(other) ⇒ Object
1869 1870 1871 |
# File 'lib/resolv.rb', line 1869 def ==(other) return @address == other.address end |
#eql?(other) ⇒ Boolean
1873 1874 1875 |
# File 'lib/resolv.rb', line 1873 def eql?(other) return self == other end |
#hash ⇒ Object
1877 1878 1879 |
# File 'lib/resolv.rb', line 1877 def hash return @address.hash end |
#inspect ⇒ Object
1859 1860 1861 |
# File 'lib/resolv.rb', line 1859 def inspect return "#<#{self.class} #{self.to_s}>" end |
#to_name ⇒ Object
1863 1864 1865 1866 1867 |
# File 'lib/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 ⇒ Object
1851 1852 1853 1854 1855 1856 1857 |
# File 'lib/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 |