1. /*
  2. * @(#)Inet6AddressImpl.java 1.2 03/01/23
  3. *
  4. * Copyright 2003 Sun Microsystems, Inc. All rights reserved.
  5. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
  6. */
  7. package java.net;
  8. /*
  9. * Package private implementation of InetAddressImpl for dual
  10. * IPv4/IPv6 stack.
  11. * <p>
  12. * If InetAddress.preferIPv6Address is true then anyLocalAddress(),
  13. * loopbackAddress(), and localHost() will return IPv6 addresses,
  14. * otherwise IPv4 addresses.
  15. *
  16. * @since 1.4
  17. */
  18. class Inet6AddressImpl implements InetAddressImpl {
  19. public native String getLocalHostName() throws UnknownHostException;
  20. public native byte[][]
  21. lookupAllHostAddr(String hostname) throws UnknownHostException;
  22. public native String getHostByAddr(byte[] addr) throws UnknownHostException;
  23. public synchronized InetAddress anyLocalAddress() {
  24. if (anyLocalAddress == null) {
  25. if (InetAddress.preferIPv6Address) {
  26. anyLocalAddress = new Inet6Address();
  27. anyLocalAddress.hostName = "::";
  28. } else {
  29. anyLocalAddress = (new Inet4AddressImpl()).anyLocalAddress();
  30. }
  31. }
  32. return anyLocalAddress;
  33. }
  34. public synchronized InetAddress loopbackAddress() {
  35. if (loopbackAddress == null) {
  36. if (InetAddress.preferIPv6Address) {
  37. byte[] loopback =
  38. {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  39. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01};
  40. loopbackAddress = new Inet6Address("localhost", loopback);
  41. } else {
  42. loopbackAddress = (new Inet4AddressImpl()).loopbackAddress();
  43. }
  44. }
  45. return loopbackAddress;
  46. }
  47. private InetAddress anyLocalAddress;
  48. private InetAddress loopbackAddress;
  49. }