253 InetAddressHolder holder() {
254 return holder;
255 }
256
257 /* Used to store the name service provider */
258 private static List<NameService> nameServices = null;
259
260 /* Used to store the best available hostname */
261 private transient String canonicalHostName = null;
262
263 /** use serialVersionUID from JDK 1.0.2 for interoperability */
264 private static final long serialVersionUID = 3286316764910316507L;
265
266 /*
267 * Load net library into runtime, and perform initializations.
268 */
269 static {
270 preferIPv6Address = java.security.AccessController.doPrivileged(
271 new GetBooleanAction("java.net.preferIPv6Addresses")).booleanValue();
272 AccessController.doPrivileged(
273 new java.security.PrivilegedAction<Void>() {
274 public Void run() {
275 System.loadLibrary("net");
276 return null;
277 }
278 });
279 init();
280 }
281
282 /**
283 * Constructor for the Socket.accept() method.
284 * This creates an empty InetAddress, which is filled in by
285 * the accept() method. This InetAddress, however, is not
286 * put in the address cache, since it is not created by name.
287 */
288 InetAddress() {
289 holder = new InetAddressHolder();
290 }
291
292 /**
293 * Replaces the de-serialized object with an Inet4Address object.
835 if (provider == null)
836 return null;
837
838 NameService nameService = null;
839 if (provider.equals("default")) {
840 // initialize the default name service
841 nameService = new NameService() {
842 public InetAddress[] lookupAllHostAddr(String host)
843 throws UnknownHostException {
844 return impl.lookupAllHostAddr(host);
845 }
846 public String getHostByAddr(byte[] addr)
847 throws UnknownHostException {
848 return impl.getHostByAddr(addr);
849 }
850 };
851 } else {
852 final String providerName = provider;
853 try {
854 nameService = java.security.AccessController.doPrivileged(
855 new java.security.PrivilegedExceptionAction<NameService>() {
856 public NameService run() {
857 Iterator<NameServiceDescriptor> itr =
858 ServiceLoader.load(NameServiceDescriptor.class)
859 .iterator();
860 while (itr.hasNext()) {
861 NameServiceDescriptor nsd = itr.next();
862 if (providerName.
863 equalsIgnoreCase(nsd.getType()+","
864 +nsd.getProviderName())) {
865 try {
866 return nsd.createNameService();
867 } catch (Exception e) {
868 e.printStackTrace();
869 System.err.println(
870 "Cannot create name service:"
871 +providerName+": " + e);
872 }
873 }
874 }
875
876 return null;
877 }
878 }
879 );
880 } catch (java.security.PrivilegedActionException e) {
881 }
882 }
883
884 return nameService;
885 }
886
887 static {
888 // create the impl
889 impl = InetAddressImplFactory.create();
890
891 // get name service if provided and requested
892 String provider = null;;
893 String propPrefix = "sun.net.spi.nameservice.provider.";
894 int n = 1;
895 nameServices = new ArrayList<NameService>();
896 provider = AccessController.doPrivileged(
897 new GetPropertyAction(propPrefix + n));
898 while (provider != null) {
899 NameService ns = createNSProvider(provider);
900 if (ns != null)
901 nameServices.add(ns);
902
903 n++;
904 provider = AccessController.doPrivileged(
905 new GetPropertyAction(propPrefix + n));
906 }
907
908 // if not designate any name services provider,
909 // create a default one
910 if (nameServices.size() == 0) {
911 NameService ns = createNSProvider("default");
912 nameServices.add(ns);
913 }
914 }
915
|
253 InetAddressHolder holder() {
254 return holder;
255 }
256
257 /* Used to store the name service provider */
258 private static List<NameService> nameServices = null;
259
260 /* Used to store the best available hostname */
261 private transient String canonicalHostName = null;
262
263 /** use serialVersionUID from JDK 1.0.2 for interoperability */
264 private static final long serialVersionUID = 3286316764910316507L;
265
266 /*
267 * Load net library into runtime, and perform initializations.
268 */
269 static {
270 preferIPv6Address = java.security.AccessController.doPrivileged(
271 new GetBooleanAction("java.net.preferIPv6Addresses")).booleanValue();
272 AccessController.doPrivileged(
273 new java.security.PrivilegedAction<>() {
274 public Void run() {
275 System.loadLibrary("net");
276 return null;
277 }
278 });
279 init();
280 }
281
282 /**
283 * Constructor for the Socket.accept() method.
284 * This creates an empty InetAddress, which is filled in by
285 * the accept() method. This InetAddress, however, is not
286 * put in the address cache, since it is not created by name.
287 */
288 InetAddress() {
289 holder = new InetAddressHolder();
290 }
291
292 /**
293 * Replaces the de-serialized object with an Inet4Address object.
835 if (provider == null)
836 return null;
837
838 NameService nameService = null;
839 if (provider.equals("default")) {
840 // initialize the default name service
841 nameService = new NameService() {
842 public InetAddress[] lookupAllHostAddr(String host)
843 throws UnknownHostException {
844 return impl.lookupAllHostAddr(host);
845 }
846 public String getHostByAddr(byte[] addr)
847 throws UnknownHostException {
848 return impl.getHostByAddr(addr);
849 }
850 };
851 } else {
852 final String providerName = provider;
853 try {
854 nameService = java.security.AccessController.doPrivileged(
855 new java.security.PrivilegedExceptionAction<>() {
856 public NameService run() {
857 Iterator<NameServiceDescriptor> itr =
858 ServiceLoader.load(NameServiceDescriptor.class)
859 .iterator();
860 while (itr.hasNext()) {
861 NameServiceDescriptor nsd = itr.next();
862 if (providerName.
863 equalsIgnoreCase(nsd.getType()+","
864 +nsd.getProviderName())) {
865 try {
866 return nsd.createNameService();
867 } catch (Exception e) {
868 e.printStackTrace();
869 System.err.println(
870 "Cannot create name service:"
871 +providerName+": " + e);
872 }
873 }
874 }
875
876 return null;
877 }
878 }
879 );
880 } catch (java.security.PrivilegedActionException e) {
881 }
882 }
883
884 return nameService;
885 }
886
887 static {
888 // create the impl
889 impl = InetAddressImplFactory.create();
890
891 // get name service if provided and requested
892 String provider = null;;
893 String propPrefix = "sun.net.spi.nameservice.provider.";
894 int n = 1;
895 nameServices = new ArrayList<>();
896 provider = AccessController.doPrivileged(
897 new GetPropertyAction(propPrefix + n));
898 while (provider != null) {
899 NameService ns = createNSProvider(provider);
900 if (ns != null)
901 nameServices.add(ns);
902
903 n++;
904 provider = AccessController.doPrivileged(
905 new GetPropertyAction(propPrefix + n));
906 }
907
908 // if not designate any name services provider,
909 // create a default one
910 if (nameServices.size() == 0) {
911 NameService ns = createNSProvider("default");
912 nameServices.add(ns);
913 }
914 }
915
|