< prev index next > test/lib/jdk/test/lib/net/IPSupport.java
Print this page
/*
! * Copyright (c) 2019, 2020, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
/*
! * Copyright (c) 2019, 2021, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.PrintStream;
import java.io.UncheckedIOException;
import java.net.InetAddress;
! import java.net.InetSocketAddress;
! import java.net.Socket;
! import java.net.SocketException;
- import java.net.UnknownHostException;
import java.security.AccessController;
import java.security.PrivilegedActionException;
import java.security.PrivilegedExceptionAction;
import java.util.concurrent.Callable;
import jtreg.SkippedException;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.PrintStream;
import java.io.UncheckedIOException;
+ import java.net.Inet4Address;
+ import java.net.Inet6Address;
import java.net.InetAddress;
! import java.net.ProtocolFamily;
! import java.net.StandardProtocolFamily;
! import java.nio.channels.SocketChannel;
import java.security.AccessController;
import java.security.PrivilegedActionException;
import java.security.PrivilegedExceptionAction;
import java.util.concurrent.Callable;
import jtreg.SkippedException;
private static final boolean hasIPv6;
private static final boolean preferIPv4Stack;
private static final boolean preferIPv6Addresses;
static {
! try {
! InetAddress loopbackIPv4 = InetAddress.getByAddress(
- new byte[] {0x7F, 0x00, 0x00, 0x01});
-
- InetAddress loopbackIPv6 = InetAddress.getByAddress(
- new byte[] {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01});
-
- hasIPv4 = runPrivilegedAction(() -> hasAddress(loopbackIPv4));
- hasIPv6 = runPrivilegedAction(() -> hasAddress(loopbackIPv6));
- } catch (UnknownHostException e) {
- throw new AssertionError(e);
- }
preferIPv4Stack = runPrivilegedAction(() -> Boolean.parseBoolean(
System.getProperty("java.net.preferIPv4Stack")));
preferIPv6Addresses = runPrivilegedAction(() -> Boolean.parseBoolean(
System.getProperty("java.net.preferIPv6Addresses")));
if (!preferIPv4Stack && !hasIPv4 && !hasIPv6) {
throw new AssertionError("IPv4 and IPv6 both not available and java.net.preferIPv4Stack is not true");
}
}
! private static boolean hasAddress(InetAddress address) {
! try (Socket socket = new Socket()) {
! socket.bind(new InetSocketAddress(address, 0));
return true;
! } catch (SocketException se) {
return false;
- } catch (IOException e) {
- throw new UncheckedIOException(e);
}
}
private static <T> T runPrivilegedAction(Callable<T> callable) {
try {
private static final boolean hasIPv6;
private static final boolean preferIPv4Stack;
private static final boolean preferIPv6Addresses;
static {
! hasIPv4 = runPrivilegedAction(() -> isSupported(Inet4Address.class));
! hasIPv6 = runPrivilegedAction(() -> isSupported(Inet6Address.class));
preferIPv4Stack = runPrivilegedAction(() -> Boolean.parseBoolean(
System.getProperty("java.net.preferIPv4Stack")));
preferIPv6Addresses = runPrivilegedAction(() -> Boolean.parseBoolean(
System.getProperty("java.net.preferIPv6Addresses")));
if (!preferIPv4Stack && !hasIPv4 && !hasIPv6) {
throw new AssertionError("IPv4 and IPv6 both not available and java.net.preferIPv4Stack is not true");
}
}
! private static boolean isSupported(Class<? extends InetAddress> addressType) {
! ProtocolFamily family = addressType == Inet4Address.class ?
! StandardProtocolFamily.INET : StandardProtocolFamily.INET6;
+ try (var sc = SocketChannel.open(family)) {
return true;
! } catch (IOException | UnsupportedOperationException ex) {
return false;
}
}
private static <T> T runPrivilegedAction(Callable<T> callable) {
try {
< prev index next >