Use OpenJdk implementation of java.net.*
- Add FileURLConnection.
- NetworkUtilities : Update field names in JNI.
- Suppress a few libcore tests that rely on internal implementation
details.
- Remove code that loads the net library (not needed on android).
- DatagramSocket : Add setNetworkInterface method.
- HttpCookie : make parse & field public
- Inet4Address / Inet6Address : Add getAddressInternal.
- InetAddress : Add methods required by frameworks/base, particularly
those required to deal with net-ids and scope ids.
- URI : Add UriCodec static members for AUTHORITY_ENCODER and friends.
- URL : Add toUriLenient
- URLStreamHandler : Add a toExternalForm variant that optionally
escapes illegal chars.
- Inet4AddressImpl.c : Unconditionally define HAS_GLIBC_GETHOSTBY_R
Change-Id: Ic51f863941f5d954ed6cf86309cc610e711d54bd
diff --git a/luni/src/main/java/java/net/InetUnixAddress.java b/luni/src/main/java/java/net/InetUnixAddress.java
index 51236e2..9f777d1 100644
--- a/luni/src/main/java/java/net/InetUnixAddress.java
+++ b/luni/src/main/java/java/net/InetUnixAddress.java
@@ -25,6 +25,7 @@
* @hide
*/
public final class InetUnixAddress extends InetAddress {
+ private byte[] address;
/**
* Constructs an AF_UNIX InetAddress for the given path.
*/
@@ -36,13 +37,30 @@
* Constructs an AF_UNIX InetAddress for the given path.
*/
public InetUnixAddress(byte[] path) {
- super(AF_UNIX, path, null);
+ super();
+ holder().hostName = null;
+ holder().family = AF_UNIX;
+ address = path.clone();
}
/**
* Returns a string form of this InetAddress.
*/
@Override public String toString() {
- return "InetUnixAddress[" + new String(ipaddress, StandardCharsets.UTF_8) + "]";
+ return "InetUnixAddress[" + new String(address, StandardCharsets.UTF_8) + "]";
+ }
+
+ @Override
+ public byte[] getAddress() {
+ return address.clone();
+ }
+
+ public byte[] getAddressInternal() {
+ return address;
+ }
+
+ @Override
+ public String getHostAddress() {
+ return new String(address, StandardCharsets.UTF_8);
}
}
diff --git a/luni/src/main/native/NetworkUtilities.cpp b/luni/src/main/native/NetworkUtilities.cpp
index 7215306..ee52fd6 100644
--- a/luni/src/main/native/NetworkUtilities.cpp
+++ b/luni/src/main/native/NetworkUtilities.cpp
@@ -109,9 +109,12 @@
return false;
}
+ // Get holder.
+ static jfieldID holderFid = env->GetFieldID(JniConstants::inetAddressClass, "holder", "Ljava/net/InetAddress$InetAddressHolder;");
+ ScopedLocalRef<jobject> holder(env, env->GetObjectField(inetAddress, holderFid));
// Get the address family.
- static jfieldID familyFid = env->GetFieldID(JniConstants::inetAddressClass, "family", "I");
- ss.ss_family = env->GetIntField(inetAddress, familyFid);
+ static jfieldID familyFid = env->GetFieldID(JniConstants::inetAddressHolderClass, "family", "I");
+ ss.ss_family = env->GetIntField(holder.get(), familyFid);
if (ss.ss_family == AF_UNSPEC) {
sa_len = sizeof(ss.ss_family);
return true; // Job done!
@@ -125,8 +128,8 @@
}
// Get the byte array that stores the IP address bytes in the InetAddress.
- static jfieldID bytesFid = env->GetFieldID(JniConstants::inetAddressClass, "ipaddress", "[B");
- ScopedLocalRef<jbyteArray> addressBytes(env, reinterpret_cast<jbyteArray>(env->GetObjectField(inetAddress, bytesFid)));
+ static jmethodID bytesMid = env->GetMethodID(JniConstants::inetAddressClass, "getAddressInternal", "()[B");
+ ScopedLocalRef<jbyteArray> addressBytes(env, reinterpret_cast<jbyteArray>(env->CallObjectMethod(inetAddress, bytesMid)));
if (addressBytes.get() == NULL) {
jniThrowNullPointerException(env, NULL);
return false;
diff --git a/luni/src/test/java/libcore/io/OsTest.java b/luni/src/test/java/libcore/io/OsTest.java
index a0d1e5a..8ed15ba 100644
--- a/luni/src/test/java/libcore/io/OsTest.java
+++ b/luni/src/test/java/libcore/io/OsTest.java
@@ -40,7 +40,7 @@
fis.close();
ServerSocket s = new ServerSocket();
- assertTrue(S_ISSOCK(Libcore.os.fstat(s.getImpl$().getFD$()).st_mode));
+ assertTrue(S_ISSOCK(Libcore.os.fstat(s.getImpl().getFileDescriptor()).st_mode));
s.close();
}
diff --git a/luni/src/test/java/libcore/java/io/FileDescriptorTest.java b/luni/src/test/java/libcore/java/io/FileDescriptorTest.java
index 39472df..d035957 100644
--- a/luni/src/test/java/libcore/java/io/FileDescriptorTest.java
+++ b/luni/src/test/java/libcore/java/io/FileDescriptorTest.java
@@ -37,7 +37,8 @@
fis.close();
ServerSocket s = new ServerSocket();
- assertTrue(s.getImpl$().getFD$().isSocket());
+ // assertTrue(s.getImpl$().getFD$().isSocket());
+ assertTrue(false); // FIXME(haaawk): uncomment code above and remove this one
s.close();
}
}
diff --git a/luni/src/test/java/libcore/java/net/NetworkInterfaceTest.java b/luni/src/test/java/libcore/java/net/NetworkInterfaceTest.java
index 116eb3f..ef3a228 100644
--- a/luni/src/test/java/libcore/java/net/NetworkInterfaceTest.java
+++ b/luni/src/test/java/libcore/java/net/NetworkInterfaceTest.java
@@ -45,6 +45,7 @@
assertEquals(expected, actual);
}
+ /*
// http://code.google.com/p/android/issues/detail?id=34022
public void test_collectIpv6Addresses_3digitInterfaceIndex() throws Exception {
String lines[] = new String[] {
@@ -72,7 +73,7 @@
ifAddresses, lines);
assertEquals(1, addresses.size());
assertEquals(1, ifAddresses.size());
- }
+ }*/
public void testInterfaceProperties() throws Exception {
for (NetworkInterface nif : Collections.list(NetworkInterface.getNetworkInterfaces())) {
diff --git a/luni/src/test/java/libcore/javax/net/ssl/DefaultHostnameVerifierTest.java b/luni/src/test/java/libcore/javax/net/ssl/DefaultHostnameVerifierTest.java
index feecebe..688b44b 100644
--- a/luni/src/test/java/libcore/javax/net/ssl/DefaultHostnameVerifierTest.java
+++ b/luni/src/test/java/libcore/javax/net/ssl/DefaultHostnameVerifierTest.java
@@ -30,12 +30,12 @@
import java.util.LinkedList;
import java.util.List;
import java.util.Set;
-import javax.net.ssl.DefaultHostnameVerifier;
+//import javax.net.ssl.DefaultHostnameVerifier;
import javax.security.auth.x500.X500Principal;
import junit.framework.TestCase;
public final class DefaultHostnameVerifierTest extends TestCase {
- private static final int ALT_UNKNOWN = 0;
+/* private static final int ALT_UNKNOWN = 0;
private static final int ALT_DNS_NAME = 2;
private static final int ALT_IPA_NAME = 7;
@@ -45,13 +45,13 @@
assertTrue(verifier.verify("imap.g.com", new StubX509Certificate("cn=imap.g.com")));
assertFalse(verifier.verify("imap.g.com", new StubX509Certificate("cn=imap2.g.com")));
assertFalse(verifier.verify("imap.g.com", new StubX509Certificate("cn=sub.imap.g.com")));
- }
+ }*/
/**
* If a subjectAltName extension of type ALT_DNS_NAME is present, that MUST
* be used as the identity and the CN should be ignored.
*/
- public void testSubjectAltNameAndCn() {
+/* public void testSubjectAltNameAndCn() {
assertFalse(verifier.verify("imap.g.com", new StubX509Certificate("")
.addSubjectAlternativeName(ALT_DNS_NAME, "a.y.com")));
assertFalse(verifier.verify("imap.g.com", new StubX509Certificate("cn=imap.g.com")
@@ -439,5 +439,5 @@
@Override public boolean hasUnsupportedCriticalExtension() {
throw new UnsupportedOperationException();
}
- }
+ }*/
}
diff --git a/ojluni/src/main/java/java/io/InterruptedIOException.java b/ojluni/src/main/java/java/io/InterruptedIOException.java
index c83832a..a68e12a 100755
--- a/ojluni/src/main/java/java/io/InterruptedIOException.java
+++ b/ojluni/src/main/java/java/io/InterruptedIOException.java
@@ -72,6 +72,12 @@
*/
public int bytesTransferred = 0;
+ /* @hide */
+ // Android-added.
+ public InterruptedIOException(Throwable cause) {
+ super(cause);
+ }
+
/**
* Constructs a new instance with given detail message and cause.
*
diff --git a/ojluni/src/main/java/java/net/AbstractPlainDatagramSocketImpl.java b/ojluni/src/main/java/java/net/AbstractPlainDatagramSocketImpl.java
index b7f0f2f..57394f4 100755
--- a/ojluni/src/main/java/java/net/AbstractPlainDatagramSocketImpl.java
+++ b/ojluni/src/main/java/java/net/AbstractPlainDatagramSocketImpl.java
@@ -65,14 +65,6 @@
private final static boolean connectDisabled = os.contains("OS X");
/**
- * Load net library into runtime.
- */
- static {
- java.security.AccessController.doPrivileged(
- new sun.security.action.LoadLibraryAction("net"));
- }
-
- /**
* Creates a datagram socket
*/
protected synchronized void create() throws SocketException {
diff --git a/ojluni/src/main/java/java/net/AbstractPlainSocketImpl.java b/ojluni/src/main/java/java/net/AbstractPlainSocketImpl.java
index c6a38ad..2ad70b5 100755
--- a/ojluni/src/main/java/java/net/AbstractPlainSocketImpl.java
+++ b/ojluni/src/main/java/java/net/AbstractPlainSocketImpl.java
@@ -74,14 +74,6 @@
protected boolean stream;
/**
- * Load net library into runtime.
- */
- static {
- java.security.AccessController.doPrivileged(
- new sun.security.action.LoadLibraryAction("net"));
- }
-
- /**
* Creates a socket with a boolean that specifies whether this
* is a stream socket (true) or an unconnected UDP socket (false).
*/
diff --git a/ojluni/src/main/java/java/net/BindException.java b/ojluni/src/main/java/java/net/BindException.java
index f893909..b792013 100755
--- a/ojluni/src/main/java/java/net/BindException.java
+++ b/ojluni/src/main/java/java/net/BindException.java
@@ -51,4 +51,9 @@
* Construct a new BindException with no detailed message.
*/
public BindException() {}
+
+ /* @hide */
+ public BindException(String msg, Throwable cause) {
+ super(msg, cause);
+ }
}
diff --git a/ojluni/src/main/java/java/net/ConnectException.java b/ojluni/src/main/java/java/net/ConnectException.java
index 7e41220..47e77fe 100755
--- a/ojluni/src/main/java/java/net/ConnectException.java
+++ b/ojluni/src/main/java/java/net/ConnectException.java
@@ -51,4 +51,9 @@
* Construct a new ConnectException with no detailed message.
*/
public ConnectException() {}
+
+ /* @hide */
+ public ConnectException(String msg, Throwable cause) {
+ super(msg, cause);
+ }
}
diff --git a/ojluni/src/main/java/java/net/DatagramPacket.java b/ojluni/src/main/java/java/net/DatagramPacket.java
index 195ee86..a69d383 100755
--- a/ojluni/src/main/java/java/net/DatagramPacket.java
+++ b/ojluni/src/main/java/java/net/DatagramPacket.java
@@ -46,8 +46,6 @@
* Perform class initialization
*/
static {
- java.security.AccessController.doPrivileged(
- new sun.security.action.LoadLibraryAction("net"));
init();
}
@@ -280,6 +278,16 @@
address = iaddr;
}
+ // ----- BEGIN android -----
+ /**
+ * Sets 'length' without changing 'userSuppliedLength', after receiving a packet.
+ * @hide for IoBridge
+ */
+ public void setReceivedLength(int length) {
+ this.length = length;
+ }
+ // ----- END android -----
+
/**
* Sets the port number on the remote host to which this datagram
* is being sent.
diff --git a/ojluni/src/main/java/java/net/DatagramSocket.java b/ojluni/src/main/java/java/net/DatagramSocket.java
index 62493a8..72d8937 100755
--- a/ojluni/src/main/java/java/net/DatagramSocket.java
+++ b/ojluni/src/main/java/java/net/DatagramSocket.java
@@ -31,6 +31,9 @@
import java.nio.channels.DatagramChannel;
import java.security.AccessController;
import java.security.PrivilegedExceptionAction;
+import android.system.ErrnoException;
+import libcore.io.Libcore;
+import static android.system.OsConstants.*;
/**
* This class represents a socket for sending and receiving datagram packets.
@@ -1265,4 +1268,29 @@
}
factory = fac;
}
+
+ /* @hide */
+ public final FileDescriptor getFileDescriptor$() {
+ return impl.fd;
+ }
+
+ /**
+ * Sets the network interface used by this socket. Any packets sent
+ * via this socket are transmitted via the specified interface. Any
+ * packets received by this socket will come from the specified
+ * interface. Broadcast datagrams received on this interface will
+ * be processed by this socket. This corresponds to Linux's SO_BINDTODEVICE.
+ *
+ * @hide used by GoogleTV for DHCP
+ */
+ public void setNetworkInterface(NetworkInterface netInterface) throws SocketException {
+ if (netInterface == null) {
+ throw new NullPointerException("netInterface == null");
+ }
+ try {
+ Libcore.os.setsockoptIfreq(impl.fd, SOL_SOCKET, SO_BINDTODEVICE, netInterface.getName());
+ } catch (ErrnoException errnoException) {
+ throw errnoException.rethrowAsSocketException();
+ }
+ }
}
diff --git a/ojluni/src/main/java/java/net/HttpCookie.java b/ojluni/src/main/java/java/net/HttpCookie.java
index a1a3e8e..e7e605f 100755
--- a/ojluni/src/main/java/java/net/HttpCookie.java
+++ b/ojluni/src/main/java/java/net/HttpCookie.java
@@ -82,9 +82,13 @@
private boolean httpOnly; // HttpOnly ... i.e. not accessible to scripts
private int version = 1; // Version=1 ... RFC 2965 style
- // The original header this cookie was consructed from, if it was
- // constructed by parsing a header, otherwise null.
- private final String header;
+ /**
+ * The original header this cookie was consructed from, if it was
+ * constructed by parsing a header, otherwise null.
+ *
+ * @hide
+ */
+ public final String header;
//
// Hold the creation time (in seconds) of the http cookie for later
@@ -199,8 +203,10 @@
// create the cookie, in the cookie itself. This can be useful for filtering
// Set-Cookie[2] headers, using the internal parsing logic defined in this
// class.
- private static List<HttpCookie> parse(String header, boolean retainHeader) {
-
+ /*
+ * @hide
+ */
+ public static List<HttpCookie> parse(String header, boolean retainHeader) {
int version = guessCookieVersion(header);
// if header start with set-cookie or set-cookie2, strip it off
@@ -1068,20 +1074,6 @@
}
}
- static {
- sun.misc.SharedSecrets.setJavaNetHttpCookieAccess(
- new sun.misc.JavaNetHttpCookieAccess() {
- public List<HttpCookie> parse(String header) {
- return HttpCookie.parse(header, true);
- }
-
- public String header(HttpCookie cookie) {
- return cookie.header;
- }
- }
- );
- }
-
/*
* Returns the original header this cookie was consructed from, if it was
* constructed by parsing a header, otherwise null.
diff --git a/ojluni/src/main/java/java/net/Inet4Address.java b/ojluni/src/main/java/java/net/Inet4Address.java
index 06889d1..6ee7709 100755
--- a/ojluni/src/main/java/java/net/Inet4Address.java
+++ b/ojluni/src/main/java/java/net/Inet4Address.java
@@ -93,6 +93,17 @@
* serialized */
private static final long serialVersionUID = 3286316764910316507L;
+ /* @hide */
+ public static final InetAddress ANY = new Inet4Address(null, new byte[] { 0, 0, 0, 0 });
+
+ /* @hide */
+ public static final InetAddress ALL =
+ new Inet4Address(null, new byte[] { (byte) 255, (byte) 255,
+ (byte) 255, (byte) 255 });
+ /* @hide */
+ public static final InetAddress LOOPBACK =
+ new Inet4Address("localhost", new byte[] { 127, 0, 0, 1 });
+
/*
* Perform initializations.
*/
@@ -319,6 +330,10 @@
return addr;
}
+ public byte[] getAddressInternal() {
+ return getAddress();
+ }
+
/**
* Returns the IP address string in textual presentation form.
*
diff --git a/ojluni/src/main/java/java/net/Inet6Address.java b/ojluni/src/main/java/java/net/Inet6Address.java
index b5a4ced..b470955 100755
--- a/ojluni/src/main/java/java/net/Inet6Address.java
+++ b/ojluni/src/main/java/java/net/Inet6Address.java
@@ -166,6 +166,15 @@
class Inet6Address extends InetAddress {
final static int INADDRSZ = 16;
+ /* @hide */
+ public static final InetAddress ANY =
+ new Inet6Address(null, new byte[] {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0);
+
+ /* @hide */
+ public static final InetAddress LOOPBACK = new Inet6Address("localhost",
+ new byte[] {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, 0);
+
+
/*
* cached scope_id - for link-local address use only.
*/
@@ -609,6 +618,10 @@
return ipaddress.clone();
}
+ public byte[] getAddressInternal() {
+ return ipaddress;
+ }
+
/**
* Returns the numeric scopeId, if this instance is associated with
* an interface. If no scoped_id is set, the returned value is zero.
diff --git a/ojluni/src/main/java/java/net/InetAddress.java b/ojluni/src/main/java/java/net/InetAddress.java
index 3ea28e4..f057269 100755
--- a/ojluni/src/main/java/java/net/InetAddress.java
+++ b/ojluni/src/main/java/java/net/InetAddress.java
@@ -45,6 +45,12 @@
import sun.net.util.IPAddressUtil;
import sun.misc.Service;
import sun.net.spi.nameservice.*;
+import android.system.ErrnoException;
+import android.system.GaiException;
+import android.system.StructAddrinfo;
+import dalvik.system.BlockGuard;
+import libcore.io.Libcore;
+import static android.system.OsConstants.*;
/**
* This class represents an Internet Protocol (IP) address.
@@ -260,7 +266,6 @@
static {
preferIPv6Address = java.security.AccessController.doPrivileged(
new GetBooleanAction("java.net.preferIPv6Addresses")).booleanValue();
- AccessController.doPrivileged(new LoadLibraryAction("net"));
init();
}
@@ -637,6 +642,11 @@
return null;
}
+ /* @hide */
+ public byte[] getAddressInternal() {
+ return null;
+ }
+
/**
* Returns the IP address string in textual presentation.
*
@@ -1007,6 +1017,29 @@
throw new UnknownHostException("addr is of illegal length");
}
+ private static InetAddress getByAddress(String host, byte[] addr, int scopeId)
+ throws UnknownHostException {
+ if (host != null && host.length() > 0 && host.charAt(0) == '[') {
+ if (host.charAt(host.length()-1) == ']') {
+ host = host.substring(1, host.length() -1);
+ }
+ }
+ if (addr != null) {
+ if (addr.length == Inet4Address.INADDRSZ) {
+ return new Inet4Address(host, addr);
+ } else if (addr.length == Inet6Address.INADDRSZ) {
+ byte[] newAddr
+ = IPAddressUtil.convertFromIPv4MappedAddress(addr);
+ if (newAddr != null) {
+ return new Inet4Address(host, newAddr);
+ } else {
+ return new Inet6Address(host, addr, scopeId);
+ }
+ }
+ }
+ throw new UnknownHostException("addr is of illegal length");
+ }
+
/**
* Determines the IP address of a host, given the host's name.
@@ -1596,6 +1629,166 @@
s.writeFields();
s.flush();
}
+
+ private static final int NETID_UNSET = 0;
+
+ /**
+ * Returns true if the string is a valid numeric IPv4 or IPv6 address (such as "192.168.0.1").
+ * This copes with all forms of address that Java supports, detailed in the {@link InetAddress}
+ * class documentation.
+ *
+ * @hide used by frameworks/base to ensure that a getAllByName won't cause a DNS lookup.
+ */
+ public static boolean isNumeric(String address) {
+ InetAddress inetAddress = parseNumericAddressNoThrow(address);
+ return inetAddress != null && disallowDeprecatedFormats(address, inetAddress) != null;
+ }
+
+ private static InetAddress parseNumericAddressNoThrow(String address) {
+ // Accept IPv6 addresses (only) in square brackets for compatibility.
+ if (address.startsWith("[") && address.endsWith("]") && address.indexOf(':') != -1) {
+ address = address.substring(1, address.length() - 1);
+ }
+ StructAddrinfo hints = new StructAddrinfo();
+ hints.ai_flags = AI_NUMERICHOST;
+ InetAddress[] addresses = null;
+ try {
+ addresses = Libcore.os.android_getaddrinfo(address, hints, NETID_UNSET);
+ } catch (GaiException ignored) {
+ }
+ return (addresses != null) ? addresses[0] : null;
+ }
+
+ private static InetAddress disallowDeprecatedFormats(String address, InetAddress inetAddress) {
+ // Only IPv4 addresses are problematic.
+ if (!(inetAddress instanceof Inet4Address) || address.indexOf(':') != -1) {
+ return inetAddress;
+ }
+ // If inet_pton(3) can't parse it, it must have been a deprecated format.
+ // We need to return inet_pton(3)'s result to ensure that numbers assumed to be octal
+ // by getaddrinfo(3) are reinterpreted by inet_pton(3) as decimal.
+ return Libcore.os.inet_pton(AF_INET, address);
+ }
+
+ /**
+ * Returns an InetAddress corresponding to the given numeric address (such
+ * as {@code "192.168.0.1"} or {@code "2001:4860:800d::68"}).
+ * This method will never do a DNS lookup. Non-numeric addresses are errors.
+ *
+ * @hide used by frameworks/base's NetworkUtils.numericToInetAddress
+ * @throws IllegalArgumentException if {@code numericAddress} is not a numeric address
+ */
+ public static InetAddress parseNumericAddress(String numericAddress) {
+ if (numericAddress == null || numericAddress.isEmpty()) {
+ return Inet6Address.LOOPBACK;
+ }
+ InetAddress result = parseNumericAddressNoThrow(numericAddress);
+ result = disallowDeprecatedFormats(numericAddress, result);
+ if (result == null) {
+ throw new IllegalArgumentException("Not a numeric address: " + numericAddress);
+ }
+ return result;
+ }
+
+ /* @hide */
+ public static void clearDnsCache() {
+ System.logW("OJ: DNS cache clear requested, not implemented");
+ }
+
+ /**
+ * Operates identically to {@code getByName} except host resolution is
+ * performed on the network designated by {@code netId}.
+ *
+ * @param host
+ * the hostName to be resolved to an address or {@code null}.
+ * @param netId the network to use for host resolution.
+ * @return the {@code InetAddress} instance representing the host.
+ * @throws UnknownHostException if the address lookup fails.
+ * @hide internal use only
+ */
+ public static InetAddress getByNameOnNet(String host, int netId) throws UnknownHostException {
+ return getAllByNameImpl(host, netId)[0];
+ }
+
+ /**
+ * Operates identically to {@code getAllByName} except host resolution is
+ * performed on the network designated by {@code netId}.
+ *
+ * @param host the hostname or literal IP string to be resolved.
+ * @param netId the network to use for host resolution.
+ * @return the array of addresses associated with the specified host.
+ * @throws UnknownHostException if the address lookup fails.
+ * @hide internal use only
+ */
+ public static InetAddress[] getAllByNameOnNet(String host, int netId) throws UnknownHostException {
+ return getAllByNameImpl(host, netId).clone();
+ }
+
+ /**
+ * Returns the InetAddresses for {@code host} on network {@code netId}. The
+ * returned array is shared and must be cloned before it is returned to
+ * application code.
+ */
+ private static InetAddress[] getAllByNameImpl(String host, int netId) throws UnknownHostException {
+ if (host == null || host.isEmpty()) {
+ return loopbackAddresses();
+ }
+
+ // Is it a numeric address?
+ InetAddress result = parseNumericAddressNoThrow(host);
+ if (result != null) {
+ result = disallowDeprecatedFormats(host, result);
+ if (result == null) {
+ throw new UnknownHostException("Deprecated IPv4 address format: " + host);
+ }
+ return new InetAddress[] { result };
+ }
+
+ return lookupHostByName(host, netId).clone();
+ }
+
+ /**
+ * Resolves a hostname to its IP addresses using a cache.
+ *
+ * @param host the hostname to resolve.
+ * @param netId the network to perform resolution upon.
+ * @return the IP addresses of the host.
+ */
+ private static InetAddress[] lookupHostByName(String host, int netId)
+ throws UnknownHostException {
+ BlockGuard.getThreadPolicy().onNetwork();
+ try {
+ StructAddrinfo hints = new StructAddrinfo();
+ hints.ai_flags = AI_ADDRCONFIG;
+ hints.ai_family = AF_UNSPEC;
+ // If we don't specify a socket type, every address will appear twice, once
+ // for SOCK_STREAM and one for SOCK_DGRAM. Since we do not return the family
+ // anyway, just pick one.
+ hints.ai_socktype = SOCK_STREAM;
+ InetAddress[] addresses = Libcore.os.android_getaddrinfo(host, hints, netId);
+ // TODO: should getaddrinfo set the hostname of the InetAddresses it returns?
+ for (InetAddress address : addresses) {
+ address.holder().hostName = host;
+ }
+ return addresses;
+ } catch (GaiException gaiException) {
+ // If the failure appears to have been a lack of INTERNET permission, throw a clear
+ // SecurityException to aid in debugging this common mistake.
+ // http://code.google.com/p/android/issues/detail?id=15722
+ if (gaiException.getCause() instanceof ErrnoException) {
+ if (((ErrnoException) gaiException.getCause()).errno == EACCES) {
+ throw new SecurityException("Permission denied (missing INTERNET permission?)", gaiException);
+ }
+ }
+ // Otherwise, throw an UnknownHostException.
+ String detailMessage = "Unable to resolve host \"" + host + "\": " + Libcore.os.gai_strerror(gaiException.error);
+ throw gaiException.rethrowAsUnknownHostException(detailMessage);
+ }
+ }
+
+ private static InetAddress[] loopbackAddresses() {
+ return new InetAddress[] { Inet6Address.LOOPBACK, Inet4Address.LOOPBACK };
+ }
}
/*
diff --git a/ojluni/src/main/java/java/net/InetSocketAddress.java b/ojluni/src/main/java/java/net/InetSocketAddress.java
index 4ad9504..ad5e2dc 100755
--- a/ojluni/src/main/java/java/net/InetSocketAddress.java
+++ b/ojluni/src/main/java/java/net/InetSocketAddress.java
@@ -151,6 +151,14 @@
}
/**
+ * @hide internal use only
+ */
+ public InetSocketAddress() {
+ // These will be filled in the native implementation of recvfrom.
+ holder = null;
+ }
+
+ /**
* Creates a socket address where the IP address is the wildcard address
* and the port number a specified value.
* <p>
diff --git a/ojluni/src/main/java/java/net/NetworkInterface.java b/ojluni/src/main/java/java/net/NetworkInterface.java
index 6314d15..b641b5c 100755
--- a/ojluni/src/main/java/java/net/NetworkInterface.java
+++ b/ojluni/src/main/java/java/net/NetworkInterface.java
@@ -53,7 +53,6 @@
private static final int defaultIndex; /* index of defaultInterface */
static {
- AccessController.doPrivileged(new LoadLibraryAction("net"));
init();
defaultInterface = DefaultInterface.getDefault();
if (defaultInterface != null) {
diff --git a/ojluni/src/main/java/java/net/PortUnreachableException.java b/ojluni/src/main/java/java/net/PortUnreachableException.java
index c21345f..01ea241 100755
--- a/ojluni/src/main/java/java/net/PortUnreachableException.java
+++ b/ojluni/src/main/java/java/net/PortUnreachableException.java
@@ -49,4 +49,9 @@
* detailed message.
*/
public PortUnreachableException() {}
+
+ /* @hide */
+ public PortUnreachableException(String msg, Throwable cause) {
+ super(msg, cause);
+ }
}
diff --git a/ojluni/src/main/java/java/net/ProtocolException.java b/ojluni/src/main/java/java/net/ProtocolException.java
index 74ff4f1..a1fe91e 100755
--- a/ojluni/src/main/java/java/net/ProtocolException.java
+++ b/ojluni/src/main/java/java/net/ProtocolException.java
@@ -53,4 +53,9 @@
*/
public ProtocolException() {
}
+
+ /* @hide */
+ public ProtocolException(String msg, Throwable cause) {
+ super(msg, cause);
+ }
}
diff --git a/ojluni/src/main/java/java/net/ServerSocket.java b/ojluni/src/main/java/java/net/ServerSocket.java
index 1d88ab7..4bf2a69 100755
--- a/ojluni/src/main/java/java/net/ServerSocket.java
+++ b/ojluni/src/main/java/java/net/ServerSocket.java
@@ -251,8 +251,9 @@
* @return the <code>SocketImpl</code> attached to that ServerSocket.
* @throws SocketException if creation fails.
* @since 1.4
+ * @hide
*/
- SocketImpl getImpl() throws SocketException {
+ public SocketImpl getImpl() throws SocketException {
if (!created)
createImpl();
return impl;
diff --git a/ojluni/src/main/java/java/net/Socket.java b/ojluni/src/main/java/java/net/Socket.java
index 575d96e..3a9f76c 100755
--- a/ojluni/src/main/java/java/net/Socket.java
+++ b/ojluni/src/main/java/java/net/Socket.java
@@ -25,6 +25,7 @@
package java.net;
+import java.io.FileDescriptor;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.IOException;
@@ -1668,4 +1669,11 @@
{
/* Not implemented yet */
}
+
+ /**
+ * @hide internal use only
+ */
+ public FileDescriptor getFileDescriptor$() {
+ return impl.getFileDescriptor();
+ }
}
diff --git a/ojluni/src/main/java/java/net/SocketException.java b/ojluni/src/main/java/java/net/SocketException.java
index eae84d9..fbbe4f8 100755
--- a/ojluni/src/main/java/java/net/SocketException.java
+++ b/ojluni/src/main/java/java/net/SocketException.java
@@ -52,4 +52,14 @@
*/
public SocketException() {
}
+
+ /* @hide */
+ public SocketException(Throwable cause) {
+ super(cause);
+ }
+
+ /* @hide */
+ public SocketException(String msg, Throwable cause) {
+ super(msg, cause);
+ }
}
diff --git a/ojluni/src/main/java/java/net/SocketImpl.java b/ojluni/src/main/java/java/net/SocketImpl.java
index 495b18f..921f6ce 100755
--- a/ojluni/src/main/java/java/net/SocketImpl.java
+++ b/ojluni/src/main/java/java/net/SocketImpl.java
@@ -221,7 +221,7 @@
* @return the value of this socket's <code>fd</code> field.
* @see java.net.SocketImpl#fd
*/
- protected FileDescriptor getFileDescriptor() {
+ public FileDescriptor getFileDescriptor() {
return fd;
}
diff --git a/ojluni/src/main/java/java/net/SocketTimeoutException.java b/ojluni/src/main/java/java/net/SocketTimeoutException.java
index 7283f32..9c1e6ba 100755
--- a/ojluni/src/main/java/java/net/SocketTimeoutException.java
+++ b/ojluni/src/main/java/java/net/SocketTimeoutException.java
@@ -47,4 +47,14 @@
* Construct a new SocketTimeoutException with no detailed message.
*/
public SocketTimeoutException() {}
+
+ /* @hide */
+ public SocketTimeoutException(Throwable cause) {
+ super(cause);
+ }
+
+ /* @hide */
+ public SocketTimeoutException(String msg, Throwable cause) {
+ super(msg, cause);
+ }
}
diff --git a/ojluni/src/main/java/java/net/URI.java b/ojluni/src/main/java/java/net/URI.java
index 6997a42..78a7be0 100755
--- a/ojluni/src/main/java/java/net/URI.java
+++ b/ojluni/src/main/java/java/net/URI.java
@@ -42,6 +42,7 @@
import java.lang.Character; // for javadoc
import java.lang.NullPointerException; // for javadoc
+import libcore.net.UriCodec;
/**
@@ -471,6 +472,39 @@
public final class URI
implements Comparable<URI>, Serializable
{
+ static final String UNRESERVED = "_-!.~\'()*";
+ static final String PUNCTUATION = ",;:$&+=";
+ static final UriCodec AUTHORITY_ENCODER = new PartEncoder("@[]");
+
+ /** for java.net.URL, which foolishly combines these two parts */
+ static final UriCodec FILE_AND_QUERY_ENCODER = new PartEncoder("/@?");
+
+ /** for query, fragment, and scheme-specific part */
+ static final UriCodec ALL_LEGAL_ENCODER = new PartEncoder("?/[]@");
+
+ /**
+ * Encodes the unescaped characters of {@code s} that are not permitted.
+ * Permitted characters are:
+ * <ul>
+ * <li>Unreserved characters in <a href="http://www.ietf.org/rfc/rfc2396.txt">RFC 2396</a>.
+ * <li>{@code extraOkayChars},
+ * <li>non-ASCII, non-control, non-whitespace characters
+ * </ul>
+ */
+ private static class PartEncoder extends UriCodec {
+ private final String extraLegalCharacters;
+
+ PartEncoder(String extraLegalCharacters) {
+ this.extraLegalCharacters = extraLegalCharacters;
+ }
+
+ @Override protected boolean isRetained(char c) {
+ return UNRESERVED.indexOf(c) != -1
+ || PUNCTUATION.indexOf(c) != -1
+ || extraLegalCharacters.indexOf(c) != -1
+ || (c > 127 && !Character.isSpaceChar(c) && !Character.isISOControl(c));
+ }
+ }
// Note: Comments containing the word "ASSERT" indicate places where a
// throw of an InternalError should be replaced by an appropriate assertion
diff --git a/ojluni/src/main/java/java/net/URL.java b/ojluni/src/main/java/java/net/URL.java
index 38d4e53..52aae1a 100755
--- a/ojluni/src/main/java/java/net/URL.java
+++ b/ojluni/src/main/java/java/net/URL.java
@@ -1304,6 +1304,14 @@
path = file;
}
}
+
+ public URI toURILenient() throws URISyntaxException {
+ URLStreamHandler handler = getURLStreamHandler(protocol);
+ if (handler == null) {
+ throw new IllegalStateException(protocol);
+ }
+ return new URI(handler.toExternalForm(this, true));
+ }
}
class Parts {
diff --git a/ojluni/src/main/java/java/net/URLClassLoader.java b/ojluni/src/main/java/java/net/URLClassLoader.java
index 4f28be6..f473b8e 100755
--- a/ojluni/src/main/java/java/net/URLClassLoader.java
+++ b/ojluni/src/main/java/java/net/URLClassLoader.java
@@ -438,14 +438,12 @@
// Use (direct) ByteBuffer:
CodeSigner[] signers = res.getCodeSigners();
CodeSource cs = new CodeSource(url, signers);
- sun.misc.PerfCounter.getReadClassBytesTime().addElapsedTimeFrom(t0);
return defineClass(name, bb, cs);
} else {
byte[] b = res.getBytes();
// must read certificates AFTER reading bytes.
CodeSigner[] signers = res.getCodeSigners();
CodeSource cs = new CodeSource(url, signers);
- sun.misc.PerfCounter.getReadClassBytesTime().addElapsedTimeFrom(t0);
return defineClass(name, b, 0, b.length, cs);
}
}
@@ -748,13 +746,13 @@
}
static {
- sun.misc.SharedSecrets.setJavaNetAccess (
+ /*sun.misc.SharedSecrets.setJavaNetAccess (
new sun.misc.JavaNetAccess() {
public URLClassPath getURLClassPath (URLClassLoader u) {
return u.ucp;
}
}
- );
+ );*/
ClassLoader.registerAsParallelCapable();
}
}
diff --git a/ojluni/src/main/java/java/net/URLStreamHandler.java b/ojluni/src/main/java/java/net/URLStreamHandler.java
index c98588a..1143130 100755
--- a/ojluni/src/main/java/java/net/URLStreamHandler.java
+++ b/ojluni/src/main/java/java/net/URLStreamHandler.java
@@ -473,7 +473,10 @@
* @return a string representation of the <code>URL</code> argument.
*/
protected String toExternalForm(URL u) {
+ return toExternalForm(u, false);
+ }
+ String toExternalForm(URL u, boolean escapeIllegalCharacters) {
// pre-compute length of StringBuffer
int len = u.getProtocol().length() + 1;
if (u.getAuthority() != null && u.getAuthority().length() > 0)
@@ -487,23 +490,32 @@
if (u.getRef() != null)
len += 1 + u.getRef().length();
- StringBuffer result = new StringBuffer(len);
+ StringBuilder result = new StringBuilder(len);
result.append(u.getProtocol());
result.append(":");
if (u.getAuthority() != null && u.getAuthority().length() > 0) {
result.append("//");
- result.append(u.getAuthority());
+ if (escapeIllegalCharacters) {
+ URI.AUTHORITY_ENCODER.appendPartiallyEncoded(result, u.getAuthority());
+ } else {
+ result.append(u.getAuthority());
+ }
}
- if (u.getPath() != null) {
- result.append(u.getPath());
- }
- if (u.getQuery() != null) {
- result.append('?');
- result.append(u.getQuery());
+ String fileAndQuery = u.getFile();
+ if (fileAndQuery != null) {
+ if (escapeIllegalCharacters) {
+ URI.FILE_AND_QUERY_ENCODER.appendPartiallyEncoded(result, fileAndQuery);
+ } else {
+ result.append(fileAndQuery);
+ }
}
if (u.getRef() != null) {
result.append("#");
- result.append(u.getRef());
+ if (escapeIllegalCharacters) {
+ URI.ALL_LEGAL_ENCODER.appendPartiallyEncoded(result, u.getRef());
+ } else {
+ result.append(u.getRef());
+ }
}
return result.toString();
}
diff --git a/ojluni/src/main/java/java/util/jar/JarFile.java b/ojluni/src/main/java/java/util/jar/JarFile.java
index 42a7482..fe4dd90 100755
--- a/ojluni/src/main/java/java/util/jar/JarFile.java
+++ b/ojluni/src/main/java/java/util/jar/JarFile.java
@@ -499,7 +499,10 @@
// attribute. Returns false if there is no manifest or the manifest
// does not contain a "Class-Path" attribute. Currently exported to
// core libraries via sun.misc.SharedSecrets.
- boolean hasClassPathAttribute() throws IOException {
+ /*
+ * @hide
+ */
+ public boolean hasClassPathAttribute() throws IOException {
if (computedHasClassPathAttribute) {
return hasClassPathAttribute;
}
diff --git a/ojluni/src/main/java/java/util/zip/ZipFile.java b/ojluni/src/main/java/java/util/zip/ZipFile.java
index c5f89b6..6ddb6e6 100755
--- a/ojluni/src/main/java/java/util/zip/ZipFile.java
+++ b/ojluni/src/main/java/java/util/zip/ZipFile.java
@@ -768,8 +768,10 @@
/**
* Returns {@code true} if, and only if, the zip file begins with {@code
* LOCSIG}.
+ *
+ * @hide
*/
- private boolean startsWithLocHeader() {
+ public boolean startsWithLocHeader() {
return locsig;
}
diff --git a/ojluni/src/main/java/javax/net/ssl/HttpsURLConnection.java b/ojluni/src/main/java/javax/net/ssl/HttpsURLConnection.java
index 391ae23..27462e8 100755
--- a/ojluni/src/main/java/javax/net/ssl/HttpsURLConnection.java
+++ b/ojluni/src/main/java/javax/net/ssl/HttpsURLConnection.java
@@ -196,14 +196,12 @@
* updated for another other type of <code>HostnameVerifier</code>
* that are created.
*/
- /* ----- BEGIN android -----
private static class DefaultHostnameVerifier
implements HostnameVerifier {
public boolean verify(String hostname, SSLSession session) {
return false;
}
}
- ----- END android ----- */
/**
* The <code>hostnameVerifier</code> for this object.
@@ -250,6 +248,11 @@
return defaultHostnameVerifier;
}
+ /* @hide */
+ public static boolean hasCustomDefaultHostnameVerifier() {
+ return !(defaultHostnameVerifier instanceof DefaultHostnameVerifier);
+ }
+
/**
* Sets the <code>HostnameVerifier</code> for this instance.
* <P>
diff --git a/ojluni/src/main/java/sun/misc/URLClassPath.java b/ojluni/src/main/java/sun/misc/URLClassPath.java
index 56ec815..0f36e58 100755
--- a/ojluni/src/main/java/sun/misc/URLClassPath.java
+++ b/ojluni/src/main/java/sun/misc/URLClassPath.java
@@ -596,8 +596,6 @@
private URLStreamHandler handler;
private HashMap<String, Loader> lmap;
private boolean closed = false;
- private static final sun.misc.JavaUtilZipFileAccess zipAccess =
- sun.misc.SharedSecrets.getJavaUtilZipFileAccess();
/*
* Creates a new JarLoader for the specified URL referring to
@@ -705,7 +703,7 @@
/* Throws if the given jar file is does not start with the correct LOC */
static JarFile checkJar(JarFile jar) throws IOException {
if (System.getSecurityManager() != null && !DISABLE_JAR_CHECKING
- && !zipAccess.startsWithLocHeader(jar)) {
+ && !jar.startsWithLocHeader()) {
IOException x = new IOException("Invalid Jar file");
try {
jar.close();
@@ -981,7 +979,7 @@
ensureOpen();
parseExtensionsDependencies();
- if (SharedSecrets.javaUtilJarAccess().jarFileHasClassPathAttribute(jar)) { // Only get manifest when necessary
+ if (jar.hasClassPathAttribute()) { // Only get manifest when necessary
Manifest man = jar.getManifest();
if (man != null) {
Attributes attr = man.getMainAttributes();
@@ -1000,7 +998,6 @@
* parse the standard extension dependencies
*/
private void parseExtensionsDependencies() throws IOException {
- ExtensionDependency.checkExtensionsDependencies(jar);
}
/*
diff --git a/ojluni/src/main/java/sun/net/www/protocol/FileURLConnection.java b/ojluni/src/main/java/sun/net/www/protocol/FileURLConnection.java
new file mode 100644
index 0000000..1997cb0
--- /dev/null
+++ b/ojluni/src/main/java/sun/net/www/protocol/FileURLConnection.java
@@ -0,0 +1,233 @@
+/*
+ * Copyright (c) 1995, 2010, 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. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/**
+ * Open an file input stream given a URL.
+ * @author James Gosling
+ * @author Steven B. Byrne
+ */
+
+package sun.net.www.protocol.file;
+
+import java.net.URL;
+import java.net.FileNameMap;
+import java.io.*;
+import java.text.Collator;
+import java.security.Permission;
+import sun.net.*;
+import sun.net.www.*;
+import java.util.*;
+import java.text.SimpleDateFormat;
+
+import sun.security.action.GetPropertyAction;
+import sun.security.action.GetIntegerAction;
+import sun.security.action.GetBooleanAction;
+
+public class FileURLConnection extends URLConnection {
+
+ static String CONTENT_LENGTH = "content-length";
+ static String CONTENT_TYPE = "content-type";
+ static String TEXT_PLAIN = "text/plain";
+ static String LAST_MODIFIED = "last-modified";
+
+ String contentType;
+ InputStream is;
+
+ File file;
+ String filename;
+ boolean isDirectory = false;
+ boolean exists = false;
+ List<String> files;
+
+ long length = -1;
+ long lastModified = 0;
+
+ protected FileURLConnection(URL u, File file) {
+ super(u);
+ this.file = file;
+ }
+
+ /*
+ * Note: the semantics of FileURLConnection object is that the
+ * results of the various URLConnection calls, such as
+ * getContentType, getInputStream or getContentLength reflect
+ * whatever was true when connect was called.
+ */
+ public void connect() throws IOException {
+ if (!connected) {
+ try {
+ filename = file.toString();
+ isDirectory = file.isDirectory();
+ if (isDirectory) {
+ String[] fileList = file.list();
+ if (fileList == null)
+ throw new FileNotFoundException(filename + " exists, but is not accessible");
+ files = Arrays.<String>asList(fileList);
+ } else {
+
+ is = new BufferedInputStream(new FileInputStream(filename));
+
+ // Check if URL should be metered
+ boolean meteredInput = ProgressMonitor.getDefault().shouldMeterInput(url, "GET");
+ if (meteredInput) {
+ ProgressSource pi = new ProgressSource(url, "GET", file.length());
+ is = new MeteredStream(is, pi, file.length());
+ }
+ }
+ } catch (IOException e) {
+ throw e;
+ }
+ connected = true;
+ }
+ }
+
+ private boolean initializedHeaders = false;
+
+ private void initializeHeaders() {
+ try {
+ connect();
+ exists = file.exists();
+ } catch (IOException e) {
+ }
+ if (!initializedHeaders || !exists) {
+ length = file.length();
+ lastModified = file.lastModified();
+
+ if (!isDirectory) {
+ FileNameMap map = java.net.URLConnection.getFileNameMap();
+ contentType = map.getContentTypeFor(filename);
+ if (contentType != null) {
+ properties.add(CONTENT_TYPE, contentType);
+ }
+ properties.add(CONTENT_LENGTH, String.valueOf(length));
+
+ /*
+ * Format the last-modified field into the preferred
+ * Internet standard - ie: fixed-length subset of that
+ * defined by RFC 1123
+ */
+ if (lastModified != 0) {
+ Date date = new Date(lastModified);
+ SimpleDateFormat fo =
+ new SimpleDateFormat ("EEE, dd MMM yyyy HH:mm:ss 'GMT'", Locale.US);
+ fo.setTimeZone(TimeZone.getTimeZone("GMT"));
+ properties.add(LAST_MODIFIED, fo.format(date));
+ }
+ } else {
+ properties.add(CONTENT_TYPE, TEXT_PLAIN);
+ }
+ initializedHeaders = true;
+ }
+ }
+
+ public String getHeaderField(String name) {
+ initializeHeaders();
+ return super.getHeaderField(name);
+ }
+
+ public String getHeaderField(int n) {
+ initializeHeaders();
+ return super.getHeaderField(n);
+ }
+
+ public int getContentLength() {
+ initializeHeaders();
+ if (length > Integer.MAX_VALUE)
+ return -1;
+ return (int) length;
+ }
+
+ public long getContentLengthLong() {
+ initializeHeaders();
+ return length;
+ }
+
+ public String getHeaderFieldKey(int n) {
+ initializeHeaders();
+ return super.getHeaderFieldKey(n);
+ }
+
+ public MessageHeader getProperties() {
+ initializeHeaders();
+ return super.getProperties();
+ }
+
+ public long getLastModified() {
+ initializeHeaders();
+ return lastModified;
+ }
+
+ public synchronized InputStream getInputStream()
+ throws IOException {
+
+ int iconHeight;
+ int iconWidth;
+
+ connect();
+
+ if (is == null) {
+ if (isDirectory) {
+ FileNameMap map = java.net.URLConnection.getFileNameMap();
+
+ StringBuffer buf = new StringBuffer();
+
+ if (files == null) {
+ throw new FileNotFoundException(filename);
+ }
+
+ Collections.sort(files, Collator.getInstance());
+
+ for (int i = 0 ; i < files.size() ; i++) {
+ String fileName = files.get(i);
+ buf.append(fileName);
+ buf.append("\n");
+ }
+ // Put it into a (default) locale-specific byte-stream.
+ is = new ByteArrayInputStream(buf.toString().getBytes());
+ } else {
+ throw new FileNotFoundException(filename);
+ }
+ }
+ return is;
+ }
+
+ Permission permission;
+
+ /* since getOutputStream isn't supported, only read permission is
+ * relevant
+ */
+ public Permission getPermission() throws IOException {
+ if (permission == null) {
+ String decodedPath = ParseUtil.decode(url.getPath());
+ if (File.separatorChar == '/') {
+ permission = new FilePermission(decodedPath, "read");
+ } else {
+ permission = new FilePermission(
+ decodedPath.replace('/',File.separatorChar), "read");
+ }
+ }
+ return permission;
+ }
+}
diff --git a/ojluni/src/main/java/sun/net/www/protocol/http/HttpURLConnection.java b/ojluni/src/main/java/sun/net/www/protocol/http/HttpURLConnection.java
index d4a9985..8ea0ec3 100755
--- a/ojluni/src/main/java/sun/net/www/protocol/http/HttpURLConnection.java
+++ b/ojluni/src/main/java/sun/net/www/protocol/http/HttpURLConnection.java
@@ -2617,10 +2617,8 @@
if (cookieHandler == null)
return value;
- sun.misc.JavaNetHttpCookieAccess access =
- sun.misc.SharedSecrets.getJavaNetHttpCookieAccess();
StringBuilder retValue = new StringBuilder();
- List<HttpCookie> cookies = access.parse(value);
+ List<HttpCookie> cookies = HttpCookie.parse(value, true);
boolean multipleCookies = false;
for (HttpCookie cookie : cookies) {
// skip HttpOnly cookies
@@ -2628,7 +2626,7 @@
continue;
if (multipleCookies)
retValue.append(','); // RFC 2965, comma separated
- retValue.append(access.header(cookie));
+ retValue.append(cookie.header);
multipleCookies = true;
}
diff --git a/ojluni/src/main/native/DatagramPacket.c b/ojluni/src/main/native/DatagramPacket.c
index 01ac9fb..9a3c9c1 100755
--- a/ojluni/src/main/native/DatagramPacket.c
+++ b/ojluni/src/main/native/DatagramPacket.c
@@ -25,6 +25,10 @@
#include "java_net_DatagramPacket.h"
#include "net_util.h"
+#include "JNIHelp.h"
+
+#define NATIVE_METHOD(className, functionName, signature) \
+{ #functionName, signature, (void*)(className ## _ ## functionName) }
/************************************************************************
* DatagramPacket
@@ -43,7 +47,7 @@
* Signature: ()V
*/
JNIEXPORT void JNICALL
-Java_java_net_DatagramPacket_init (JNIEnv *env, jclass cls) {
+DatagramPacket_init (JNIEnv *env, jclass cls) {
dp_addressID = (*env)->GetFieldID(env, cls, "address",
"Ljava/net/InetAddress;");
CHECK_NULL(dp_addressID);
@@ -58,3 +62,11 @@
dp_bufLengthID = (*env)->GetFieldID(env, cls, "bufLength", "I");
CHECK_NULL(dp_bufLengthID);
}
+
+static JNINativeMethod gMethods[] = {
+ NATIVE_METHOD(DatagramPacket, init, "()V"),
+};
+
+void register_java_net_DatagramPacket(JNIEnv* env) {
+ jniRegisterNativeMethods(env, "java/net/DatagramPacket", gMethods, NELEM(gMethods));
+}
diff --git a/ojluni/src/main/native/DefaultProxySelector.c b/ojluni/src/main/native/DefaultProxySelector.c
index 6883902..0184f10 100755
--- a/ojluni/src/main/native/DefaultProxySelector.c
+++ b/ojluni/src/main/native/DefaultProxySelector.c
@@ -36,6 +36,10 @@
#else
#include <strings.h>
#endif
+#include "JNIHelp.h"
+
+#define NATIVE_METHOD(className, functionName, signature) \
+{ #functionName, signature, (void*)(className ## _ ## functionName) }
/**
* These functions are used by the sun.net.spi.DefaultProxySelector class
@@ -94,7 +98,7 @@
* Signature: ()Z
*/
JNIEXPORT jboolean JNICALL
-Java_sun_net_spi_DefaultProxySelector_init(JNIEnv *env, jclass clazz) {
+DefaultProxySelector_init(JNIEnv *env, jclass clazz) {
jclass cls = NULL;
CHECK_NULL(cls = (*env)->FindClass(env,"java/net/Proxy"));
proxy_class = (*env)->NewGlobalRef(env, cls);
@@ -152,7 +156,7 @@
* Signature: ([Ljava/lang/String;Ljava/lang/String;)Ljava/net/Proxy;
*/
JNIEXPORT jobject JNICALL
-Java_sun_net_spi_DefaultProxySelector_getSystemProxy(JNIEnv *env,
+DefaultProxySelector_getSystemProxy(JNIEnv *env,
jobject this,
jstring proto,
jstring host)
@@ -333,3 +337,12 @@
CHECK_NULL(no_proxy = (*env)->GetStaticObjectField(env, proxy_class, pr_no_proxyID));
return no_proxy;
}
+
+static JNINativeMethod gMethods[] = {
+ NATIVE_METHOD(DefaultProxySelector, getSystemProxy, "(Ljava/lang/String;Ljava/lang/String;)Ljava/net/Proxy;"),
+ NATIVE_METHOD(DefaultProxySelector, init, "()Z"),
+};
+
+void register_sun_net_spi_DefaultProxySelector(JNIEnv* env) {
+ jniRegisterNativeMethods(env, "sun/net/spi/DefaultProxySelector", gMethods, NELEM(gMethods));
+}
diff --git a/ojluni/src/main/native/Inet4Address.c b/ojluni/src/main/native/Inet4Address.c
index 2030471..0c6ca22 100755
--- a/ojluni/src/main/native/Inet4Address.c
+++ b/ojluni/src/main/native/Inet4Address.c
@@ -27,6 +27,10 @@
#include "java_net_Inet4Address.h"
#include "net_util.h"
+#include "JNIHelp.h"
+
+#define NATIVE_METHOD(className, functionName, signature) \
+{ #functionName, signature, (void*)(className ## _ ## functionName) }
/************************************************************************
* Inet4Address
@@ -40,7 +44,7 @@
* Signature: ()V
*/
JNIEXPORT void JNICALL
-Java_java_net_Inet4Address_init(JNIEnv *env, jclass cls) {
+Inet4Address_init(JNIEnv *env, jclass cls) {
jclass c = (*env)->FindClass(env, "java/net/Inet4Address");
CHECK_NULL(c);
ia4_class = (*env)->NewGlobalRef(env, c);
@@ -48,3 +52,11 @@
ia4_ctrID = (*env)->GetMethodID(env, ia4_class, "<init>", "()V");
CHECK_NULL(ia4_ctrID);
}
+
+static JNINativeMethod gMethods[] = {
+ NATIVE_METHOD(Inet4Address, init, "()V"),
+};
+
+void register_java_net_Inet4Address(JNIEnv* env) {
+ jniRegisterNativeMethods(env, "java/net/Inet4Address", gMethods, NELEM(gMethods));
+}
diff --git a/ojluni/src/main/native/Inet4AddressImpl.c b/ojluni/src/main/native/Inet4AddressImpl.c
index 1aa2de0..aafc33e 100755
--- a/ojluni/src/main/native/Inet4AddressImpl.c
+++ b/ojluni/src/main/native/Inet4AddressImpl.c
@@ -46,10 +46,14 @@
#include "net_util.h"
#include "java_net_Inet4AddressImpl.h"
+#include "JNIHelp.h"
-#if defined(__GLIBC__) || (defined(__FreeBSD__) && (__FreeBSD_version >= 601104))
+#define NATIVE_METHOD(className, functionName, signature) \
+{ #functionName, signature, (void*)(className ## _ ## functionName) }
+
+//#if defined(__GLIBC__) || (defined(__FreeBSD__) && (__FreeBSD_version >= 601104))
#define HAS_GLIBC_GETHOSTBY_R 1
-#endif
+//#endif
#if defined(_ALLBSD_SOURCE) && !defined(HAS_GLIBC_GETHOSTBY_R)
/* Use getaddrinfo(3), which is thread safe */
@@ -63,7 +67,7 @@
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL
-Java_java_net_Jnet4AddressImpl_getLocalHostName(JNIEnv *env, jobject this) {
+Inet4AddressImpl_getLocalHostName(JNIEnv *env, jobject this) {
char hostname[NI_MAXHOST+1];
hostname[0] = '\0';
@@ -116,7 +120,7 @@
*/
JNIEXPORT jobjectArray JNICALL
-Java_java_net_Jnet4AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this,
+Inet4AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this,
jstring host) {
const char *hostname;
jobject name;
@@ -264,7 +268,7 @@
* Signature: (I)Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL
-Java_java_net_Jnet4AddressImpl_getHostByAddr(JNIEnv *env, jobject this,
+Inet4AddressImpl_getHostByAddr(JNIEnv *env, jobject this,
jbyteArray addrArray) {
jstring ret = NULL;
@@ -325,7 +329,7 @@
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL
-Java_java_net_Jnet4AddressImpl_getLocalHostName(JNIEnv *env, jobject this) {
+Inet4AddressImpl_getLocalHostName(JNIEnv *env, jobject this) {
char hostname[MAXHOSTNAMELEN+1];
hostname[0] = '\0';
@@ -402,7 +406,7 @@
*/
JNIEXPORT jobjectArray JNICALL
-Java_java_net_Jnet4AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this,
+Inet4AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this,
jstring host) {
const char *hostname;
jobjectArray ret = 0;
@@ -515,7 +519,7 @@
* Signature: (I)Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL
-Java_java_net_Jnet4AddressImpl_getHostByAddr(JNIEnv *env, jobject this,
+Inet4AddressImpl_getHostByAddr(JNIEnv *env, jobject this,
jbyteArray addrArray) {
jstring ret = NULL;
jint addr;
@@ -708,7 +712,7 @@
* Signature: ([bI[bI)Z
*/
JNIEXPORT jboolean JNICALL
-Java_java_net_Jnet4AddressImpl_isReachable0(JNIEnv *env, jobject this,
+Inet4AddressImpl_isReachable0(JNIEnv *env, jobject this,
jbyteArray addrArray,
jint timeout,
jbyteArray ifArray,
@@ -856,3 +860,15 @@
return JNI_FALSE;
}
}
+
+static JNINativeMethod gMethods[] = {
+ NATIVE_METHOD(Inet4AddressImpl, isReachable0, "([BI[BI)Z"),
+ NATIVE_METHOD(Inet4AddressImpl, getHostByAddr, "([B)Ljava/lang/String;"),
+ NATIVE_METHOD(Inet4AddressImpl, lookupAllHostAddr, "(Ljava/lang/String;)[Ljava/net/InetAddress;"),
+ NATIVE_METHOD(Inet4AddressImpl, getLocalHostName, "()Ljava/lang/String;"),
+
+};
+
+void register_java_net_Inet4AddressImpl(JNIEnv* env) {
+ jniRegisterNativeMethods(env, "java/net/Inet4AddressImpl", gMethods, NELEM(gMethods));
+}
diff --git a/ojluni/src/main/native/Inet6Address.c b/ojluni/src/main/native/Inet6Address.c
index 7b04c67..5a0e2f5 100755
--- a/ojluni/src/main/native/Inet6Address.c
+++ b/ojluni/src/main/native/Inet6Address.c
@@ -27,6 +27,10 @@
#include "java_net_Inet6Address.h"
#include "net_util.h"
+#include "JNIHelp.h"
+
+#define NATIVE_METHOD(className, functionName, signature) \
+{ #functionName, signature, (void*)(className ## _ ## functionName) }
/************************************************************************
* Inet6Address
@@ -47,7 +51,7 @@
* Signature: ()V
*/
JNIEXPORT void JNICALL
-Java_java_net_Inet6Address_init(JNIEnv *env, jclass cls) {
+Inet6Address_init(JNIEnv *env, jclass cls) {
jclass c = (*env)->FindClass(env, "java/net/Inet6Address");
CHECK_NULL(c);
ia6_class = (*env)->NewGlobalRef(env, c);
@@ -67,3 +71,11 @@
ia6_ctrID = (*env)->GetMethodID(env, ia6_class, "<init>", "()V");
CHECK_NULL(ia6_ctrID);
}
+
+static JNINativeMethod gMethods[] = {
+ NATIVE_METHOD(Inet6Address, init, "()V"),
+};
+
+void register_java_net_Inet6Address(JNIEnv* env) {
+ jniRegisterNativeMethods(env, "java/net/Inet6Address", gMethods, NELEM(gMethods));
+}
diff --git a/ojluni/src/main/native/Inet6AddressImpl.c b/ojluni/src/main/native/Inet6AddressImpl.c
index 4038504..f26a3c0 100755
--- a/ojluni/src/main/native/Inet6AddressImpl.c
+++ b/ojluni/src/main/native/Inet6AddressImpl.c
@@ -46,6 +46,10 @@
#include "java_net_Inet4AddressImpl.h"
#include "java_net_Inet6AddressImpl.h"
+#include "JNIHelp.h"
+
+#define NATIVE_METHOD(className, functionName, signature) \
+{ #functionName, signature, (void*)(className ## _ ## functionName) }
/* the initial size of our hostent buffers */
#ifndef NI_MAXHOST
@@ -63,7 +67,7 @@
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL
-Java_java_net_Inet6AddressImpl_getLocalHostName(JNIEnv *env, jobject this) {
+Inet6AddressImpl_getLocalHostName(JNIEnv *env, jobject this) {
char hostname[NI_MAXHOST+1];
hostname[0] = '\0';
@@ -137,7 +141,7 @@
*/
JNIEXPORT jobjectArray JNICALL
-Java_java_net_Inet6AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this,
+Inet6AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this,
jstring host) {
const char *hostname;
jobjectArray ret = 0;
@@ -378,7 +382,7 @@
* Signature: (I)Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL
-Java_java_net_Inet6AddressImpl_getHostByAddr(JNIEnv *env, jobject this,
+Inet6AddressImpl_getHostByAddr(JNIEnv *env, jobject this,
jbyteArray addrArray) {
jstring ret = NULL;
@@ -557,7 +561,7 @@
* Signature: ([bII[bI)Z
*/
JNIEXPORT jboolean JNICALL
-Java_java_net_Inet6AddressImpl_isReachable0(JNIEnv *env, jobject this,
+Inet6AddressImpl_isReachable0(JNIEnv *env, jobject this,
jbyteArray addrArray,
jint scope,
jint timeout,
@@ -584,7 +588,7 @@
*/
sz = (*env)->GetArrayLength(env, addrArray);
if (sz == 4) {
- return Java_java_net_Inet4AddressImpl_isReachable0(env, this,
+ return Inet4AddressImpl_isReachable0(env, this,
addrArray,
timeout,
ifArray, ttl);
@@ -717,3 +721,13 @@
return JNI_FALSE;
#endif /* AF_INET6 */
}
+
+static JNINativeMethod gMethods[] = {
+ NATIVE_METHOD(Inet6AddressImpl, isReachable0, "([BII[BII)Z"),
+ NATIVE_METHOD(Inet6AddressImpl, getHostByAddr, "([B)Ljava/lang/String;"),
+ NATIVE_METHOD(Inet6AddressImpl, lookupAllHostAddr, "(Ljava/lang/String;)[Ljava/net/InetAddress;"),
+};
+
+void register_java_net_Inet6AddressImpl(JNIEnv* env) {
+ jniRegisterNativeMethods(env, "java/net/Inet6AddressImpl", gMethods, NELEM(gMethods));
+}
diff --git a/ojluni/src/main/native/InetAddress.c b/ojluni/src/main/native/InetAddress.c
index 3111573..761cd31 100755
--- a/ojluni/src/main/native/InetAddress.c
+++ b/ojluni/src/main/native/InetAddress.c
@@ -27,6 +27,10 @@
#include "java_net_InetAddress.h"
#include "net_util.h"
+#include "JNIHelp.h"
+
+#define NATIVE_METHOD(className, functionName, signature) \
+{ #functionName, signature, (void*)(className ## _ ## functionName) }
/************************************************************************
* InetAddress
@@ -46,7 +50,7 @@
* Signature: ()V
*/
JNIEXPORT void JNICALL
-Java_java_net_InetAddress_init(JNIEnv *env, jclass cls) {
+InetAddress_init(JNIEnv *env, jclass cls) {
jclass c = (*env)->FindClass(env,"java/net/InetAddress");
CHECK_NULL(c);
ia_class = (*env)->NewGlobalRef(env, c);
@@ -66,3 +70,11 @@
iac_hostNameID = (*env)->GetFieldID(env, iac_class, "hostName", "Ljava/lang/String;");
CHECK_NULL(iac_hostNameID);
}
+
+static JNINativeMethod gMethods[] = {
+ NATIVE_METHOD(InetAddress, init, "()V"),
+};
+
+void register_java_net_InetAddress(JNIEnv* env) {
+ jniRegisterNativeMethods(env, "java/net/InetAddress", gMethods, NELEM(gMethods));
+}
diff --git a/ojluni/src/main/native/InetAddressImplFactory.c b/ojluni/src/main/native/InetAddressImplFactory.c
index feae950..e9ecc9a 100755
--- a/ojluni/src/main/native/InetAddressImplFactory.c
+++ b/ojluni/src/main/native/InetAddressImplFactory.c
@@ -26,6 +26,10 @@
#include "java_net_InetAddressImplFactory.h"
#include "net_util.h"
+#include "JNIHelp.h"
+
+#define NATIVE_METHOD(className, functionName, signature) \
+{ #functionName, signature, (void*)(className ## _ ## functionName) }
/************************************************************************
* InetAddressImplFactory
@@ -37,7 +41,7 @@
* Signature: ()I
*/
JNIEXPORT jboolean JNICALL
-Java_java_net_InetAddressImplFactory_isIPv6Supported(JNIEnv *env, jclass cls)
+InetAddressImplFactory_isIPv6Supported(JNIEnv *env, jclass cls)
{
#ifdef AF_INET6
if (ipv6_available()) {
@@ -48,3 +52,11 @@
return JNI_FALSE;
}
}
+
+static JNINativeMethod gMethods[] = {
+ NATIVE_METHOD(InetAddressImplFactory, isIPv6Supported, "()Z"),
+};
+
+void register_java_net_InetAddressImplFactory(JNIEnv* env) {
+ jniRegisterNativeMethods(env, "java/net/InetAddressImplFactory", gMethods, NELEM(gMethods));
+}
diff --git a/ojluni/src/main/native/NetworkInterface.c b/ojluni/src/main/native/NetworkInterface.c
index 6a31a61..b05d885 100755
--- a/ojluni/src/main/native/NetworkInterface.c
+++ b/ojluni/src/main/native/NetworkInterface.c
@@ -47,7 +47,7 @@
#ifdef __linux__
#include <sys/ioctl.h>
-#include <bits/ioctls.h>
+//#include <bits/ioctls.h>
#include <sys/utsname.h>
#include <stdio.h>
#endif
@@ -72,6 +72,10 @@
#include "jvm.h"
#include "jni_util.h"
#include "net_util.h"
+#include "JNIHelp.h"
+
+#define NATIVE_METHOD(className, functionName, signature) \
+{ #functionName, signature, (void*)(className ## _ ## functionName) }
typedef struct _netaddr {
struct sockaddr *addr;
@@ -169,7 +173,7 @@
* Signature: ()V
*/
JNIEXPORT void JNICALL
-Java_java_net_NetworkInterface_init(JNIEnv *env, jclass cls) {
+NetworkInterface_init(JNIEnv *env, jclass cls) {
ni_class = (*env)->FindClass(env,"java/net/NetworkInterface");
ni_class = (*env)->NewGlobalRef(env, ni_class);
ni_nameID = (*env)->GetFieldID(env, ni_class,"name", "Ljava/lang/String;");
@@ -206,7 +210,7 @@
* Method: getByName0
* Signature: (Ljava/lang/String;)Ljava/net/NetworkInterface;
*/
-JNIEXPORT jobject JNICALL Java_java_net_NetworkInterface_getByName0
+JNIEXPORT jobject JNICALL NetworkInterface_getByName0
(JNIEnv *env, jclass cls, jstring name) {
netif *ifs, *curr;
@@ -250,7 +254,7 @@
* Method: getByIndex0
* Signature: (Ljava/lang/String;)Ljava/net/NetworkInterface;
*/
-JNIEXPORT jobject JNICALL Java_java_net_NetworkInterface_getByIndex0
+JNIEXPORT jobject JNICALL NetworkInterface_getByIndex0
(JNIEnv *env, jclass cls, jint index) {
netif *ifs, *curr;
@@ -290,7 +294,7 @@
* Method: getByInetAddress0
* Signature: (Ljava/net/InetAddress;)Ljava/net/NetworkInterface;
*/
-JNIEXPORT jobject JNICALL Java_java_net_NetworkInterface_getByInetAddress0
+JNIEXPORT jobject JNICALL NetworkInterface_getByInetAddress0
(JNIEnv *env, jclass cls, jobject iaObj) {
netif *ifs, *curr;
@@ -380,7 +384,7 @@
* Method: getAll
* Signature: ()[Ljava/net/NetworkInterface;
*/
-JNIEXPORT jobjectArray JNICALL Java_java_net_NetworkInterface_getAll
+JNIEXPORT jobjectArray JNICALL NetworkInterface_getAll
(JNIEnv *env, jclass cls) {
netif *ifs, *curr;
@@ -438,7 +442,7 @@
* Method: isUp0
* Signature: (Ljava/lang/String;I)Z
*/
-JNIEXPORT jboolean JNICALL Java_java_net_NetworkInterface_isUp0(JNIEnv *env, jclass cls, jstring name, jint index) {
+JNIEXPORT jboolean JNICALL NetworkInterface_isUp0(JNIEnv *env, jclass cls, jstring name, jint index) {
int ret = getFlags0(env, name);
return ((ret & IFF_UP) && (ret & IFF_RUNNING)) ? JNI_TRUE : JNI_FALSE;
}
@@ -448,7 +452,7 @@
* Method: isP2P0
* Signature: (Ljava/lang/String;I)Z
*/
-JNIEXPORT jboolean JNICALL Java_java_net_NetworkInterface_isP2P0(JNIEnv *env, jclass cls, jstring name, jint index) {
+JNIEXPORT jboolean JNICALL NetworkInterface_isP2P0(JNIEnv *env, jclass cls, jstring name, jint index) {
int ret = getFlags0(env, name);
return (ret & IFF_POINTOPOINT) ? JNI_TRUE : JNI_FALSE;
}
@@ -458,9 +462,9 @@
* Method: isLoopback0
* Signature: (Ljava/lang/String;I)Z
*/
-JNIEXPORT jboolean JNICALL Java_java_net_NetworkInterface_isLoopback0(JNIEnv *env, jclass cls, jstring name, jint index) {
- int ret = getFlags0(env, name);
- return (ret & IFF_LOOPBACK) ? JNI_TRUE : JNI_FALSE;
+JNIEXPORT jboolean JNICALL NetworkInterface_isLoopback0(JNIEnv *env, jclass cls, jstring name, jint index) {
+ int ret = getFlags0(env, name);
+ return (ret & IFF_LOOPBACK) ? JNI_TRUE : JNI_FALSE;
}
/*
@@ -468,9 +472,9 @@
* Method: supportsMulticast0
* Signature: (Ljava/lang/String;I)Z
*/
-JNIEXPORT jboolean JNICALL Java_java_net_NetworkInterface_supportsMulticast0(JNIEnv *env, jclass cls, jstring name, jint index) {
- int ret = getFlags0(env, name);
- return (ret & IFF_MULTICAST) ? JNI_TRUE : JNI_FALSE;
+JNIEXPORT jboolean JNICALL NetworkInterface_supportsMulticast0(JNIEnv *env, jclass cls, jstring name, jint index) {
+ int ret = getFlags0(env, name);
+ return (ret & IFF_MULTICAST) ? JNI_TRUE : JNI_FALSE;
}
/*
@@ -478,50 +482,50 @@
* Method: getMacAddr0
* Signature: ([bLjava/lang/String;I)[b
*/
-JNIEXPORT jbyteArray JNICALL Java_java_net_NetworkInterface_getMacAddr0(JNIEnv *env, jclass class, jbyteArray addrArray, jstring name, jint index) {
- jint addr;
- jbyte caddr[4];
- struct in_addr iaddr;
- jbyteArray ret = NULL;
- unsigned char mac[16];
- int len;
- int sock;
- jboolean isCopy;
- const char* name_utf;
+JNIEXPORT jbyteArray JNICALL NetworkInterface_getMacAddr0(JNIEnv *env, jclass class, jbyteArray addrArray, jstring name, jint index) {
+ jint addr;
+ jbyte caddr[4];
+ struct in_addr iaddr;
+ jbyteArray ret = NULL;
+ unsigned char mac[16];
+ int len;
+ int sock;
+ jboolean isCopy;
+ const char* name_utf;
- name_utf = (*env)->GetStringUTFChars(env, name, &isCopy);
+ name_utf = (*env)->GetStringUTFChars(env, name, &isCopy);
- if ((sock =openSocketWithFallback(env, name_utf)) < 0) {
- (*env)->ReleaseStringUTFChars(env, name, name_utf);
- return JNI_FALSE;
+ if ((sock =openSocketWithFallback(env, name_utf)) < 0) {
+ (*env)->ReleaseStringUTFChars(env, name, name_utf);
+ return JNI_FALSE;
+ }
+
+
+ if (!IS_NULL(addrArray)) {
+ (*env)->GetByteArrayRegion(env, addrArray, 0, 4, caddr);
+ addr = ((caddr[0]<<24) & 0xff000000);
+ addr |= ((caddr[1] <<16) & 0xff0000);
+ addr |= ((caddr[2] <<8) & 0xff00);
+ addr |= (caddr[3] & 0xff);
+ iaddr.s_addr = htonl(addr);
+ len = getMacAddress(env, sock, name_utf, &iaddr, mac);
+ } else {
+ len = getMacAddress(env, sock, name_utf,NULL, mac);
+ }
+ if (len > 0) {
+ ret = (*env)->NewByteArray(env, len);
+ if (IS_NULL(ret)) {
+ /* we may have memory to free at the end of this */
+ goto fexit;
}
+ (*env)->SetByteArrayRegion(env, ret, 0, len, (jbyte *) (mac));
+ }
+fexit:
+ /* release the UTF string and interface list */
+ (*env)->ReleaseStringUTFChars(env, name, name_utf);
-
- if (!IS_NULL(addrArray)) {
- (*env)->GetByteArrayRegion(env, addrArray, 0, 4, caddr);
- addr = ((caddr[0]<<24) & 0xff000000);
- addr |= ((caddr[1] <<16) & 0xff0000);
- addr |= ((caddr[2] <<8) & 0xff00);
- addr |= (caddr[3] & 0xff);
- iaddr.s_addr = htonl(addr);
- len = getMacAddress(env, sock, name_utf, &iaddr, mac);
- } else {
- len = getMacAddress(env, sock, name_utf,NULL, mac);
- }
- if (len > 0) {
- ret = (*env)->NewByteArray(env, len);
- if (IS_NULL(ret)) {
- /* we may have memory to free at the end of this */
- goto fexit;
- }
- (*env)->SetByteArrayRegion(env, ret, 0, len, (jbyte *) (mac));
- }
- fexit:
- /* release the UTF string and interface list */
- (*env)->ReleaseStringUTFChars(env, name, name_utf);
-
- close(sock);
- return ret;
+ close(sock);
+ return ret;
}
/*
@@ -530,55 +534,55 @@
* Signature: ([bLjava/lang/String;I)I
*/
-JNIEXPORT jint JNICALL Java_java_net_NetworkInterface_getMTU0(JNIEnv *env, jclass class, jstring name, jint index) {
- jboolean isCopy;
- int ret = -1;
- int sock;
- const char* name_utf;
+JNIEXPORT jint JNICALL NetworkInterface_getMTU0(JNIEnv *env, jclass class, jstring name, jint index) {
+ jboolean isCopy;
+ int ret = -1;
+ int sock;
+ const char* name_utf;
- name_utf = (*env)->GetStringUTFChars(env, name, &isCopy);
+ name_utf = (*env)->GetStringUTFChars(env, name, &isCopy);
- if ((sock =openSocketWithFallback(env, name_utf)) < 0) {
- (*env)->ReleaseStringUTFChars(env, name, name_utf);
- return JNI_FALSE;
- }
-
- ret = getMTU(env, sock, name_utf);
-
+ if ((sock =openSocketWithFallback(env, name_utf)) < 0) {
(*env)->ReleaseStringUTFChars(env, name, name_utf);
+ return JNI_FALSE;
+ }
- close(sock);
- return ret;
+ ret = getMTU(env, sock, name_utf);
+
+ (*env)->ReleaseStringUTFChars(env, name, name_utf);
+
+ close(sock);
+ return ret;
}
/*** Private methods definitions ****/
static int getFlags0(JNIEnv *env, jstring name) {
- jboolean isCopy;
- int ret, sock;
- const char* name_utf;
- int flags = 0;
+ jboolean isCopy;
+ int ret, sock;
+ const char* name_utf;
+ int flags = 0;
- name_utf = (*env)->GetStringUTFChars(env, name, &isCopy);
+ name_utf = (*env)->GetStringUTFChars(env, name, &isCopy);
- if ((sock = openSocketWithFallback(env, name_utf)) < 0) {
- (*env)->ReleaseStringUTFChars(env, name, name_utf);
- return -1;
- }
-
- name_utf = (*env)->GetStringUTFChars(env, name, &isCopy);
-
- ret = getFlags(sock, name_utf, &flags);
-
- close(sock);
+ if ((sock = openSocketWithFallback(env, name_utf)) < 0) {
(*env)->ReleaseStringUTFChars(env, name, name_utf);
+ return -1;
+ }
- if (ret < 0) {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "IOCTL SIOCGLIFFLAGS failed");
- return -1;
- }
+ name_utf = (*env)->GetStringUTFChars(env, name, &isCopy);
- return flags;
+ ret = getFlags(sock, name_utf, &flags);
+
+ close(sock);
+ (*env)->ReleaseStringUTFChars(env, name, name_utf);
+
+ if (ret < 0) {
+ NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "IOCTL SIOCGLIFFLAGS failed");
+ return -1;
+ }
+
+ return flags;
}
@@ -590,442 +594,442 @@
* interface.
*/
jobject createNetworkInterface(JNIEnv *env, netif *ifs) {
- jobject netifObj;
- jobject name;
- jobjectArray addrArr;
- jobjectArray bindArr;
- jobjectArray childArr;
- netaddr *addrs;
- jint addr_index, addr_count, bind_index;
- jint child_count, child_index;
- netaddr *addrP;
- netif *childP;
- jobject tmp;
+ jobject netifObj;
+ jobject name;
+ jobjectArray addrArr;
+ jobjectArray bindArr;
+ jobjectArray childArr;
+ netaddr *addrs;
+ jint addr_index, addr_count, bind_index;
+ jint child_count, child_index;
+ netaddr *addrP;
+ netif *childP;
+ jobject tmp;
- /*
- * Create a NetworkInterface object and populate it
- */
- netifObj = (*env)->NewObject(env, ni_class, ni_ctrID);
- name = (*env)->NewStringUTF(env, ifs->name);
- if (netifObj == NULL || name == NULL) {
- return NULL;
- }
- (*env)->SetObjectField(env, netifObj, ni_nameID, name);
- (*env)->SetObjectField(env, netifObj, ni_descID, name);
- (*env)->SetIntField(env, netifObj, ni_indexID, ifs->index);
- (*env)->SetBooleanField(env, netifObj, ni_virutalID, ifs->virtual ? JNI_TRUE : JNI_FALSE);
+ /*
+ * Create a NetworkInterface object and populate it
+ */
+ netifObj = (*env)->NewObject(env, ni_class, ni_ctrID);
+ name = (*env)->NewStringUTF(env, ifs->name);
+ if (netifObj == NULL || name == NULL) {
+ return NULL;
+ }
+ (*env)->SetObjectField(env, netifObj, ni_nameID, name);
+ (*env)->SetObjectField(env, netifObj, ni_descID, name);
+ (*env)->SetIntField(env, netifObj, ni_indexID, ifs->index);
+ (*env)->SetBooleanField(env, netifObj, ni_virutalID, ifs->virtual ? JNI_TRUE : JNI_FALSE);
- /*
- * Count the number of address on this interface
- */
- addr_count = 0;
- addrP = ifs->addr;
- while (addrP != NULL) {
- addr_count++;
- addrP = addrP->next;
- }
+ /*
+ * Count the number of address on this interface
+ */
+ addr_count = 0;
+ addrP = ifs->addr;
+ while (addrP != NULL) {
+ addr_count++;
+ addrP = addrP->next;
+ }
- /*
- * Create the array of InetAddresses
- */
- addrArr = (*env)->NewObjectArray(env, addr_count, ni_iacls, NULL);
- if (addrArr == NULL) {
- return NULL;
- }
+ /*
+ * Create the array of InetAddresses
+ */
+ addrArr = (*env)->NewObjectArray(env, addr_count, ni_iacls, NULL);
+ if (addrArr == NULL) {
+ return NULL;
+ }
- bindArr = (*env)->NewObjectArray(env, addr_count, ni_ibcls, NULL);
- if (bindArr == NULL) {
- return NULL;
- }
- addrP = ifs->addr;
- addr_index = 0;
- bind_index = 0;
- while (addrP != NULL) {
- jobject iaObj = NULL;
- jobject ibObj = NULL;
+ bindArr = (*env)->NewObjectArray(env, addr_count, ni_ibcls, NULL);
+ if (bindArr == NULL) {
+ return NULL;
+ }
+ addrP = ifs->addr;
+ addr_index = 0;
+ bind_index = 0;
+ while (addrP != NULL) {
+ jobject iaObj = NULL;
+ jobject ibObj = NULL;
- if (addrP->family == AF_INET) {
- iaObj = (*env)->NewObject(env, ni_ia4cls, ni_ia4ctrID);
- if (iaObj) {
- setInetAddress_addr(env, iaObj, htonl(((struct sockaddr_in*)addrP->addr)->sin_addr.s_addr));
- }
- ibObj = (*env)->NewObject(env, ni_ibcls, ni_ibctrID);
- if (ibObj) {
- (*env)->SetObjectField(env, ibObj, ni_ibaddressID, iaObj);
- if (addrP->brdcast) {
- jobject ia2Obj = NULL;
- ia2Obj = (*env)->NewObject(env, ni_ia4cls, ni_ia4ctrID);
- if (ia2Obj) {
- setInetAddress_addr(env, ia2Obj, htonl(((struct sockaddr_in*)addrP->brdcast)->sin_addr.s_addr));
- (*env)->SetObjectField(env, ibObj, ni_ib4broadcastID, ia2Obj);
- (*env)->SetShortField(env, ibObj, ni_ib4maskID, addrP->mask);
- }
- }
- (*env)->SetObjectArrayElement(env, bindArr, bind_index++, ibObj);
- }
+ if (addrP->family == AF_INET) {
+ iaObj = (*env)->NewObject(env, ni_ia4cls, ni_ia4ctrID);
+ if (iaObj) {
+ setInetAddress_addr(env, iaObj, htonl(((struct sockaddr_in*)addrP->addr)->sin_addr.s_addr));
+ }
+ ibObj = (*env)->NewObject(env, ni_ibcls, ni_ibctrID);
+ if (ibObj) {
+ (*env)->SetObjectField(env, ibObj, ni_ibaddressID, iaObj);
+ if (addrP->brdcast) {
+ jobject ia2Obj = NULL;
+ ia2Obj = (*env)->NewObject(env, ni_ia4cls, ni_ia4ctrID);
+ if (ia2Obj) {
+ setInetAddress_addr(env, ia2Obj, htonl(((struct sockaddr_in*)addrP->brdcast)->sin_addr.s_addr));
+ (*env)->SetObjectField(env, ibObj, ni_ib4broadcastID, ia2Obj);
+ (*env)->SetShortField(env, ibObj, ni_ib4maskID, addrP->mask);
+ }
}
+ (*env)->SetObjectArrayElement(env, bindArr, bind_index++, ibObj);
+ }
+ }
#ifdef AF_INET6
- if (addrP->family == AF_INET6) {
- int scope=0;
- iaObj = (*env)->NewObject(env, ni_ia6cls, ni_ia6ctrID);
- if (iaObj) {
- jbyteArray ipaddress = (*env)->NewByteArray(env, 16);
- if (ipaddress == NULL) {
- return NULL;
- }
- (*env)->SetByteArrayRegion(env, ipaddress, 0, 16,
- (jbyte *)&(((struct sockaddr_in6*)addrP->addr)->sin6_addr));
-
- scope = ((struct sockaddr_in6*)addrP->addr)->sin6_scope_id;
-
- if (scope != 0) { /* zero is default value, no need to set */
- (*env)->SetIntField(env, iaObj, ia6_scopeidID, scope);
- (*env)->SetBooleanField(env, iaObj, ia6_scopeidsetID, JNI_TRUE);
- (*env)->SetObjectField(env, iaObj, ia6_scopeifnameID, netifObj);
- }
- (*env)->SetObjectField(env, iaObj, ni_ia6ipaddressID, ipaddress);
- }
- ibObj = (*env)->NewObject(env, ni_ibcls, ni_ibctrID);
- if (ibObj) {
- (*env)->SetObjectField(env, ibObj, ni_ibaddressID, iaObj);
- (*env)->SetShortField(env, ibObj, ni_ib4maskID, addrP->mask);
- (*env)->SetObjectArrayElement(env, bindArr, bind_index++, ibObj);
- }
+ if (addrP->family == AF_INET6) {
+ int scope=0;
+ iaObj = (*env)->NewObject(env, ni_ia6cls, ni_ia6ctrID);
+ if (iaObj) {
+ jbyteArray ipaddress = (*env)->NewByteArray(env, 16);
+ if (ipaddress == NULL) {
+ return NULL;
}
+ (*env)->SetByteArrayRegion(env, ipaddress, 0, 16,
+ (jbyte *)&(((struct sockaddr_in6*)addrP->addr)->sin6_addr));
+
+ scope = ((struct sockaddr_in6*)addrP->addr)->sin6_scope_id;
+
+ if (scope != 0) { /* zero is default value, no need to set */
+ (*env)->SetIntField(env, iaObj, ia6_scopeidID, scope);
+ (*env)->SetBooleanField(env, iaObj, ia6_scopeidsetID, JNI_TRUE);
+ (*env)->SetObjectField(env, iaObj, ia6_scopeifnameID, netifObj);
+ }
+ (*env)->SetObjectField(env, iaObj, ni_ia6ipaddressID, ipaddress);
+ }
+ ibObj = (*env)->NewObject(env, ni_ibcls, ni_ibctrID);
+ if (ibObj) {
+ (*env)->SetObjectField(env, ibObj, ni_ibaddressID, iaObj);
+ (*env)->SetShortField(env, ibObj, ni_ib4maskID, addrP->mask);
+ (*env)->SetObjectArrayElement(env, bindArr, bind_index++, ibObj);
+ }
+ }
#endif
- if (iaObj == NULL) {
- return NULL;
- }
-
- (*env)->SetObjectArrayElement(env, addrArr, addr_index++, iaObj);
- addrP = addrP->next;
+ if (iaObj == NULL) {
+ return NULL;
}
- /*
- * See if there is any virtual interface attached to this one.
- */
- child_count = 0;
- childP = ifs->childs;
- while (childP) {
- child_count++;
- childP = childP->next;
- }
+ (*env)->SetObjectArrayElement(env, addrArr, addr_index++, iaObj);
+ addrP = addrP->next;
+ }
- childArr = (*env)->NewObjectArray(env, child_count, ni_class, NULL);
- if (childArr == NULL) {
- return NULL;
- }
+ /*
+ * See if there is any virtual interface attached to this one.
+ */
+ child_count = 0;
+ childP = ifs->childs;
+ while (childP) {
+ child_count++;
+ childP = childP->next;
+ }
- /*
- * Create the NetworkInterface instances for the sub-interfaces as
- * well.
- */
- child_index = 0;
- childP = ifs->childs;
- while(childP) {
- tmp = createNetworkInterface(env, childP);
- if (tmp == NULL) {
- return NULL;
- }
- (*env)->SetObjectField(env, tmp, ni_parentID, netifObj);
- (*env)->SetObjectArrayElement(env, childArr, child_index++, tmp);
- childP = childP->next;
- }
- (*env)->SetObjectField(env, netifObj, ni_addrsID, addrArr);
- (*env)->SetObjectField(env, netifObj, ni_bindsID, bindArr);
- (*env)->SetObjectField(env, netifObj, ni_childsID, childArr);
+ childArr = (*env)->NewObjectArray(env, child_count, ni_class, NULL);
+ if (childArr == NULL) {
+ return NULL;
+ }
- /* return the NetworkInterface */
- return netifObj;
+ /*
+ * Create the NetworkInterface instances for the sub-interfaces as
+ * well.
+ */
+ child_index = 0;
+ childP = ifs->childs;
+ while(childP) {
+ tmp = createNetworkInterface(env, childP);
+ if (tmp == NULL) {
+ return NULL;
+ }
+ (*env)->SetObjectField(env, tmp, ni_parentID, netifObj);
+ (*env)->SetObjectArrayElement(env, childArr, child_index++, tmp);
+ childP = childP->next;
+ }
+ (*env)->SetObjectField(env, netifObj, ni_addrsID, addrArr);
+ (*env)->SetObjectField(env, netifObj, ni_bindsID, bindArr);
+ (*env)->SetObjectField(env, netifObj, ni_childsID, childArr);
+
+ /* return the NetworkInterface */
+ return netifObj;
}
/*
* Enumerates all interfaces
*/
static netif *enumInterfaces(JNIEnv *env) {
- netif *ifs;
- int sock;
+ netif *ifs;
+ int sock;
- /*
- * Enumerate IPv4 addresses
- */
+ /*
+ * Enumerate IPv4 addresses
+ */
- sock = openSocket(env, AF_INET);
- if (sock < 0 && (*env)->ExceptionOccurred(env)) {
- return NULL;
- }
+ sock = openSocket(env, AF_INET);
+ if (sock < 0 && (*env)->ExceptionOccurred(env)) {
+ return NULL;
+ }
- ifs = enumIPv4Interfaces(env, sock, NULL);
- close(sock);
+ ifs = enumIPv4Interfaces(env, sock, NULL);
+ close(sock);
- if (ifs == NULL && (*env)->ExceptionOccurred(env)) {
- return NULL;
- }
+ if (ifs == NULL && (*env)->ExceptionOccurred(env)) {
+ return NULL;
+ }
- /* return partial list if exception occure in the middle of process ???*/
+ /* return partial list if exception occure in the middle of process ???*/
- /*
- * If IPv6 is available then enumerate IPv6 addresses.
- */
+ /*
+ * If IPv6 is available then enumerate IPv6 addresses.
+ */
#ifdef AF_INET6
- /* User can disable ipv6 expicitly by -Djava.net.preferIPv4Stack=true,
- * so we have to call ipv6_available()
- */
- if (ipv6_available()) {
+ /* User can disable ipv6 expicitly by -Djava.net.preferIPv4Stack=true,
+ * so we have to call ipv6_available()
+ */
+ if (ipv6_available()) {
- sock = openSocket(env, AF_INET6);
- if (sock < 0 && (*env)->ExceptionOccurred(env)) {
- freeif(ifs);
- return NULL;
- }
+ sock = openSocket(env, AF_INET6);
+ if (sock < 0 && (*env)->ExceptionOccurred(env)) {
+ freeif(ifs);
+ return NULL;
+ }
- ifs = enumIPv6Interfaces(env, sock, ifs);
- close(sock);
+ ifs = enumIPv6Interfaces(env, sock, ifs);
+ close(sock);
- if ((*env)->ExceptionOccurred(env)) {
- freeif(ifs);
- return NULL;
- }
+ if ((*env)->ExceptionOccurred(env)) {
+ freeif(ifs);
+ return NULL;
+ }
- }
+ }
#endif
- return ifs;
+ return ifs;
}
#define CHECKED_MALLOC3(_pointer,_type,_size) \
- do{ \
- _pointer = (_type)malloc( _size ); \
- if (_pointer == NULL) { \
- JNU_ThrowOutOfMemoryError(env, "Native heap allocation failed"); \
- return ifs; /* return untouched list */ \
- } \
- } while(0)
+ do{ \
+ _pointer = (_type)malloc( _size ); \
+ if (_pointer == NULL) { \
+ JNU_ThrowOutOfMemoryError(env, "Native heap allocation failed"); \
+ return ifs; /* return untouched list */ \
+ } \
+ } while(0)
/*
* Free an interface list (including any attached addresses)
*/
void freeif(netif *ifs) {
- netif *currif = ifs;
- netif *child = NULL;
+ netif *currif = ifs;
+ netif *child = NULL;
- while (currif != NULL) {
- netaddr *addrP = currif->addr;
- while (addrP != NULL) {
- netaddr *next = addrP->next;
- free(addrP);
- addrP = next;
- }
-
- /*
- * Don't forget to free the sub-interfaces.
- */
- if (currif->childs != NULL) {
- freeif(currif->childs);
- }
-
- ifs = currif->next;
- free(currif);
- currif = ifs;
+ while (currif != NULL) {
+ netaddr *addrP = currif->addr;
+ while (addrP != NULL) {
+ netaddr *next = addrP->next;
+ free(addrP);
+ addrP = next;
}
+
+ /*
+ * Don't forget to free the sub-interfaces.
+ */
+ if (currif->childs != NULL) {
+ freeif(currif->childs);
+ }
+
+ ifs = currif->next;
+ free(currif);
+ currif = ifs;
+ }
}
netif *addif(JNIEnv *env, int sock, const char * if_name,
netif *ifs, struct sockaddr* ifr_addrP, int family,
short prefix)
{
- netif *currif = ifs, *parent;
- netaddr *addrP;
+ netif *currif = ifs, *parent;
+ netaddr *addrP;
#ifdef LIFNAMSIZ
- int ifnam_size = LIFNAMSIZ;
- char name[LIFNAMSIZ], vname[LIFNAMSIZ];
+ int ifnam_size = LIFNAMSIZ;
+ char name[LIFNAMSIZ], vname[LIFNAMSIZ];
#else
- int ifnam_size = IFNAMSIZ;
- char name[IFNAMSIZ], vname[IFNAMSIZ];
+ int ifnam_size = IFNAMSIZ;
+ char name[IFNAMSIZ], vname[IFNAMSIZ];
#endif
- char *name_colonP;
- int mask;
- int isVirtual = 0;
- int addr_size;
- int flags = 0;
+ char *name_colonP;
+ int mask;
+ int isVirtual = 0;
+ int addr_size;
+ int flags = 0;
- /*
- * If the interface name is a logical interface then we
- * remove the unit number so that we have the physical
- * interface (eg: hme0:1 -> hme0). NetworkInterface
- * currently doesn't have any concept of physical vs.
- * logical interfaces.
- */
- strncpy(name, if_name, ifnam_size);
- name[ifnam_size - 1] = '\0';
- *vname = 0;
+ /*
+ * If the interface name is a logical interface then we
+ * remove the unit number so that we have the physical
+ * interface (eg: hme0:1 -> hme0). NetworkInterface
+ * currently doesn't have any concept of physical vs.
+ * logical interfaces.
+ */
+ strncpy(name, if_name, ifnam_size);
+ name[ifnam_size - 1] = '\0';
+ *vname = 0;
- /*
- * Create and populate the netaddr node. If allocation fails
- * return an un-updated list.
- */
- /*Allocate for addr and brdcast at once*/
+ /*
+ * Create and populate the netaddr node. If allocation fails
+ * return an un-updated list.
+ */
+ /*Allocate for addr and brdcast at once*/
#ifdef AF_INET6
- addr_size = (family == AF_INET) ? sizeof(struct sockaddr_in) : sizeof(struct sockaddr_in6);
+ addr_size = (family == AF_INET) ? sizeof(struct sockaddr_in) : sizeof(struct sockaddr_in6);
#else
- addr_size = sizeof(struct sockaddr_in);
+ addr_size = sizeof(struct sockaddr_in);
#endif
- CHECKED_MALLOC3(addrP, netaddr *, sizeof(netaddr)+2*addr_size);
- addrP->addr = (struct sockaddr *)( (char *) addrP+sizeof(netaddr) );
- memcpy(addrP->addr, ifr_addrP, addr_size);
+ CHECKED_MALLOC3(addrP, netaddr *, sizeof(netaddr)+2*addr_size);
+ addrP->addr = (struct sockaddr *)( (char *) addrP+sizeof(netaddr) );
+ memcpy(addrP->addr, ifr_addrP, addr_size);
- addrP->family = family;
- addrP->brdcast = NULL;
- addrP->mask = prefix;
- addrP->next = 0;
- if (family == AF_INET) {
- /*
- * Deal with brodcast addr & subnet mask
- */
- struct sockaddr * brdcast_to = (struct sockaddr *) ((char *) addrP + sizeof(netaddr) + addr_size);
- addrP->brdcast = getBroadcast(env, sock, name, brdcast_to );
-
- if (addrP->brdcast && (mask = getSubnet(env, sock, name)) != -1) {
- addrP->mask = mask;
- }
- }
-
- /**
- * Deal with virtual interface with colon notaion e.g. eth0:1
- */
- name_colonP = strchr(name, ':');
- if (name_colonP != NULL) {
- /**
- * This is a virtual interface. If we are able to access the parent
- * we need to create a new entry if it doesn't exist yet *and* update
- * the 'parent' interface with the new records.
- */
- *name_colonP = 0;
- if (getFlags(sock, name, &flags) < 0 || flags < 0) {
- // failed to access parent interface do not create parent.
- // We are a virtual interface with no parent.
- isVirtual = 1;
- *name_colonP = ':';
- }
- else{
- // Got access to parent, so create it if necessary.
- // Save original name to vname and truncate name by ':'
- memcpy(vname, name, sizeof(vname) );
- vname[name_colonP - name] = ':';
- }
- }
-
+ addrP->family = family;
+ addrP->brdcast = NULL;
+ addrP->mask = prefix;
+ addrP->next = 0;
+ if (family == AF_INET) {
/*
- * Check if this is a "new" interface. Use the interface
- * name for matching because index isn't supported on
- * Solaris 2.6 & 7.
+ * Deal with brodcast addr & subnet mask
*/
+ struct sockaddr * brdcast_to = (struct sockaddr *) ((char *) addrP + sizeof(netaddr) + addr_size);
+ addrP->brdcast = getBroadcast(env, sock, name, brdcast_to );
+
+ if (addrP->brdcast && (mask = getSubnet(env, sock, name)) != -1) {
+ addrP->mask = mask;
+ }
+ }
+
+ /**
+ * Deal with virtual interface with colon notaion e.g. eth0:1
+ */
+ name_colonP = strchr(name, ':');
+ if (name_colonP != NULL) {
+ /**
+ * This is a virtual interface. If we are able to access the parent
+ * we need to create a new entry if it doesn't exist yet *and* update
+ * the 'parent' interface with the new records.
+ */
+ *name_colonP = 0;
+ if (getFlags(sock, name, &flags) < 0 || flags < 0) {
+ // failed to access parent interface do not create parent.
+ // We are a virtual interface with no parent.
+ isVirtual = 1;
+ *name_colonP = ':';
+ }
+ else{
+ // Got access to parent, so create it if necessary.
+ // Save original name to vname and truncate name by ':'
+ memcpy(vname, name, sizeof(vname) );
+ vname[name_colonP - name] = ':';
+ }
+ }
+
+ /*
+ * Check if this is a "new" interface. Use the interface
+ * name for matching because index isn't supported on
+ * Solaris 2.6 & 7.
+ */
+ while (currif != NULL) {
+ if (strcmp(name, currif->name) == 0) {
+ break;
+ }
+ currif = currif->next;
+ }
+
+ /*
+ * If "new" then create an netif structure and
+ * insert it onto the list.
+ */
+ if (currif == NULL) {
+ CHECKED_MALLOC3(currif, netif *, sizeof(netif) + ifnam_size);
+ currif->name = (char *) currif+sizeof(netif);
+ strncpy(currif->name, name, ifnam_size);
+ currif->name[ifnam_size - 1] = '\0';
+ currif->index = getIndex(sock, name);
+ currif->addr = NULL;
+ currif->childs = NULL;
+ currif->virtual = isVirtual;
+ currif->next = ifs;
+ ifs = currif;
+ }
+
+ /*
+ * Finally insert the address on the interface
+ */
+ addrP->next = currif->addr;
+ currif->addr = addrP;
+
+ parent = currif;
+
+ /**
+ * Let's deal with the virtual interface now.
+ */
+ if (vname[0]) {
+ netaddr *tmpaddr;
+
+ currif = parent->childs;
+
while (currif != NULL) {
- if (strcmp(name, currif->name) == 0) {
- break;
- }
- currif = currif->next;
+ if (strcmp(vname, currif->name) == 0) {
+ break;
+ }
+ currif = currif->next;
}
- /*
- * If "new" then create an netif structure and
- * insert it onto the list.
- */
if (currif == NULL) {
- CHECKED_MALLOC3(currif, netif *, sizeof(netif) + ifnam_size);
- currif->name = (char *) currif+sizeof(netif);
- strncpy(currif->name, name, ifnam_size);
- currif->name[ifnam_size - 1] = '\0';
- currif->index = getIndex(sock, name);
- currif->addr = NULL;
- currif->childs = NULL;
- currif->virtual = isVirtual;
- currif->next = ifs;
- ifs = currif;
+ CHECKED_MALLOC3(currif, netif *, sizeof(netif) + ifnam_size);
+ currif->name = (char *) currif + sizeof(netif);
+ strncpy(currif->name, vname, ifnam_size);
+ currif->name[ifnam_size - 1] = '\0';
+ currif->index = getIndex(sock, vname);
+ currif->addr = NULL;
+ /* Need to duplicate the addr entry? */
+ currif->virtual = 1;
+ currif->childs = NULL;
+ currif->next = parent->childs;
+ parent->childs = currif;
}
- /*
- * Finally insert the address on the interface
- */
- addrP->next = currif->addr;
- currif->addr = addrP;
-
- parent = currif;
-
- /**
- * Let's deal with the virtual interface now.
- */
- if (vname[0]) {
- netaddr *tmpaddr;
-
- currif = parent->childs;
-
- while (currif != NULL) {
- if (strcmp(vname, currif->name) == 0) {
- break;
- }
- currif = currif->next;
- }
-
- if (currif == NULL) {
- CHECKED_MALLOC3(currif, netif *, sizeof(netif) + ifnam_size);
- currif->name = (char *) currif + sizeof(netif);
- strncpy(currif->name, vname, ifnam_size);
- currif->name[ifnam_size - 1] = '\0';
- currif->index = getIndex(sock, vname);
- currif->addr = NULL;
- /* Need to duplicate the addr entry? */
- currif->virtual = 1;
- currif->childs = NULL;
- currif->next = parent->childs;
- parent->childs = currif;
- }
-
- CHECKED_MALLOC3(tmpaddr, netaddr *, sizeof(netaddr)+2*addr_size);
- memcpy(tmpaddr, addrP, sizeof(netaddr));
- if (addrP->addr != NULL) {
- tmpaddr->addr = (struct sockaddr *) ( (char*)tmpaddr + sizeof(netaddr) ) ;
- memcpy(tmpaddr->addr, addrP->addr, addr_size);
- }
-
- if (addrP->brdcast != NULL) {
- tmpaddr->brdcast = (struct sockaddr *) ((char *) tmpaddr + sizeof(netaddr)+addr_size);
- memcpy(tmpaddr->brdcast, addrP->brdcast, addr_size);
- }
-
- tmpaddr->next = currif->addr;
- currif->addr = tmpaddr;
+ CHECKED_MALLOC3(tmpaddr, netaddr *, sizeof(netaddr)+2*addr_size);
+ memcpy(tmpaddr, addrP, sizeof(netaddr));
+ if (addrP->addr != NULL) {
+ tmpaddr->addr = (struct sockaddr *) ( (char*)tmpaddr + sizeof(netaddr) ) ;
+ memcpy(tmpaddr->addr, addrP->addr, addr_size);
}
- return ifs;
+ if (addrP->brdcast != NULL) {
+ tmpaddr->brdcast = (struct sockaddr *) ((char *) tmpaddr + sizeof(netaddr)+addr_size);
+ memcpy(tmpaddr->brdcast, addrP->brdcast, addr_size);
+ }
+
+ tmpaddr->next = currif->addr;
+ currif->addr = tmpaddr;
+ }
+
+ return ifs;
}
/* Open socket for further ioct calls
* proto is AF_INET/AF_INET6
*/
static int openSocket(JNIEnv *env, int proto){
- int sock;
+ int sock;
- if ((sock = JVM_Socket(proto, SOCK_DGRAM, 0)) < 0) {
- /*
- * If EPROTONOSUPPORT is returned it means we don't have
- * support for this proto so don't throw an exception.
- */
- if (errno != EPROTONOSUPPORT) {
- NET_ThrowByNameWithLastError(env , JNU_JAVANETPKG "SocketException", "Socket creation failed");
- }
- return -1;
+ if ((sock = JVM_Socket(proto, SOCK_DGRAM, 0)) < 0) {
+ /*
+ * If EPROTONOSUPPORT is returned it means we don't have
+ * support for this proto so don't throw an exception.
+ */
+ if (errno != EPROTONOSUPPORT) {
+ NET_ThrowByNameWithLastError(env , JNU_JAVANETPKG "SocketException", "Socket creation failed");
}
+ return -1;
+ }
- return sock;
+ return sock;
}
@@ -1037,85 +1041,85 @@
#ifdef AF_INET6
static int openSocketWithFallback(JNIEnv *env, const char *ifname){
- int sock;
- struct ifreq if2;
+ int sock;
+ struct ifreq if2;
- if ((sock = JVM_Socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
- if (errno == EPROTONOSUPPORT){
- if ( (sock = JVM_Socket(AF_INET6, SOCK_DGRAM, 0)) < 0 ){
- NET_ThrowByNameWithLastError(env , JNU_JAVANETPKG "SocketException", "IPV6 Socket creation failed");
- return -1;
- }
- }
- else{ // errno is not NOSUPPORT
- NET_ThrowByNameWithLastError(env , JNU_JAVANETPKG "SocketException", "IPV4 Socket creation failed");
- return -1;
- }
- }
+ if ((sock = JVM_Socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
+ if (errno == EPROTONOSUPPORT){
+ if ( (sock = JVM_Socket(AF_INET6, SOCK_DGRAM, 0)) < 0 ){
+ NET_ThrowByNameWithLastError(env , JNU_JAVANETPKG "SocketException", "IPV6 Socket creation failed");
+ return -1;
+ }
+ }
+ else{ // errno is not NOSUPPORT
+ NET_ThrowByNameWithLastError(env , JNU_JAVANETPKG "SocketException", "IPV4 Socket creation failed");
+ return -1;
+ }
+ }
- /* Linux starting from 2.6.? kernel allows ioctl call with either IPv4 or IPv6 socket regardless of type
- of address of an interface */
+ /* Linux starting from 2.6.? kernel allows ioctl call with either IPv4 or IPv6 socket regardless of type
+ of address of an interface */
- return sock;
+ return sock;
}
#else
static int openSocketWithFallback(JNIEnv *env, const char *ifname){
- return openSocket(env,AF_INET);
+ return openSocket(env,AF_INET);
}
#endif
static netif *enumIPv4Interfaces(JNIEnv *env, int sock, netif *ifs) {
- struct ifconf ifc;
- struct ifreq *ifreqP;
- char *buf;
- int numifs;
- unsigned i;
+ struct ifconf ifc;
+ struct ifreq *ifreqP;
+ char *buf;
+ int numifs;
+ unsigned i;
- /* need to do a dummy SIOCGIFCONF to determine the buffer size.
- * SIOCGIFCOUNT doesn't work
- */
- ifc.ifc_buf = NULL;
- if (ioctl(sock, SIOCGIFCONF, (char *)&ifc) < 0) {
- NET_ThrowByNameWithLastError(env , JNU_JAVANETPKG "SocketException", "ioctl SIOCGIFCONF failed");
- return ifs;
- }
-
- CHECKED_MALLOC3(buf,char *, ifc.ifc_len);
-
- ifc.ifc_buf = buf;
- if (ioctl(sock, SIOCGIFCONF, (char *)&ifc) < 0) {
- NET_ThrowByNameWithLastError(env , JNU_JAVANETPKG "SocketException", "ioctl SIOCGIFCONF failed");
- (void) free(buf);
- return ifs;
- }
-
- /*
- * Iterate through each interface
- */
- ifreqP = ifc.ifc_req;
- for (i=0; i<ifc.ifc_len/sizeof (struct ifreq); i++, ifreqP++) {
- /*
- * Add to the list
- */
- ifs = addif(env, sock, ifreqP->ifr_name, ifs, (struct sockaddr *) & (ifreqP->ifr_addr), AF_INET, 0);
-
- /*
- * If an exception occurred then free the list
- */
- if ((*env)->ExceptionOccurred(env)) {
- free(buf);
- freeif(ifs);
- return NULL;
- }
- }
-
- /*
- * Free socket and buffer
- */
- free(buf);
+ /* need to do a dummy SIOCGIFCONF to determine the buffer size.
+ * SIOCGIFCOUNT doesn't work
+ */
+ ifc.ifc_buf = NULL;
+ if (ioctl(sock, SIOCGIFCONF, (char *)&ifc) < 0) {
+ NET_ThrowByNameWithLastError(env , JNU_JAVANETPKG "SocketException", "ioctl SIOCGIFCONF failed");
return ifs;
+ }
+
+ CHECKED_MALLOC3(buf,char *, ifc.ifc_len);
+
+ ifc.ifc_buf = buf;
+ if (ioctl(sock, SIOCGIFCONF, (char *)&ifc) < 0) {
+ NET_ThrowByNameWithLastError(env , JNU_JAVANETPKG "SocketException", "ioctl SIOCGIFCONF failed");
+ (void) free(buf);
+ return ifs;
+ }
+
+ /*
+ * Iterate through each interface
+ */
+ ifreqP = ifc.ifc_req;
+ for (i=0; i<ifc.ifc_len/sizeof (struct ifreq); i++, ifreqP++) {
+ /*
+ * Add to the list
+ */
+ ifs = addif(env, sock, ifreqP->ifr_name, ifs, (struct sockaddr *) & (ifreqP->ifr_addr), AF_INET, 0);
+
+ /*
+ * If an exception occurred then free the list
+ */
+ if ((*env)->ExceptionOccurred(env)) {
+ free(buf);
+ freeif(ifs);
+ return NULL;
+ }
+ }
+
+ /*
+ * Free socket and buffer
+ */
+ free(buf);
+ return ifs;
}
@@ -1125,61 +1129,61 @@
#ifdef AF_INET6
static netif *enumIPv6Interfaces(JNIEnv *env, int sock, netif *ifs) {
- FILE *f;
- char addr6[40], devname[21];
- char addr6p[8][5];
- int plen, scope, dad_status, if_idx;
- uint8_t ipv6addr[16];
+ FILE *f;
+ char addr6[40], devname[21];
+ char addr6p[8][5];
+ int plen, scope, dad_status, if_idx;
+ uint8_t ipv6addr[16];
- if ((f = fopen(_PATH_PROCNET_IFINET6, "r")) != NULL) {
- while (fscanf(f, "%4s%4s%4s%4s%4s%4s%4s%4s %08x %02x %02x %02x %20s\n",
- addr6p[0], addr6p[1], addr6p[2], addr6p[3], addr6p[4], addr6p[5], addr6p[6], addr6p[7],
- &if_idx, &plen, &scope, &dad_status, devname) != EOF) {
+ if ((f = fopen(_PATH_PROCNET_IFINET6, "r")) != NULL) {
+ while (fscanf(f, "%4s%4s%4s%4s%4s%4s%4s%4s %08x %02x %02x %02x %20s\n",
+ addr6p[0], addr6p[1], addr6p[2], addr6p[3], addr6p[4], addr6p[5], addr6p[6], addr6p[7],
+ &if_idx, &plen, &scope, &dad_status, devname) != EOF) {
- struct netif *ifs_ptr = NULL;
- struct netif *last_ptr = NULL;
- struct sockaddr_in6 addr;
+ struct netif *ifs_ptr = NULL;
+ struct netif *last_ptr = NULL;
+ struct sockaddr_in6 addr;
- sprintf(addr6, "%s:%s:%s:%s:%s:%s:%s:%s",
- addr6p[0], addr6p[1], addr6p[2], addr6p[3], addr6p[4], addr6p[5], addr6p[6], addr6p[7]);
- inet_pton(AF_INET6, addr6, ipv6addr);
+ sprintf(addr6, "%s:%s:%s:%s:%s:%s:%s:%s",
+ addr6p[0], addr6p[1], addr6p[2], addr6p[3], addr6p[4], addr6p[5], addr6p[6], addr6p[7]);
+ inet_pton(AF_INET6, addr6, ipv6addr);
- memset(&addr, 0, sizeof(struct sockaddr_in6));
- memcpy((void*)addr.sin6_addr.s6_addr, (const void*)ipv6addr, 16);
+ memset(&addr, 0, sizeof(struct sockaddr_in6));
+ memcpy((void*)addr.sin6_addr.s6_addr, (const void*)ipv6addr, 16);
- addr.sin6_scope_id = if_idx;
+ addr.sin6_scope_id = if_idx;
- ifs = addif(env, sock, devname, ifs, (struct sockaddr *)&addr, AF_INET6, plen);
+ ifs = addif(env, sock, devname, ifs, (struct sockaddr *)&addr, AF_INET6, plen);
- /*
- * If an exception occurred then return the list as is.
- */
- if ((*env)->ExceptionOccurred(env)) {
- fclose(f);
- return ifs;
- }
- }
- fclose(f);
+ /*
+ * If an exception occurred then return the list as is.
+ */
+ if ((*env)->ExceptionOccurred(env)) {
+ fclose(f);
+ return ifs;
+ }
}
- return ifs;
+ fclose(f);
+ }
+ return ifs;
}
#endif
static int getIndex(int sock, const char *name){
- /*
- * Try to get the interface index
- * (Not supported on Solaris 2.6 or 7)
- */
- struct ifreq if2;
- strcpy(if2.ifr_name, name);
+ /*
+ * Try to get the interface index
+ * (Not supported on Solaris 2.6 or 7)
+ */
+ struct ifreq if2;
+ strcpy(if2.ifr_name, name);
- if (ioctl(sock, SIOCGIFINDEX, (char *)&if2) < 0) {
- return -1;
- }
+ if (ioctl(sock, SIOCGIFINDEX, (char *)&if2) < 0) {
+ return -1;
+ }
- return if2.ifr_ifindex;
+ return if2.ifr_ifindex;
}
/**
@@ -1195,19 +1199,19 @@
/* Let's make sure the interface does have a broadcast address */
if (ioctl(sock, SIOCGIFFLAGS, (char *)&if2) < 0) {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "IOCTL SIOCGIFFLAGS failed");
- return ret;
+ NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "IOCTL SIOCGIFFLAGS failed");
+ return ret;
}
if (if2.ifr_flags & IFF_BROADCAST) {
- /* It does, let's retrieve it*/
- if (ioctl(sock, SIOCGIFBRDADDR, (char *)&if2) < 0) {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "IOCTL SIOCGIFBRDADDR failed");
- return ret;
- }
+ /* It does, let's retrieve it*/
+ if (ioctl(sock, SIOCGIFBRDADDR, (char *)&if2) < 0) {
+ NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "IOCTL SIOCGIFBRDADDR failed");
+ return ret;
+ }
- ret = brdcast_store;
- memcpy(ret, &if2.ifr_broadaddr, sizeof(struct sockaddr));
+ ret = brdcast_store;
+ memcpy(ret, &if2.ifr_broadaddr, sizeof(struct sockaddr));
}
return ret;
@@ -1218,26 +1222,26 @@
* interface, if it has one, otherwise return -1.
*/
static short getSubnet(JNIEnv *env, int sock, const char *ifname) {
- unsigned int mask;
- short ret;
- struct ifreq if2;
+ unsigned int mask;
+ short ret;
+ struct ifreq if2;
- memset((char *) &if2, 0, sizeof(if2));
- strcpy(if2.ifr_name, ifname);
+ memset((char *) &if2, 0, sizeof(if2));
+ strcpy(if2.ifr_name, ifname);
- if (ioctl(sock, SIOCGIFNETMASK, (char *)&if2) < 0) {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "IOCTL SIOCGIFNETMASK failed");
- return -1;
- }
+ if (ioctl(sock, SIOCGIFNETMASK, (char *)&if2) < 0) {
+ NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "IOCTL SIOCGIFNETMASK failed");
+ return -1;
+ }
- mask = ntohl(((struct sockaddr_in*)&(if2.ifr_addr))->sin_addr.s_addr);
- ret = 0;
- while (mask) {
- mask <<= 1;
- ret++;
- }
+ mask = ntohl(((struct sockaddr_in*)&(if2.ifr_addr))->sin_addr.s_addr);
+ ret = 0;
+ while (mask) {
+ mask <<= 1;
+ ret++;
+ }
- return ret;
+ return ret;
}
/**
@@ -1246,41 +1250,41 @@
* MAC address. Returns -1 if there is no hardware address on that interface.
*/
static int getMacAddress(JNIEnv *env, int sock, const char* ifname, const struct in_addr* addr, unsigned char *buf) {
- static struct ifreq ifr;
- int i;
+ static struct ifreq ifr;
+ int i;
- strcpy(ifr.ifr_name, ifname);
- if (ioctl(sock, SIOCGIFHWADDR, &ifr) < 0) {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "IOCTL SIOCGIFHWADDR failed");
- return -1;
- }
-
- memcpy(buf, &ifr.ifr_hwaddr.sa_data, IFHWADDRLEN);
-
- /*
- * All bytes to 0 means no hardware address.
- */
-
- for (i = 0; i < IFHWADDRLEN; i++) {
- if (buf[i] != 0)
- return IFHWADDRLEN;
- }
-
+ strcpy(ifr.ifr_name, ifname);
+ if (ioctl(sock, SIOCGIFHWADDR, &ifr) < 0) {
+ NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "IOCTL SIOCGIFHWADDR failed");
return -1;
+ }
+
+ memcpy(buf, &ifr.ifr_hwaddr.sa_data, IFHWADDRLEN);
+
+ /*
+ * All bytes to 0 means no hardware address.
+ */
+
+ for (i = 0; i < IFHWADDRLEN; i++) {
+ if (buf[i] != 0)
+ return IFHWADDRLEN;
+ }
+
+ return -1;
}
static int getMTU(JNIEnv *env, int sock, const char *ifname) {
- struct ifreq if2;
+ struct ifreq if2;
- memset((char *) &if2, 0, sizeof(if2));
- strcpy(if2.ifr_name, ifname);
+ memset((char *) &if2, 0, sizeof(if2));
+ strcpy(if2.ifr_name, ifname);
- if (ioctl(sock, SIOCGIFMTU, (char *)&if2) < 0) {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "IOCTL SIOCGIFMTU failed");
- return -1;
- }
+ if (ioctl(sock, SIOCGIFMTU, (char *)&if2) < 0) {
+ NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "IOCTL SIOCGIFMTU failed");
+ return -1;
+ }
- return if2.ifr_mtu;
+ return if2.ifr_mtu;
}
static int getFlags(int sock, const char *ifname, int *flags) {
@@ -1290,13 +1294,13 @@
strcpy(if2.ifr_name, ifname);
if (ioctl(sock, SIOCGIFFLAGS, (char *)&if2) < 0){
- return -1;
+ return -1;
}
if (sizeof(if2.ifr_flags) == sizeof(short)) {
- *flags = (if2.ifr_flags & 0xffff);
+ *flags = (if2.ifr_flags & 0xffff);
} else {
- *flags = if2.ifr_flags;
+ *flags = if2.ifr_flags;
}
return 0;
}
@@ -1311,52 +1315,52 @@
#ifdef AF_INET6
static int openSocketWithFallback(JNIEnv *env, const char *ifname){
- int sock, alreadyV6 = 0;
- struct lifreq if2;
+ int sock, alreadyV6 = 0;
+ struct lifreq if2;
- if ((sock = JVM_Socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
- if (errno == EPROTONOSUPPORT){
- if ( (sock = JVM_Socket(AF_INET6, SOCK_DGRAM, 0)) < 0 ){
- NET_ThrowByNameWithLastError(env , JNU_JAVANETPKG "SocketException", "IPV6 Socket creation failed");
- return -1;
- }
+ if ((sock = JVM_Socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
+ if (errno == EPROTONOSUPPORT){
+ if ( (sock = JVM_Socket(AF_INET6, SOCK_DGRAM, 0)) < 0 ){
+ NET_ThrowByNameWithLastError(env , JNU_JAVANETPKG "SocketException", "IPV6 Socket creation failed");
+ return -1;
+ }
- alreadyV6=1;
- }
- else{ // errno is not NOSUPPORT
- NET_ThrowByNameWithLastError(env , JNU_JAVANETPKG "SocketException", "IPV4 Socket creation failed");
- return -1;
- }
- }
-
- /**
- * Solaris requires that we have IPv6 socket to query an
- * interface without IPv4 address - check it here
- * POSIX 1 require the kernell to return ENOTTY if the call is
- * unappropriate for device e.g. NETMASK for device having IPv6
- * only address but not all devices follows the standart so
- * fallback on any error. It's not an ecology friendly but more
- * reliable.
- */
-
- if (! alreadyV6 ){
- memset((char *) &if2, 0, sizeof(if2));
- strcpy(if2.lifr_name, ifname);
- if (ioctl(sock, SIOCGLIFNETMASK, (char *)&if2) < 0) {
- close(sock);
- if ( (sock = JVM_Socket(AF_INET6, SOCK_DGRAM, 0)) < 0 ){
- NET_ThrowByNameWithLastError(env , JNU_JAVANETPKG "SocketException", "IPV6 Socket creation failed");
- return -1;
- }
- }
+ alreadyV6=1;
}
+ else{ // errno is not NOSUPPORT
+ NET_ThrowByNameWithLastError(env , JNU_JAVANETPKG "SocketException", "IPV4 Socket creation failed");
+ return -1;
+ }
+ }
- return sock;
+ /**
+ * Solaris requires that we have IPv6 socket to query an
+ * interface without IPv4 address - check it here
+ * POSIX 1 require the kernell to return ENOTTY if the call is
+ * unappropriate for device e.g. NETMASK for device having IPv6
+ * only address but not all devices follows the standart so
+ * fallback on any error. It's not an ecology friendly but more
+ * reliable.
+ */
+
+ if (! alreadyV6 ){
+ memset((char *) &if2, 0, sizeof(if2));
+ strcpy(if2.lifr_name, ifname);
+ if (ioctl(sock, SIOCGLIFNETMASK, (char *)&if2) < 0) {
+ close(sock);
+ if ( (sock = JVM_Socket(AF_INET6, SOCK_DGRAM, 0)) < 0 ){
+ NET_ThrowByNameWithLastError(env , JNU_JAVANETPKG "SocketException", "IPV6 Socket creation failed");
+ return -1;
+ }
+ }
+ }
+
+ return sock;
}
#else
static int openSocketWithFallback(JNIEnv *env, const char *ifname){
- return openSocket(env,AF_INET);
+ return openSocket(env,AF_INET);
}
#endif
@@ -1366,105 +1370,105 @@
*/
static netif *enumIPv4Interfaces(JNIEnv *env, int sock, netif *ifs) {
- return enumIPvXInterfaces(env,sock, ifs, AF_INET);
+ return enumIPvXInterfaces(env,sock, ifs, AF_INET);
}
#ifdef AF_INET6
static netif *enumIPv6Interfaces(JNIEnv *env, int sock, netif *ifs) {
- return enumIPvXInterfaces(env,sock, ifs, AF_INET6);
+ return enumIPvXInterfaces(env,sock, ifs, AF_INET6);
}
#endif
/*
Enumerates and returns all interfaces on Solaris
use the same code for IPv4 and IPv6
- */
+ */
static netif *enumIPvXInterfaces(JNIEnv *env, int sock, netif *ifs, int family) {
- struct lifconf ifc;
- struct lifreq *ifr;
- int n;
- char *buf;
- struct lifnum numifs;
- unsigned bufsize;
+ struct lifconf ifc;
+ struct lifreq *ifr;
+ int n;
+ char *buf;
+ struct lifnum numifs;
+ unsigned bufsize;
- /*
- * Get the interface count
- */
- numifs.lifn_family = family;
- numifs.lifn_flags = 0;
- if (ioctl(sock, SIOCGLIFNUM, (char *)&numifs) < 0) {
- NET_ThrowByNameWithLastError(env , JNU_JAVANETPKG "SocketException", "ioctl SIOCGLIFNUM failed");
- return ifs;
- }
+ /*
+ * Get the interface count
+ */
+ numifs.lifn_family = family;
+ numifs.lifn_flags = 0;
+ if (ioctl(sock, SIOCGLIFNUM, (char *)&numifs) < 0) {
+ NET_ThrowByNameWithLastError(env , JNU_JAVANETPKG "SocketException", "ioctl SIOCGLIFNUM failed");
+ return ifs;
+ }
- /*
- * Enumerate the interface configurations
- */
- bufsize = numifs.lifn_count * sizeof (struct lifreq);
- CHECKED_MALLOC3(buf, char *, bufsize);
+ /*
+ * Enumerate the interface configurations
+ */
+ bufsize = numifs.lifn_count * sizeof (struct lifreq);
+ CHECKED_MALLOC3(buf, char *, bufsize);
- ifc.lifc_family = family;
- ifc.lifc_flags = 0;
- ifc.lifc_len = bufsize;
- ifc.lifc_buf = buf;
- if (ioctl(sock, SIOCGLIFCONF, (char *)&ifc) < 0) {
- NET_ThrowByNameWithLastError(env , JNU_JAVANETPKG "SocketException", "ioctl SIOCGLIFCONF failed");
- free(buf);
- return ifs;
- }
-
- /*
- * Iterate through each interface
- */
- ifr = ifc.lifc_req;
- for (n=0; n<numifs.lifn_count; n++, ifr++) {
- int index = -1;
- struct lifreq if2;
-
- /*
- * Ignore either IPv4 or IPv6 addresses
- */
- if (ifr->lifr_addr.ss_family != family) {
- continue;
- }
-
-#ifdef AF_INET6
- if (ifr->lifr_addr.ss_family == AF_INET6) {
- struct sockaddr_in6 *s6= (struct sockaddr_in6 *)&(ifr->lifr_addr);
- s6->sin6_scope_id = getIndex(sock, ifr->lifr_name);
- }
-#endif
-
- /* add to the list */
- ifs = addif(env, sock,ifr->lifr_name, ifs, (struct sockaddr *)&(ifr->lifr_addr),family, (short) ifr->lifr_addrlen);
-
- /*
- * If an exception occurred we return immediately
- */
- if ((*env)->ExceptionOccurred(env)) {
- free(buf);
- return ifs;
- }
-
- }
-
+ ifc.lifc_family = family;
+ ifc.lifc_flags = 0;
+ ifc.lifc_len = bufsize;
+ ifc.lifc_buf = buf;
+ if (ioctl(sock, SIOCGLIFCONF, (char *)&ifc) < 0) {
+ NET_ThrowByNameWithLastError(env , JNU_JAVANETPKG "SocketException", "ioctl SIOCGLIFCONF failed");
free(buf);
return ifs;
+ }
+
+ /*
+ * Iterate through each interface
+ */
+ ifr = ifc.lifc_req;
+ for (n=0; n<numifs.lifn_count; n++, ifr++) {
+ int index = -1;
+ struct lifreq if2;
+
+ /*
+ * Ignore either IPv4 or IPv6 addresses
+ */
+ if (ifr->lifr_addr.ss_family != family) {
+ continue;
+ }
+
+#ifdef AF_INET6
+ if (ifr->lifr_addr.ss_family == AF_INET6) {
+ struct sockaddr_in6 *s6= (struct sockaddr_in6 *)&(ifr->lifr_addr);
+ s6->sin6_scope_id = getIndex(sock, ifr->lifr_name);
+ }
+#endif
+
+ /* add to the list */
+ ifs = addif(env, sock,ifr->lifr_name, ifs, (struct sockaddr *)&(ifr->lifr_addr),family, (short) ifr->lifr_addrlen);
+
+ /*
+ * If an exception occurred we return immediately
+ */
+ if ((*env)->ExceptionOccurred(env)) {
+ free(buf);
+ return ifs;
+ }
+
+ }
+
+ free(buf);
+ return ifs;
}
static int getIndex(int sock, const char *name){
- /*
- * Try to get the interface index
- * (Not supported on Solaris 2.6 or 7)
- */
- struct lifreq if2;
- strcpy(if2.lifr_name, name);
+ /*
+ * Try to get the interface index
+ * (Not supported on Solaris 2.6 or 7)
+ */
+ struct lifreq if2;
+ strcpy(if2.lifr_name, name);
- if (ioctl(sock, SIOCGLIFINDEX, (char *)&if2) < 0) {
- return -1;
- }
+ if (ioctl(sock, SIOCGLIFINDEX, (char *)&if2) < 0) {
+ return -1;
+ }
- return if2.lifr_index;
+ return if2.lifr_index;
}
/**
@@ -1472,30 +1476,30 @@
* Returns 0 if it doesn't have one.
*/
static struct sockaddr *getBroadcast(JNIEnv *env, int sock, const char *ifname, struct sockaddr *brdcast_store) {
- struct sockaddr *ret = NULL;
- struct lifreq if2;
+ struct sockaddr *ret = NULL;
+ struct lifreq if2;
- memset((char *) &if2, 0, sizeof(if2));
- strcpy(if2.lifr_name, ifname);
+ memset((char *) &if2, 0, sizeof(if2));
+ strcpy(if2.lifr_name, ifname);
- /* Let's make sure the interface does have a broadcast address */
- if (ioctl(sock, SIOCGLIFFLAGS, (char *)&if2) < 0) {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "IOCTL SIOCGLIFFLAGS failed");
- return ret;
- }
-
- if (if2.lifr_flags & IFF_BROADCAST) {
- /* It does, let's retrieve it*/
- if (ioctl(sock, SIOCGLIFBRDADDR, (char *)&if2) < 0) {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "IOCTL SIOCGLIFBRDADDR failed");
- return ret;
- }
-
- ret = brdcast_store;
- memcpy(ret, &if2.lifr_broadaddr, sizeof(struct sockaddr));
- }
-
+ /* Let's make sure the interface does have a broadcast address */
+ if (ioctl(sock, SIOCGLIFFLAGS, (char *)&if2) < 0) {
+ NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "IOCTL SIOCGLIFFLAGS failed");
return ret;
+ }
+
+ if (if2.lifr_flags & IFF_BROADCAST) {
+ /* It does, let's retrieve it*/
+ if (ioctl(sock, SIOCGLIFBRDADDR, (char *)&if2) < 0) {
+ NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "IOCTL SIOCGLIFBRDADDR failed");
+ return ret;
+ }
+
+ ret = brdcast_store;
+ memcpy(ret, &if2.lifr_broadaddr, sizeof(struct sockaddr));
+ }
+
+ return ret;
}
/**
@@ -1503,27 +1507,27 @@
* interface, if it has one, otherwise return -1.
*/
static short getSubnet(JNIEnv *env, int sock, const char *ifname) {
- unsigned int mask;
- short ret;
- struct lifreq if2;
+ unsigned int mask;
+ short ret;
+ struct lifreq if2;
- memset((char *) &if2, 0, sizeof(if2));
- strcpy(if2.lifr_name, ifname);
+ memset((char *) &if2, 0, sizeof(if2));
+ strcpy(if2.lifr_name, ifname);
- if (ioctl(sock, SIOCGLIFNETMASK, (char *)&if2) < 0) {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "IOCTL SIOCGLIFNETMASK failed");
- return -1;
- }
+ if (ioctl(sock, SIOCGLIFNETMASK, (char *)&if2) < 0) {
+ NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "IOCTL SIOCGLIFNETMASK failed");
+ return -1;
+ }
- mask = ntohl(((struct sockaddr_in*)&(if2.lifr_addr))->sin_addr.s_addr);
- ret = 0;
+ mask = ntohl(((struct sockaddr_in*)&(if2.lifr_addr))->sin_addr.s_addr);
+ ret = 0;
- while (mask) {
- mask <<= 1;
- ret++;
- }
+ while (mask) {
+ mask <<= 1;
+ ret++;
+ }
- return ret;
+ return ret;
}
@@ -1536,56 +1540,56 @@
* privileges (i.e. be root).
*/
static int getMacFromDevice(JNIEnv *env, const char* ifname, unsigned char* retbuf) {
- char style1dev[MAXPATHLEN];
- int fd;
- dl_phys_addr_req_t dlpareq;
- dl_phys_addr_ack_t *dlpaack;
- struct strbuf msg;
- char buf[128];
- int flags = 0;
+ char style1dev[MAXPATHLEN];
+ int fd;
+ dl_phys_addr_req_t dlpareq;
+ dl_phys_addr_ack_t *dlpaack;
+ struct strbuf msg;
+ char buf[128];
+ int flags = 0;
- /**
- * Device is in /dev
- * e.g.: /dev/bge0
- */
- strcpy(style1dev, DEV_PREFIX);
- strcat(style1dev, ifname);
- if ((fd = open(style1dev, O_RDWR)) < 0) {
- /*
- * Can't open it. We probably are missing the privilege.
- * We'll have to try something else
- */
- return 0;
- }
+ /**
+ * Device is in /dev
+ * e.g.: /dev/bge0
+ */
+ strcpy(style1dev, DEV_PREFIX);
+ strcat(style1dev, ifname);
+ if ((fd = open(style1dev, O_RDWR)) < 0) {
+ /*
+ * Can't open it. We probably are missing the privilege.
+ * We'll have to try something else
+ */
+ return 0;
+ }
- dlpareq.dl_primitive = DL_PHYS_ADDR_REQ;
- dlpareq.dl_addr_type = DL_CURR_PHYS_ADDR;
+ dlpareq.dl_primitive = DL_PHYS_ADDR_REQ;
+ dlpareq.dl_addr_type = DL_CURR_PHYS_ADDR;
- msg.buf = (char *)&dlpareq;
- msg.len = DL_PHYS_ADDR_REQ_SIZE;
+ msg.buf = (char *)&dlpareq;
+ msg.len = DL_PHYS_ADDR_REQ_SIZE;
- if (putmsg(fd, &msg, NULL, 0) < 0) {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "putmsg failed");
- return -1;
- }
+ if (putmsg(fd, &msg, NULL, 0) < 0) {
+ NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "putmsg failed");
+ return -1;
+ }
- dlpaack = (dl_phys_addr_ack_t *)buf;
+ dlpaack = (dl_phys_addr_ack_t *)buf;
- msg.buf = (char *)buf;
- msg.len = 0;
- msg.maxlen = sizeof (buf);
- if (getmsg(fd, &msg, NULL, &flags) < 0) {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "getmsg failed");
- return -1;
- }
+ msg.buf = (char *)buf;
+ msg.len = 0;
+ msg.maxlen = sizeof (buf);
+ if (getmsg(fd, &msg, NULL, &flags) < 0) {
+ NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "getmsg failed");
+ return -1;
+ }
- if (msg.len < DL_PHYS_ADDR_ACK_SIZE || dlpaack->dl_primitive != DL_PHYS_ADDR_ACK) {
- JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "Couldn't obtain phys addr\n");
- return -1;
- }
+ if (msg.len < DL_PHYS_ADDR_ACK_SIZE || dlpaack->dl_primitive != DL_PHYS_ADDR_ACK) {
+ JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "Couldn't obtain phys addr\n");
+ return -1;
+ }
- memcpy(retbuf, &buf[dlpaack->dl_addr_offset], dlpaack->dl_addr_length);
- return dlpaack->dl_addr_length;
+ memcpy(retbuf, &buf[dlpaack->dl_addr_offset], dlpaack->dl_addr_length);
+ return dlpaack->dl_addr_length;
}
/**
@@ -1594,95 +1598,95 @@
* MAC address. Returns -1 if there is no hardware address on that interface.
*/
static int getMacAddress(JNIEnv *env, int sock, const char *ifname, const struct in_addr* addr, unsigned char *buf) {
- struct arpreq arpreq;
- struct sockaddr_in* sin;
- struct sockaddr_in ipAddr;
- int len, i;
- struct lifreq lif;
+ struct arpreq arpreq;
+ struct sockaddr_in* sin;
+ struct sockaddr_in ipAddr;
+ int len, i;
+ struct lifreq lif;
- /* First, try the new (S11) SIOCGLIFHWADDR ioctl(). If that fails
- * try the old way.
- */
- memset(&lif, 0, sizeof(lif));
- strlcpy(lif.lifr_name, ifname, sizeof(lif.lifr_name));
+ /* First, try the new (S11) SIOCGLIFHWADDR ioctl(). If that fails
+ * try the old way.
+ */
+ memset(&lif, 0, sizeof(lif));
+ strlcpy(lif.lifr_name, ifname, sizeof(lif.lifr_name));
- if (ioctl(sock, SIOCGLIFHWADDR, &lif) != -1) {
- struct sockaddr_dl *sp;
- sp = (struct sockaddr_dl *)&lif.lifr_addr;
- memcpy(buf, &sp->sdl_data[0], sp->sdl_alen);
- return sp->sdl_alen;
+ if (ioctl(sock, SIOCGLIFHWADDR, &lif) != -1) {
+ struct sockaddr_dl *sp;
+ sp = (struct sockaddr_dl *)&lif.lifr_addr;
+ memcpy(buf, &sp->sdl_data[0], sp->sdl_alen);
+ return sp->sdl_alen;
+ }
+
+ /**
+ * On Solaris we have to use DLPI, but it will only work if we have
+ * privileged access (i.e. root). If that fails, we try a lookup
+ * in the ARP table, which requires an IPv4 address.
+ */
+ if ((len = getMacFromDevice(env, ifname, buf)) == 0) {
+ /*DLPI failed - trying to do arp lookup*/
+
+ if (addr == NULL) {
+ /**
+ * No IPv4 address for that interface, so can't do an ARP lookup.
+ */
+ return -1;
}
- /**
- * On Solaris we have to use DLPI, but it will only work if we have
- * privileged access (i.e. root). If that fails, we try a lookup
- * in the ARP table, which requires an IPv4 address.
- */
- if ((len = getMacFromDevice(env, ifname, buf)) == 0) {
- /*DLPI failed - trying to do arp lookup*/
+ len = 6; //???
- if (addr == NULL) {
- /**
- * No IPv4 address for that interface, so can't do an ARP lookup.
- */
- return -1;
- }
+ sin = (struct sockaddr_in *) &arpreq.arp_pa;
+ memset((char *) &arpreq, 0, sizeof(struct arpreq));
+ ipAddr.sin_port = 0;
+ ipAddr.sin_family = AF_INET;
+ memcpy(&ipAddr.sin_addr, addr, sizeof(struct in_addr));
+ memcpy(&arpreq.arp_pa, &ipAddr, sizeof(struct sockaddr_in));
+ arpreq.arp_flags= ATF_PUBL;
- len = 6; //???
-
- sin = (struct sockaddr_in *) &arpreq.arp_pa;
- memset((char *) &arpreq, 0, sizeof(struct arpreq));
- ipAddr.sin_port = 0;
- ipAddr.sin_family = AF_INET;
- memcpy(&ipAddr.sin_addr, addr, sizeof(struct in_addr));
- memcpy(&arpreq.arp_pa, &ipAddr, sizeof(struct sockaddr_in));
- arpreq.arp_flags= ATF_PUBL;
-
- if (ioctl(sock, SIOCGARP, &arpreq) < 0) {
- return -1;
- }
-
- memcpy(buf, &arpreq.arp_ha.sa_data[0], len );
+ if (ioctl(sock, SIOCGARP, &arpreq) < 0) {
+ return -1;
}
- /*
- * All bytes to 0 means no hardware address.
- */
+ memcpy(buf, &arpreq.arp_ha.sa_data[0], len );
+ }
- for (i = 0; i < len; i++) {
- if (buf[i] != 0)
- return len;
- }
+ /*
+ * All bytes to 0 means no hardware address.
+ */
- return -1;
+ for (i = 0; i < len; i++) {
+ if (buf[i] != 0)
+ return len;
+ }
+
+ return -1;
}
static int getMTU(JNIEnv *env, int sock, const char *ifname) {
- struct lifreq if2;
+ struct lifreq if2;
- memset((char *) &if2, 0, sizeof(if2));
- strcpy(if2.lifr_name, ifname);
+ memset((char *) &if2, 0, sizeof(if2));
+ strcpy(if2.lifr_name, ifname);
- if (ioctl(sock, SIOCGLIFMTU, (char *)&if2) < 0) {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "IOCTL SIOCGLIFMTU failed");
- return -1;
- }
+ if (ioctl(sock, SIOCGLIFMTU, (char *)&if2) < 0) {
+ NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "IOCTL SIOCGLIFMTU failed");
+ return -1;
+ }
- return if2.lifr_mtu;
+ return if2.lifr_mtu;
}
static int getFlags(int sock, const char *ifname, int *flags) {
- struct lifreq lifr;
- memset((caddr_t)&lifr, 0, sizeof(lifr));
- strcpy((caddr_t)&(lifr.lifr_name), ifname);
+ struct lifreq lifr;
+ memset((caddr_t)&lifr, 0, sizeof(lifr));
+ strcpy((caddr_t)&(lifr.lifr_name), ifname);
- if (ioctl(sock, SIOCGLIFFLAGS, (char *)&lifr) < 0) {
- return -1;
- }
+ if (ioctl(sock, SIOCGLIFFLAGS, (char *)&lifr) < 0) {
+ return -1;
+ }
- *flags = lifr.lifr_flags;
- return 0;
+ *flags = lifr.lifr_flags;
+ return 0;
}
@@ -1697,28 +1701,28 @@
#ifdef AF_INET6
static int openSocketWithFallback(JNIEnv *env, const char *ifname){
- int sock;
- struct ifreq if2;
+ int sock;
+ struct ifreq if2;
- if ((sock = JVM_Socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
- if (errno == EPROTONOSUPPORT){
- if ( (sock = JVM_Socket(AF_INET6, SOCK_DGRAM, 0)) < 0 ){
- NET_ThrowByNameWithLastError(env , JNU_JAVANETPKG "SocketException", "IPV6 Socket creation failed");
- return -1;
- }
- }
- else{ // errno is not NOSUPPORT
- NET_ThrowByNameWithLastError(env , JNU_JAVANETPKG "SocketException", "IPV4 Socket creation failed");
- return -1;
- }
- }
+ if ((sock = JVM_Socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
+ if (errno == EPROTONOSUPPORT){
+ if ( (sock = JVM_Socket(AF_INET6, SOCK_DGRAM, 0)) < 0 ){
+ NET_ThrowByNameWithLastError(env , JNU_JAVANETPKG "SocketException", "IPV6 Socket creation failed");
+ return -1;
+ }
+ }
+ else{ // errno is not NOSUPPORT
+ NET_ThrowByNameWithLastError(env , JNU_JAVANETPKG "SocketException", "IPV4 Socket creation failed");
+ return -1;
+ }
+ }
- return sock;
+ return sock;
}
#else
static int openSocketWithFallback(JNIEnv *env, const char *ifname){
- return openSocket(env,AF_INET);
+ return openSocket(env,AF_INET);
}
#endif
@@ -1726,42 +1730,42 @@
* Enumerates and returns all IPv4 interfaces
*/
static netif *enumIPv4Interfaces(JNIEnv *env, int sock, netif *ifs) {
- struct ifaddrs *ifa, *origifa;
+ struct ifaddrs *ifa, *origifa;
- if (getifaddrs(&origifa) != 0) {
- NET_ThrowByNameWithLastError(env , JNU_JAVANETPKG "SocketException",
- "getifaddrs() function failed");
- return ifs;
- }
+ if (getifaddrs(&origifa) != 0) {
+ NET_ThrowByNameWithLastError(env , JNU_JAVANETPKG "SocketException",
+ "getifaddrs() function failed");
+ return ifs;
+ }
- for (ifa = origifa; ifa != NULL; ifa = ifa->ifa_next) {
-
- /*
- * Skip non-AF_INET entries.
- */
- if (ifa->ifa_addr == NULL || ifa->ifa_addr->sa_family != AF_INET)
- continue;
-
- /*
- * Add to the list.
- */
- ifs = addif(env, sock, ifa->ifa_name, ifs, ifa->ifa_addr, AF_INET, 0);
-
- /*
- * If an exception occurred then free the list.
- */
- if ((*env)->ExceptionOccurred(env)) {
- freeifaddrs(origifa);
- freeif(ifs);
- return NULL;
- }
- }
+ for (ifa = origifa; ifa != NULL; ifa = ifa->ifa_next) {
/*
- * Free socket and buffer
+ * Skip non-AF_INET entries.
*/
- freeifaddrs(origifa);
- return ifs;
+ if (ifa->ifa_addr == NULL || ifa->ifa_addr->sa_family != AF_INET)
+ continue;
+
+ /*
+ * Add to the list.
+ */
+ ifs = addif(env, sock, ifa->ifa_name, ifs, ifa->ifa_addr, AF_INET, 0);
+
+ /*
+ * If an exception occurred then free the list.
+ */
+ if ((*env)->ExceptionOccurred(env)) {
+ freeifaddrs(origifa);
+ freeif(ifs);
+ return NULL;
+ }
+ }
+
+ /*
+ * Free socket and buffer
+ */
+ freeifaddrs(origifa);
+ return ifs;
}
@@ -1775,102 +1779,102 @@
*/
static
int prefix(void *val, int size) {
- u_char *name = (u_char *)val;
- int byte, bit, plen = 0;
+ u_char *name = (u_char *)val;
+ int byte, bit, plen = 0;
- for (byte = 0; byte < size; byte++, plen += 8)
- if (name[byte] != 0xff)
- break;
- if (byte == size)
- return (plen);
- for (bit = 7; bit != 0; bit--, plen++)
- if (!(name[byte] & (1 << bit)))
- break;
- for (; bit != 0; bit--)
- if (name[byte] & (1 << bit))
- return (0);
- byte++;
- for (; byte < size; byte++)
- if (name[byte])
- return (0);
+ for (byte = 0; byte < size; byte++, plen += 8)
+ if (name[byte] != 0xff)
+ break;
+ if (byte == size)
return (plen);
+ for (bit = 7; bit != 0; bit--, plen++)
+ if (!(name[byte] & (1 << bit)))
+ break;
+ for (; bit != 0; bit--)
+ if (name[byte] & (1 << bit))
+ return (0);
+ byte++;
+ for (; byte < size; byte++)
+ if (name[byte])
+ return (0);
+ return (plen);
}
/*
* Enumerates and returns all IPv6 interfaces on BSD
*/
static netif *enumIPv6Interfaces(JNIEnv *env, int sock, netif *ifs) {
- struct ifaddrs *ifa, *origifa;
- struct sockaddr_in6 *sin6;
- struct in6_ifreq ifr6;
+ struct ifaddrs *ifa, *origifa;
+ struct sockaddr_in6 *sin6;
+ struct in6_ifreq ifr6;
- if (getifaddrs(&origifa) != 0) {
- NET_ThrowByNameWithLastError(env , JNU_JAVANETPKG "SocketException",
- "getifaddrs() function failed");
- return ifs;
- }
+ if (getifaddrs(&origifa) != 0) {
+ NET_ThrowByNameWithLastError(env , JNU_JAVANETPKG "SocketException",
+ "getifaddrs() function failed");
+ return ifs;
+ }
- for (ifa = origifa; ifa != NULL; ifa = ifa->ifa_next) {
-
- /*
- * Skip non-AF_INET6 entries.
- */
- if (ifa->ifa_addr == NULL || ifa->ifa_addr->sa_family != AF_INET6)
- continue;
-
- memset(&ifr6, 0, sizeof(ifr6));
- strlcpy(ifr6.ifr_name, ifa->ifa_name, sizeof(ifr6.ifr_name));
- memcpy(&ifr6.ifr_addr, ifa->ifa_addr, MIN(sizeof(ifr6.ifr_addr), ifa->ifa_addr->sa_len));
-
- if (ioctl(sock, SIOCGIFNETMASK_IN6, (caddr_t)&ifr6) < 0) {
- NET_ThrowByNameWithLastError(env , JNU_JAVANETPKG "SocketException",
- "ioctl SIOCGIFNETMASK_IN6 failed");
- freeifaddrs(origifa);
- freeif(ifs);
- return NULL;
- }
-
- /* Add to the list. */
- sin6 = (struct sockaddr_in6 *)&ifr6.ifr_addr;
- ifs = addif(env, sock, ifa->ifa_name, ifs, ifa->ifa_addr, AF_INET6,
- prefix(&sin6->sin6_addr, sizeof(struct in6_addr)));
-
- /* If an exception occurred then free the list. */
- if ((*env)->ExceptionOccurred(env)) {
- freeifaddrs(origifa);
- freeif(ifs);
- return NULL;
- }
- }
+ for (ifa = origifa; ifa != NULL; ifa = ifa->ifa_next) {
/*
- * Free socket and ifaddrs buffer
+ * Skip non-AF_INET6 entries.
*/
- freeifaddrs(origifa);
- return ifs;
+ if (ifa->ifa_addr == NULL || ifa->ifa_addr->sa_family != AF_INET6)
+ continue;
+
+ memset(&ifr6, 0, sizeof(ifr6));
+ strlcpy(ifr6.ifr_name, ifa->ifa_name, sizeof(ifr6.ifr_name));
+ memcpy(&ifr6.ifr_addr, ifa->ifa_addr, MIN(sizeof(ifr6.ifr_addr), ifa->ifa_addr->sa_len));
+
+ if (ioctl(sock, SIOCGIFNETMASK_IN6, (caddr_t)&ifr6) < 0) {
+ NET_ThrowByNameWithLastError(env , JNU_JAVANETPKG "SocketException",
+ "ioctl SIOCGIFNETMASK_IN6 failed");
+ freeifaddrs(origifa);
+ freeif(ifs);
+ return NULL;
+ }
+
+ /* Add to the list. */
+ sin6 = (struct sockaddr_in6 *)&ifr6.ifr_addr;
+ ifs = addif(env, sock, ifa->ifa_name, ifs, ifa->ifa_addr, AF_INET6,
+ prefix(&sin6->sin6_addr, sizeof(struct in6_addr)));
+
+ /* If an exception occurred then free the list. */
+ if ((*env)->ExceptionOccurred(env)) {
+ freeifaddrs(origifa);
+ freeif(ifs);
+ return NULL;
+ }
+ }
+
+ /*
+ * Free socket and ifaddrs buffer
+ */
+ freeifaddrs(origifa);
+ return ifs;
}
#endif
static int getIndex(int sock, const char *name){
#ifdef __FreeBSD__
- /*
- * Try to get the interface index
- * (Not supported on Solaris 2.6 or 7)
- */
- struct ifreq if2;
- strcpy(if2.ifr_name, name);
+ /*
+ * Try to get the interface index
+ * (Not supported on Solaris 2.6 or 7)
+ */
+ struct ifreq if2;
+ strcpy(if2.ifr_name, name);
- if (ioctl(sock, SIOCGIFINDEX, (char *)&if2) < 0) {
- return -1;
- }
+ if (ioctl(sock, SIOCGIFINDEX, (char *)&if2) < 0) {
+ return -1;
+ }
- return if2.ifr_index;
+ return if2.ifr_index;
#else
- /*
- * Try to get the interface index using BSD specific if_nametoindex
- */
- int index = if_nametoindex(name);
- return (index == 0) ? -1 : index;
+ /*
+ * Try to get the interface index using BSD specific if_nametoindex
+ */
+ int index = if_nametoindex(name);
+ return (index == 0) ? -1 : index;
#endif
}
@@ -1887,19 +1891,19 @@
/* Let's make sure the interface does have a broadcast address */
if (ioctl(sock, SIOCGIFFLAGS, (char *)&if2) < 0) {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "IOCTL SIOCGIFFLAGS failed");
- return ret;
+ NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "IOCTL SIOCGIFFLAGS failed");
+ return ret;
}
if (if2.ifr_flags & IFF_BROADCAST) {
- /* It does, let's retrieve it*/
- if (ioctl(sock, SIOCGIFBRDADDR, (char *)&if2) < 0) {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "IOCTL SIOCGIFBRDADDR failed");
- return ret;
- }
+ /* It does, let's retrieve it*/
+ if (ioctl(sock, SIOCGIFBRDADDR, (char *)&if2) < 0) {
+ NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "IOCTL SIOCGIFBRDADDR failed");
+ return ret;
+ }
- ret = brdcast_store;
- memcpy(ret, &if2.ifr_broadaddr, sizeof(struct sockaddr));
+ ret = brdcast_store;
+ memcpy(ret, &if2.ifr_broadaddr, sizeof(struct sockaddr));
}
return ret;
@@ -1910,26 +1914,26 @@
* interface, if it has one, otherwise return -1.
*/
static short getSubnet(JNIEnv *env, int sock, const char *ifname) {
- unsigned int mask;
- short ret;
- struct ifreq if2;
+ unsigned int mask;
+ short ret;
+ struct ifreq if2;
- memset((char *) &if2, 0, sizeof(if2));
- strcpy(if2.ifr_name, ifname);
+ memset((char *) &if2, 0, sizeof(if2));
+ strcpy(if2.ifr_name, ifname);
- if (ioctl(sock, SIOCGIFNETMASK, (char *)&if2) < 0) {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "IOCTL SIOCGIFNETMASK failed");
- return -1;
- }
+ if (ioctl(sock, SIOCGIFNETMASK, (char *)&if2) < 0) {
+ NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "IOCTL SIOCGIFNETMASK failed");
+ return -1;
+ }
- mask = ntohl(((struct sockaddr_in*)&(if2.ifr_addr))->sin_addr.s_addr);
- ret = 0;
- while (mask) {
- mask <<= 1;
- ret++;
- }
+ mask = ntohl(((struct sockaddr_in*)&(if2.ifr_addr))->sin_addr.s_addr);
+ ret = 0;
+ while (mask) {
+ mask <<= 1;
+ ret++;
+ }
- return ret;
+ return ret;
}
/**
@@ -1938,44 +1942,44 @@
* MAC address. Returns -1 if there is no hardware address on that interface.
*/
static int getMacAddress(JNIEnv *env, int sock, const char* ifname, const struct in_addr* addr, unsigned char *buf) {
- struct ifaddrs *ifa0, *ifa;
- struct sockaddr *saddr;
- int i;
+ struct ifaddrs *ifa0, *ifa;
+ struct sockaddr *saddr;
+ int i;
- /* Grab the interface list */
- if (!getifaddrs(&ifa0)) {
- /* Cycle through the interfaces */
- for (i = 0, ifa = ifa0; ifa != NULL; ifa = ifa->ifa_next, i++) {
- saddr = ifa->ifa_addr;
- /* Link layer contains the MAC address */
- if (saddr->sa_family == AF_LINK && !strcmp(ifname, ifa->ifa_name)) {
- struct sockaddr_dl *sadl = (struct sockaddr_dl *) saddr;
- /* Check the address is the correct length */
- if (sadl->sdl_alen == ETHER_ADDR_LEN) {
- memcpy(buf, (sadl->sdl_data + sadl->sdl_nlen), ETHER_ADDR_LEN);
- freeifaddrs(ifa0);
- return ETHER_ADDR_LEN;
- }
- }
+ /* Grab the interface list */
+ if (!getifaddrs(&ifa0)) {
+ /* Cycle through the interfaces */
+ for (i = 0, ifa = ifa0; ifa != NULL; ifa = ifa->ifa_next, i++) {
+ saddr = ifa->ifa_addr;
+ /* Link layer contains the MAC address */
+ if (saddr->sa_family == AF_LINK && !strcmp(ifname, ifa->ifa_name)) {
+ struct sockaddr_dl *sadl = (struct sockaddr_dl *) saddr;
+ /* Check the address is the correct length */
+ if (sadl->sdl_alen == ETHER_ADDR_LEN) {
+ memcpy(buf, (sadl->sdl_data + sadl->sdl_nlen), ETHER_ADDR_LEN);
+ freeifaddrs(ifa0);
+ return ETHER_ADDR_LEN;
}
- freeifaddrs(ifa0);
+ }
}
+ freeifaddrs(ifa0);
+ }
- return -1;
+ return -1;
}
static int getMTU(JNIEnv *env, int sock, const char *ifname) {
- struct ifreq if2;
+ struct ifreq if2;
- memset((char *) &if2, 0, sizeof(if2));
- strcpy(if2.ifr_name, ifname);
+ memset((char *) &if2, 0, sizeof(if2));
+ strcpy(if2.ifr_name, ifname);
- if (ioctl(sock, SIOCGIFMTU, (char *)&if2) < 0) {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "IOCTL SIOCGIFMTU failed");
- return -1;
- }
+ if (ioctl(sock, SIOCGIFMTU, (char *)&if2) < 0) {
+ NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "IOCTL SIOCGIFMTU failed");
+ return -1;
+ }
- return if2.ifr_mtu;
+ return if2.ifr_mtu;
}
static int getFlags(int sock, const char *ifname, int *flags) {
@@ -1986,7 +1990,7 @@
strcpy(if2.ifr_name, ifname);
if (ioctl(sock, SIOCGIFFLAGS, (char *)&if2) < 0){
- return -1;
+ return -1;
}
if (sizeof(if2.ifr_flags) == sizeof(short)) {
@@ -1998,3 +2002,22 @@
}
#endif
+
+static JNINativeMethod gMethods[] = {
+ NATIVE_METHOD(NetworkInterface, getMTU0, "(Ljava/lang/String;I)I"),
+ NATIVE_METHOD(NetworkInterface, getMacAddr0, "([BLjava/lang/String;I)[B"),
+ NATIVE_METHOD(NetworkInterface, supportsMulticast0, "(Ljava/lang/String;I)Z"),
+ NATIVE_METHOD(NetworkInterface, isLoopback0, "(Ljava/lang/String;I)Z"),
+ NATIVE_METHOD(NetworkInterface, isP2P0, "(Ljava/lang/String;I)Z"),
+ NATIVE_METHOD(NetworkInterface, isUp0, "(Ljava/lang/String;I)Z"),
+ NATIVE_METHOD(NetworkInterface, getAll, "()[Ljava/net/NetworkInterface;"),
+ NATIVE_METHOD(NetworkInterface, getByInetAddress0, "(Ljava/net/InetAddress;)Ljava/net/NetworkInterface;"),
+ NATIVE_METHOD(NetworkInterface, getByIndex0, "(I)Ljava/net/NetworkInterface;"),
+ NATIVE_METHOD(NetworkInterface, getByName0, "(Ljava/lang/String;)Ljava/net/NetworkInterface;"),
+ NATIVE_METHOD(NetworkInterface, init, "()V"),
+
+};
+
+void register_java_net_NetworkInterface(JNIEnv* env) {
+ jniRegisterNativeMethods(env, "java/net/NetworkInterface", gMethods, NELEM(gMethods));
+}
diff --git a/ojluni/src/main/native/PlainDatagramSocketImpl.c b/ojluni/src/main/native/PlainDatagramSocketImpl.c
index 64f0b7b..9a5ec17 100755
--- a/ojluni/src/main/native/PlainDatagramSocketImpl.c
+++ b/ojluni/src/main/native/PlainDatagramSocketImpl.c
@@ -35,7 +35,7 @@
#endif
#ifdef __linux__
#include <unistd.h>
-#include <sys/sysctl.h>
+//#include <sys/sysctl.h>
#include <sys/utsname.h>
#include <netinet/ip.h>
@@ -59,6 +59,10 @@
#include "java_net_SocketOptions.h"
#include "java_net_PlainDatagramSocketImpl.h"
#include "java_net_NetworkInterface.h"
+#include "JNIHelp.h"
+
+#define NATIVE_METHOD(className, functionName, signature) \
+{ #functionName, signature, (void*)(className ## _ ## functionName) }
/************************************************************************
* PlainDatagramSocketImpl
*/
@@ -144,7 +148,7 @@
* Signature: ()V
*/
JNIEXPORT void JNICALL
-Java_java_net_PlainDatagramSocketImpl_init(JNIEnv *env, jclass cls) {
+PlainDatagramSocketImpl_init(JNIEnv *env, jclass cls) {
#ifdef __linux__
struct utsname sysinfo;
@@ -169,10 +173,10 @@
IO_fd_fdID = NET_GetFileDescriptorID(env);
CHECK_NULL(IO_fd_fdID);
- Java_java_net_InetAddress_init(env, 0);
- Java_java_net_Inet4Address_init(env, 0);
- Java_java_net_Inet6Address_init(env, 0);
- Java_java_net_NetworkInterface_init(env, 0);
+ InetAddress_init(env, 0);
+ Inet4Address_init(env, 0);
+ Inet6Address_init(env, 0);
+ NetworkInterface_init(env, 0);
#ifdef __linux__
/*
@@ -217,7 +221,7 @@
* Signature: (ILjava/net/InetAddress;)V
*/
JNIEXPORT void JNICALL
-Java_java_net_PlainDatagramSocketImpl_bind0(JNIEnv *env, jobject this,
+PlainDatagramSocketImpl_bind0(JNIEnv *env, jobject this,
jint localport, jobject iaObj) {
/* fdObj is the FileDescriptor field on this */
jobject fdObj = (*env)->GetObjectField(env, this, pdsi_fdID);
@@ -282,7 +286,7 @@
* Signature: (Ljava/net/InetAddress;I)V
*/
JNIEXPORT void JNICALL
-Java_java_net_PlainDatagramSocketImpl_connect0(JNIEnv *env, jobject this,
+PlainDatagramSocketImpl_connect0(JNIEnv *env, jobject this,
jobject address, jint port) {
/* The object's field */
jobject fdObj = (*env)->GetObjectField(env, this, pdsi_fdID);
@@ -330,7 +334,7 @@
* Signature: ()V
*/
JNIEXPORT void JNICALL
-Java_java_net_PlainDatagramSocketImpl_disconnect0(JNIEnv *env, jobject this, jint family) {
+PlainDatagramSocketImpl_disconnect0(JNIEnv *env, jobject this, jint family) {
/* The object's field */
jobject fdObj = (*env)->GetObjectField(env, this, pdsi_fdID);
/* The fdObj'fd */
@@ -403,7 +407,7 @@
* Signature: (Ljava/net/DatagramPacket;)V
*/
JNIEXPORT void JNICALL
-Java_java_net_PlainDatagramSocketImpl_send(JNIEnv *env, jobject this,
+PlainDatagramSocketImpl_send(JNIEnv *env, jobject this,
jobject packet) {
char BUF[MAX_BUFFER_LEN];
@@ -543,7 +547,7 @@
* Signature: (Ljava/net/InetAddress;)I
*/
JNIEXPORT jint JNICALL
-Java_java_net_PlainDatagramSocketImpl_peek(JNIEnv *env, jobject this,
+PlainDatagramSocketImpl_peek(JNIEnv *env, jobject this,
jobject addressObj) {
jobject fdObj = (*env)->GetObjectField(env, this, pdsi_fdID);
@@ -628,7 +632,7 @@
}
JNIEXPORT jint JNICALL
-Java_java_net_PlainDatagramSocketImpl_peekData(JNIEnv *env, jobject this,
+PlainDatagramSocketImpl_peekData(JNIEnv *env, jobject this,
jobject packet) {
char BUF[MAX_BUFFER_LEN];
@@ -805,7 +809,7 @@
* Signature: (Ljava/net/DatagramPacket;)V
*/
JNIEXPORT void JNICALL
-Java_java_net_PlainDatagramSocketImpl_receive0(JNIEnv *env, jobject this,
+PlainDatagramSocketImpl_receive0(JNIEnv *env, jobject this,
jobject packet) {
char BUF[MAX_BUFFER_LEN];
@@ -1058,7 +1062,7 @@
* Signature: ()V
*/
JNIEXPORT void JNICALL
-Java_java_net_PlainDatagramSocketImpl_datagramSocketCreate(JNIEnv *env,
+PlainDatagramSocketImpl_datagramSocketCreate(JNIEnv *env,
jobject this) {
jobject fdObj = (*env)->GetObjectField(env, this, pdsi_fdID);
int arg, fd, t = 1;
@@ -1143,7 +1147,7 @@
* Signature: ()V
*/
JNIEXPORT void JNICALL
-Java_java_net_PlainDatagramSocketImpl_datagramSocketClose(JNIEnv *env,
+PlainDatagramSocketImpl_datagramSocketClose(JNIEnv *env,
jobject this) {
/*
* REMIND: PUT A LOCK AROUND THIS CODE
@@ -1287,7 +1291,7 @@
CHECK_NULL(ni_class);
}
- value = Java_java_net_NetworkInterface_getByInetAddress0(env, ni_class, value);
+ value = NetworkInterface_getByInetAddress0(env, ni_class, value);
if (value == NULL) {
if (!(*env)->ExceptionOccurred(env)) {
JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException",
@@ -1463,7 +1467,7 @@
* Signature: (ILjava/lang/Object;)V
*/
JNIEXPORT void JNICALL
-Java_java_net_PlainDatagramSocketImpl_socketSetOption(JNIEnv *env,
+PlainDatagramSocketImpl_socketSetOption(JNIEnv *env,
jobject this,
jint opt,
jobject value) {
@@ -1686,7 +1690,7 @@
ni_class = (*env)->NewGlobalRef(env, c);
CHECK_NULL_RETURN(ni_class, NULL);
}
- ni = Java_java_net_NetworkInterface_getByInetAddress0(env, ni_class, addr);
+ ni = NetworkInterface_getByInetAddress0(env, ni_class, addr);
if (ni) {
return ni;
}
@@ -1777,7 +1781,7 @@
* (for IF).
*/
if (index > 0) {
- ni = Java_java_net_NetworkInterface_getByIndex0(env, ni_class,
+ ni = NetworkInterface_getByIndex0(env, ni_class,
index);
if (ni == NULL) {
char errmsg[255];
@@ -1843,7 +1847,7 @@
* Signature: (I)Ljava/lang/Object;
*/
JNIEXPORT jobject JNICALL
-Java_java_net_PlainDatagramSocketImpl_socketGetOption(JNIEnv *env, jobject this,
+PlainDatagramSocketImpl_socketGetOption(JNIEnv *env, jobject this,
jint opt) {
int fd;
int level, optname, optlen;
@@ -1953,13 +1957,13 @@
*/
JNIEXPORT void JNICALL
-Java_java_net_PlainDatagramSocketImpl_setTTL(JNIEnv *env, jobject this,
+PlainDatagramSocketImpl_setTTL(JNIEnv *env, jobject this,
jbyte ttl) {
jint ittl = ttl;
if (ittl < 0) {
ittl += 0x100;
}
- Java_java_net_PlainDatagramSocketImpl_setTimeToLive(env, this, ittl);
+ PlainDatagramSocketImpl_setTimeToLive(env, this, ittl);
}
/*
@@ -1994,7 +1998,7 @@
* Signature: (B)V
*/
JNIEXPORT void JNICALL
-Java_java_net_PlainDatagramSocketImpl_setTimeToLive(JNIEnv *env, jobject this,
+PlainDatagramSocketImpl_setTimeToLive(JNIEnv *env, jobject this,
jint ttl) {
jobject fdObj = (*env)->GetObjectField(env, this, pdsi_fdID);
@@ -2036,8 +2040,8 @@
* Signature: ()B
*/
JNIEXPORT jbyte JNICALL
-Java_java_net_PlainDatagramSocketImpl_getTTL(JNIEnv *env, jobject this) {
- return (jbyte)Java_java_net_PlainDatagramSocketImpl_getTimeToLive(env, this);
+PlainDatagramSocketImpl_getTTL(JNIEnv *env, jobject this) {
+ return (jbyte)PlainDatagramSocketImpl_getTimeToLive(env, this);
}
@@ -2047,7 +2051,7 @@
* Signature: ()B
*/
JNIEXPORT jint JNICALL
-Java_java_net_PlainDatagramSocketImpl_getTimeToLive(JNIEnv *env, jobject this) {
+PlainDatagramSocketImpl_getTimeToLive(JNIEnv *env, jobject this) {
jobject fdObj = (*env)->GetObjectField(env, this, pdsi_fdID);
jint fd = -1;
@@ -2446,7 +2450,7 @@
* Signature: (Ljava/net/InetAddress;)V
*/
JNIEXPORT void JNICALL
-Java_java_net_PlainDatagramSocketImpl_join(JNIEnv *env, jobject this,
+PlainDatagramSocketImpl_join(JNIEnv *env, jobject this,
jobject iaObj, jobject niObj)
{
mcast_join_leave(env, this, iaObj, niObj, JNI_TRUE);
@@ -2458,8 +2462,33 @@
* Signature: (Ljava/net/InetAddress;)V
*/
JNIEXPORT void JNICALL
-Java_java_net_PlainDatagramSocketImpl_leave(JNIEnv *env, jobject this,
+PlainDatagramSocketImpl_leave(JNIEnv *env, jobject this,
jobject iaObj, jobject niObj)
{
mcast_join_leave(env, this, iaObj, niObj, JNI_FALSE);
}
+
+static JNINativeMethod gMethods[] = {
+ NATIVE_METHOD(PlainDatagramSocketImpl, leave, "(Ljava/net/InetAddress;Ljava/net/NetworkInterface;)V"),
+ NATIVE_METHOD(PlainDatagramSocketImpl, join, "(Ljava/net/InetAddress;Ljava/net/NetworkInterface;)V"),
+ NATIVE_METHOD(PlainDatagramSocketImpl, getTimeToLive, "()I"),
+ NATIVE_METHOD(PlainDatagramSocketImpl, getTTL, "()B"),
+ NATIVE_METHOD(PlainDatagramSocketImpl, setTimeToLive, "(I)V"),
+ NATIVE_METHOD(PlainDatagramSocketImpl, setTTL, "(B)V"),
+ NATIVE_METHOD(PlainDatagramSocketImpl, socketGetOption, "(I)Ljava/lang/Object;"),
+ NATIVE_METHOD(PlainDatagramSocketImpl, socketSetOption, "(ILjava/lang/Object;)V"),
+ NATIVE_METHOD(PlainDatagramSocketImpl, datagramSocketClose, "()V"),
+ NATIVE_METHOD(PlainDatagramSocketImpl, datagramSocketCreate, "()V"),
+ NATIVE_METHOD(PlainDatagramSocketImpl, receive0, "(Ljava/net/DatagramPacket;)V"),
+ NATIVE_METHOD(PlainDatagramSocketImpl, peekData, "(Ljava/net/DatagramPacket;)I"),
+ NATIVE_METHOD(PlainDatagramSocketImpl, peek, "(Ljava/net/InetAddress;)I"),
+ NATIVE_METHOD(PlainDatagramSocketImpl, send, "(Ljava/net/DatagramPacket;)V"),
+ NATIVE_METHOD(PlainDatagramSocketImpl, disconnect0, "(I)V"),
+ NATIVE_METHOD(PlainDatagramSocketImpl, connect0, "(Ljava/net/InetAddress;I)V"),
+ NATIVE_METHOD(PlainDatagramSocketImpl, bind0, "(ILjava/net/InetAddress;)V"),
+ NATIVE_METHOD(PlainDatagramSocketImpl, init, "()V"),
+};
+
+void register_java_net_PlainDatagramSocketImpl(JNIEnv* env) {
+ jniRegisterNativeMethods(env, "java/net/PlainDatagramSocketImpl", gMethods, NELEM(gMethods));
+}
diff --git a/ojluni/src/main/native/PlainSocketImpl.c b/ojluni/src/main/native/PlainSocketImpl.c
index 82616f2..dccea0b 100755
--- a/ojluni/src/main/native/PlainSocketImpl.c
+++ b/ojluni/src/main/native/PlainSocketImpl.c
@@ -43,7 +43,7 @@
#endif
#ifdef __linux__
#include <unistd.h>
-#include <sys/sysctl.h>
+//#include <sys/sysctl.h>
#endif
#include "jvm.h"
@@ -52,6 +52,10 @@
#include "java_net_SocketOptions.h"
#include "java_net_PlainSocketImpl.h"
+#include "JNIHelp.h"
+
+#define NATIVE_METHOD(className, functionName, signature) \
+{ #functionName, signature, (void*)(className ## _ ## functionName) }
/************************************************************************
* PlainSocketImpl
@@ -136,7 +140,7 @@
* Signature: ()V
*/
JNIEXPORT void JNICALL
-Java_java_net_PlainSocketImpl_initProto(JNIEnv *env, jclass cls) {
+PlainSocketImpl_initProto(JNIEnv *env, jclass cls) {
psi_fdID = (*env)->GetFieldID(env, cls , "fd",
"Ljava/io/FileDescriptor;");
CHECK_NULL(psi_fdID);
@@ -178,7 +182,7 @@
* Method: socketCreate
* Signature: (Z)V */
JNIEXPORT void JNICALL
-Java_java_net_PlainSocketImpl_socketCreate(JNIEnv *env, jobject this,
+PlainSocketImpl_socketCreate(JNIEnv *env, jobject this,
jboolean stream) {
jobject fdObj, ssObj;
int fd;
@@ -252,7 +256,7 @@
* Signature: (Ljava/net/InetAddress;I)V
*/
JNIEXPORT void JNICALL
-Java_java_net_PlainSocketImpl_socketConnect(JNIEnv *env, jobject this,
+PlainSocketImpl_socketConnect(JNIEnv *env, jobject this,
jobject iaObj, jint port,
jint timeout)
{
@@ -546,7 +550,7 @@
* Signature: (Ljava/net/InetAddress;I)V
*/
JNIEXPORT void JNICALL
-Java_java_net_PlainSocketImpl_socketBind(JNIEnv *env, jobject this,
+PlainSocketImpl_socketBind(JNIEnv *env, jobject this,
jobject iaObj, jint localport) {
/* fdObj is the FileDescriptor field on this */
@@ -612,7 +616,7 @@
* Signature: (I)V
*/
JNIEXPORT void JNICALL
-Java_java_net_PlainSocketImpl_socketListen (JNIEnv *env, jobject this,
+PlainSocketImpl_socketListen (JNIEnv *env, jobject this,
jint count)
{
/* this FileDescriptor fd field */
@@ -647,7 +651,7 @@
* Signature: (Ljava/net/SocketImpl;)V
*/
JNIEXPORT void JNICALL
-Java_java_net_PlainSocketImpl_socketAccept(JNIEnv *env, jobject this,
+PlainSocketImpl_socketAccept(JNIEnv *env, jobject this,
jobject socket)
{
/* fields on this */
@@ -800,7 +804,7 @@
* Signature: ()I
*/
JNIEXPORT jint JNICALL
-Java_java_net_PlainSocketImpl_socketAvailable(JNIEnv *env, jobject this) {
+PlainSocketImpl_socketAvailable(JNIEnv *env, jobject this) {
jint ret = -1;
jobject fdObj = (*env)->GetObjectField(env, this, psi_fdID);
@@ -831,7 +835,7 @@
* Signature: (Z)V
*/
JNIEXPORT void JNICALL
-Java_java_net_PlainSocketImpl_socketClose0(JNIEnv *env, jobject this,
+PlainSocketImpl_socketClose0(JNIEnv *env, jobject this,
jboolean useDeferredClose) {
jobject fdObj = (*env)->GetObjectField(env, this, psi_fdID);
@@ -860,7 +864,7 @@
* Signature: (I)V
*/
JNIEXPORT void JNICALL
-Java_java_net_PlainSocketImpl_socketShutdown(JNIEnv *env, jobject this,
+PlainSocketImpl_socketShutdown(JNIEnv *env, jobject this,
jint howto)
{
@@ -888,7 +892,7 @@
* Signature: (IZLjava/lang/Object;)V
*/
JNIEXPORT void JNICALL
-Java_java_net_PlainSocketImpl_socketSetOption(JNIEnv *env, jobject this,
+PlainSocketImpl_socketSetOption(JNIEnv *env, jobject this,
jint cmd, jboolean on,
jobject value) {
int fd;
@@ -984,7 +988,7 @@
* Signature: (I)I
*/
JNIEXPORT jint JNICALL
-Java_java_net_PlainSocketImpl_socketGetOption(JNIEnv *env, jobject this,
+PlainSocketImpl_socketGetOption(JNIEnv *env, jobject this,
jint cmd, jobject iaContainerObj) {
int fd;
@@ -1077,7 +1081,7 @@
* Signature: (B)V
*/
JNIEXPORT void JNICALL
-Java_java_net_PlainSocketImpl_socketSendUrgentData(JNIEnv *env, jobject this,
+PlainSocketImpl_socketSendUrgentData(JNIEnv *env, jobject this,
jint data) {
/* The fd field */
jobject fdObj = (*env)->GetObjectField(env, this, psi_fdID);
@@ -1108,3 +1112,21 @@
return;
}
}
+
+static JNINativeMethod gMethods[] = {
+ NATIVE_METHOD(PlainSocketImpl, socketSendUrgentData, "(I)V"),
+ NATIVE_METHOD(PlainSocketImpl, socketGetOption, "(ILjava/lang/Object;)I"),
+ NATIVE_METHOD(PlainSocketImpl, socketSetOption, "(IZLjava/lang/Object;)V"),
+ NATIVE_METHOD(PlainSocketImpl, socketShutdown, "(I)V"),
+ NATIVE_METHOD(PlainSocketImpl, socketClose0, "(Z)V"),
+ NATIVE_METHOD(PlainSocketImpl, socketAvailable, "()I"),
+ NATIVE_METHOD(PlainSocketImpl, socketListen, "(I)V"),
+ NATIVE_METHOD(PlainSocketImpl, socketBind, "(Ljava/net/InetAddress;I)V"),
+ NATIVE_METHOD(PlainSocketImpl, socketConnect, "(Ljava/net/InetAddress;II)V"),
+ NATIVE_METHOD(PlainSocketImpl, socketCreate, "(Z)V"),
+ NATIVE_METHOD(PlainSocketImpl, initProto, "()V"),
+};
+
+void register_java_net_PlainSocketImpl(JNIEnv* env) {
+ jniRegisterNativeMethods(env, "java/net/PlainSocketImpl", gMethods, NELEM(gMethods));
+}
diff --git a/ojluni/src/main/native/Register.cpp b/ojluni/src/main/native/Register.cpp
index 119ce0f..19fa53d 100644
--- a/ojluni/src/main/native/Register.cpp
+++ b/ojluni/src/main/native/Register.cpp
@@ -38,12 +38,26 @@
extern void register_sun_nio_ch_NativeThread(JNIEnv*);
extern void register_sun_nio_ch_FileKey(JNIEnv*);
extern void register_java_io_ObjectStreamClass(JNIEnv*);
+extern void register_java_net_InetAddress(JNIEnv*);
+extern void register_java_net_Inet4Address(JNIEnv*);
+extern void register_java_net_Inet6Address(JNIEnv*);
+extern void register_java_net_InetAddressImplFactory(JNIEnv*);
+extern void register_java_net_PlainSocketImpl(JNIEnv*);
+extern void register_java_net_PlainDatagramSocketImpl(JNIEnv*);
+extern void register_java_net_NetworkInterface(JNIEnv*);
+extern void register_java_net_DatagramPacket(JNIEnv*);
+extern void register_java_net_Inet4AddressImpl(JNIEnv*);
+extern void register_java_net_Inet6AddressImpl(JNIEnv*);
+extern void register_java_net_SocketInputStream(JNIEnv*);
+extern void register_java_net_SocketOutputStream(JNIEnv*);
+extern void register_sun_net_spi_DefaultProxySelector(JNIEnv*);
+
+extern jint net_JNI_OnLoad(JavaVM*, void*);
}
// DalvikVM calls this on startup, so we can statically register all our native methods.
-jint JNI_OnLoad(JavaVM* vm, void*) {
- JNIEnv* env;
+jint JNI_OnLoad(JavaVM* vm, void*) { JNIEnv* env;
if (vm->GetEnv(reinterpret_cast<void**>(&env), JNI_VERSION_1_6) != JNI_OK) {
ALOGE("JavaVM::GetEnv() failed");
abort();
@@ -64,5 +78,19 @@
register_sun_nio_ch_NativeThread(env);
register_sun_nio_ch_FileKey(env);
register_java_io_ObjectStreamClass(env);
+ register_java_net_InetAddress(env);
+ register_java_net_Inet4Address(env);
+ register_java_net_Inet6Address(env);
+ register_java_net_InetAddressImplFactory(env);
+ register_java_net_PlainSocketImpl(env);
+ register_java_net_PlainDatagramSocketImpl(env);
+ register_java_net_NetworkInterface(env);
+ register_java_net_DatagramPacket(env);
+ register_java_net_Inet4AddressImpl(env);
+ register_java_net_Inet6AddressImpl(env);
+ register_java_net_SocketInputStream(env);
+ register_java_net_SocketOutputStream(env);
+ register_sun_net_spi_DefaultProxySelector(env);
+ net_JNI_OnLoad(vm, NULL);
return JNI_VERSION_1_6;
}
diff --git a/ojluni/src/main/native/SocketInputStream.c b/ojluni/src/main/native/SocketInputStream.c
index 1e115ce..92e6822 100755
--- a/ojluni/src/main/native/SocketInputStream.c
+++ b/ojluni/src/main/native/SocketInputStream.c
@@ -34,6 +34,10 @@
#include "net_util.h"
#include "java_net_SocketInputStream.h"
+#include "JNIHelp.h"
+
+#define NATIVE_METHOD(className, functionName, signature) \
+{ #functionName, signature, (void*)(className ## _ ## functionName) }
/************************************************************************
@@ -48,7 +52,7 @@
* Signature: ()V
*/
JNIEXPORT void JNICALL
-Java_java_net_SocketInputStream_init(JNIEnv *env, jclass cls) {
+SocketInputStream_init(JNIEnv *env, jclass cls) {
IO_fd_fdID = NET_GetFileDescriptorID(env);
}
@@ -58,7 +62,7 @@
* Signature: (Ljava/io/FileDescriptor;[BIII)I
*/
JNIEXPORT jint JNICALL
-Java_java_net_SocketInputStream_socketRead0(JNIEnv *env, jobject this,
+SocketInputStream_socketRead0(JNIEnv *env, jobject this,
jobject fdObj, jbyteArray data,
jint off, jint len, jint timeout)
{
@@ -159,3 +163,12 @@
}
return nread;
}
+
+static JNINativeMethod gMethods[] = {
+ NATIVE_METHOD(SocketInputStream, socketRead0, "(Ljava/io/FileDescriptor;[BIII)I"),
+ NATIVE_METHOD(SocketInputStream, init, "()V"),
+};
+
+void register_java_net_SocketInputStream(JNIEnv* env) {
+ jniRegisterNativeMethods(env, "java/net/SocketInputStream", gMethods, NELEM(gMethods));
+}
diff --git a/ojluni/src/main/native/SocketOutputStream.c b/ojluni/src/main/native/SocketOutputStream.c
index d6e01ff..14a915f 100755
--- a/ojluni/src/main/native/SocketOutputStream.c
+++ b/ojluni/src/main/native/SocketOutputStream.c
@@ -34,6 +34,10 @@
#include "net_util.h"
#include "java_net_SocketOutputStream.h"
+#include "JNIHelp.h"
+
+#define NATIVE_METHOD(className, functionName, signature) \
+{ #functionName, signature, (void*)(className ## _ ## functionName) }
#define min(a, b) ((a) < (b) ? (a) : (b))
@@ -49,7 +53,7 @@
* Signature: ()V
*/
JNIEXPORT void JNICALL
-Java_java_net_SocketOutputStream_init(JNIEnv *env, jclass cls) {
+SocketOutputStream_init(JNIEnv *env, jclass cls) {
IO_fd_fdID = NET_GetFileDescriptorID(env);
}
@@ -59,7 +63,7 @@
* Signature: (Ljava/io/FileDescriptor;[BII)V
*/
JNIEXPORT void JNICALL
-Java_java_net_SocketOutputStream_socketWrite0(JNIEnv *env, jobject this,
+SocketOutputStream_socketWrite0(JNIEnv *env, jobject this,
jobject fdObj,
jbyteArray data,
jint off, jint len) {
@@ -134,3 +138,12 @@
free(bufP);
}
}
+
+static JNINativeMethod gMethods[] = {
+ NATIVE_METHOD(SocketOutputStream, socketWrite0, "(Ljava/io/FileDescriptor;[BII)V"),
+ NATIVE_METHOD(SocketOutputStream, init, "()V"),
+};
+
+void register_java_net_SocketOutputStream(JNIEnv* env) {
+ jniRegisterNativeMethods(env, "java/net/SocketOutputStream", gMethods, NELEM(gMethods));
+}
diff --git a/ojluni/src/main/native/java_net_DatagramPacket.h b/ojluni/src/main/native/java_net_DatagramPacket.h
index 456b353..be6ad98 100755
--- a/ojluni/src/main/native/java_net_DatagramPacket.h
+++ b/ojluni/src/main/native/java_net_DatagramPacket.h
@@ -12,7 +12,7 @@
* Method: init
* Signature: ()V
*/
-JNIEXPORT void JNICALL Java_java_net_DatagramPacket_init
+JNIEXPORT void JNICALL DatagramPacket_init
(JNIEnv *, jclass);
#ifdef __cplusplus
diff --git a/ojluni/src/main/native/java_net_Inet4Address.h b/ojluni/src/main/native/java_net_Inet4Address.h
index 9a618a5..7cae915 100755
--- a/ojluni/src/main/native/java_net_Inet4Address.h
+++ b/ojluni/src/main/native/java_net_Inet4Address.h
@@ -26,7 +26,7 @@
* Method: init
* Signature: ()V
*/
-JNIEXPORT void JNICALL Java_java_net_Inet4Address_init
+JNIEXPORT void JNICALL Inet4Address_init
(JNIEnv *, jclass);
#ifdef __cplusplus
diff --git a/ojluni/src/main/native/java_net_Inet4AddressImpl.h b/ojluni/src/main/native/java_net_Inet4AddressImpl.h
index fbf88af..7f93d30 100755
--- a/ojluni/src/main/native/java_net_Inet4AddressImpl.h
+++ b/ojluni/src/main/native/java_net_Inet4AddressImpl.h
@@ -12,7 +12,7 @@
* Method: getLocalHostName
* Signature: ()Ljava/lang/String;
*/
-JNIEXPORT jstring JNICALL Java_java_net_Inet4AddressImpl_getLocalHostName
+JNIEXPORT jstring JNICALL Inet4AddressImpl_getLocalHostName
(JNIEnv *, jobject);
/*
@@ -20,7 +20,7 @@
* Method: lookupAllHostAddr
* Signature: (Ljava/lang/String;)[Ljava/net/InetAddress;
*/
-JNIEXPORT jobjectArray JNICALL Java_java_net_Inet4AddressImpl_lookupAllHostAddr
+JNIEXPORT jobjectArray JNICALL Inet4AddressImpl_lookupAllHostAddr
(JNIEnv *, jobject, jstring);
/*
@@ -28,7 +28,7 @@
* Method: getHostByAddr
* Signature: ([B)Ljava/lang/String;
*/
-JNIEXPORT jstring JNICALL Java_java_net_Inet4AddressImpl_getHostByAddr
+JNIEXPORT jstring JNICALL Inet4AddressImpl_getHostByAddr
(JNIEnv *, jobject, jbyteArray);
/*
@@ -36,7 +36,7 @@
* Method: isReachable0
* Signature: ([BI[BI)Z
*/
-JNIEXPORT jboolean JNICALL Java_java_net_Inet4AddressImpl_isReachable0
+JNIEXPORT jboolean JNICALL Inet4AddressImpl_isReachable0
(JNIEnv *, jobject, jbyteArray, jint, jbyteArray, jint);
#ifdef __cplusplus
diff --git a/ojluni/src/main/native/java_net_Inet6Address.h b/ojluni/src/main/native/java_net_Inet6Address.h
index 3936063..fa318c2 100755
--- a/ojluni/src/main/native/java_net_Inet6Address.h
+++ b/ojluni/src/main/native/java_net_Inet6Address.h
@@ -26,7 +26,7 @@
* Method: init
* Signature: ()V
*/
-JNIEXPORT void JNICALL Java_java_net_Inet6Address_init
+JNIEXPORT void JNICALL Inet6Address_init
(JNIEnv *, jclass);
#ifdef __cplusplus
diff --git a/ojluni/src/main/native/java_net_Inet6AddressImpl.h b/ojluni/src/main/native/java_net_Inet6AddressImpl.h
index ab5f1d0..da21ed4 100755
--- a/ojluni/src/main/native/java_net_Inet6AddressImpl.h
+++ b/ojluni/src/main/native/java_net_Inet6AddressImpl.h
@@ -12,7 +12,7 @@
* Method: getLocalHostName
* Signature: ()Ljava/lang/String;
*/
-JNIEXPORT jstring JNICALL Java_java_net_Inet6AddressImpl_getLocalHostName
+JNIEXPORT jstring JNICALL Inet6AddressImpl_getLocalHostName
(JNIEnv *, jobject);
/*
@@ -20,7 +20,7 @@
* Method: lookupAllHostAddr
* Signature: (Ljava/lang/String;)[Ljava/net/InetAddress;
*/
-JNIEXPORT jobjectArray JNICALL Java_java_net_Inet6AddressImpl_lookupAllHostAddr
+JNIEXPORT jobjectArray JNICALL Inet6AddressImpl_lookupAllHostAddr
(JNIEnv *, jobject, jstring);
/*
@@ -28,7 +28,7 @@
* Method: getHostByAddr
* Signature: ([B)Ljava/lang/String;
*/
-JNIEXPORT jstring JNICALL Java_java_net_Inet6AddressImpl_getHostByAddr
+JNIEXPORT jstring JNICALL Inet6AddressImpl_getHostByAddr
(JNIEnv *, jobject, jbyteArray);
/*
@@ -36,7 +36,7 @@
* Method: isReachable0
* Signature: ([BII[BII)Z
*/
-JNIEXPORT jboolean JNICALL Java_java_net_Inet6AddressImpl_isReachable0
+JNIEXPORT jboolean JNICALL Inet6AddressImpl_isReachable0
(JNIEnv *, jobject, jbyteArray, jint, jint, jbyteArray, jint, jint);
#ifdef __cplusplus
diff --git a/ojluni/src/main/native/java_net_InetAddress.h b/ojluni/src/main/native/java_net_InetAddress.h
index 8125ff1..47f8a17 100755
--- a/ojluni/src/main/native/java_net_InetAddress.h
+++ b/ojluni/src/main/native/java_net_InetAddress.h
@@ -20,7 +20,7 @@
* Method: init
* Signature: ()V
*/
-JNIEXPORT void JNICALL Java_java_net_InetAddress_init
+JNIEXPORT void JNICALL InetAddress_init
(JNIEnv *, jclass);
#ifdef __cplusplus
diff --git a/ojluni/src/main/native/java_net_NetworkInterface.h b/ojluni/src/main/native/java_net_NetworkInterface.h
index 2a9c0b7..c9970c0 100755
--- a/ojluni/src/main/native/java_net_NetworkInterface.h
+++ b/ojluni/src/main/native/java_net_NetworkInterface.h
@@ -12,7 +12,7 @@
* Method: getAll
* Signature: ()[Ljava/net/NetworkInterface;
*/
-JNIEXPORT jobjectArray JNICALL Java_java_net_NetworkInterface_getAll
+JNIEXPORT jobjectArray JNICALL NetworkInterface_getAll
(JNIEnv *, jclass);
/*
@@ -20,7 +20,7 @@
* Method: getByName0
* Signature: (Ljava/lang/String;)Ljava/net/NetworkInterface;
*/
-JNIEXPORT jobject JNICALL Java_java_net_NetworkInterface_getByName0
+JNIEXPORT jobject JNICALL NetworkInterface_getByName0
(JNIEnv *, jclass, jstring);
/*
@@ -28,7 +28,7 @@
* Method: getByIndex0
* Signature: (I)Ljava/net/NetworkInterface;
*/
-JNIEXPORT jobject JNICALL Java_java_net_NetworkInterface_getByIndex0
+JNIEXPORT jobject JNICALL NetworkInterface_getByIndex0
(JNIEnv *, jclass, jint);
/*
@@ -36,7 +36,7 @@
* Method: getByInetAddress0
* Signature: (Ljava/net/InetAddress;)Ljava/net/NetworkInterface;
*/
-JNIEXPORT jobject JNICALL Java_java_net_NetworkInterface_getByInetAddress0
+JNIEXPORT jobject JNICALL NetworkInterface_getByInetAddress0
(JNIEnv *, jclass, jobject);
/*
@@ -44,7 +44,7 @@
* Method: isUp0
* Signature: (Ljava/lang/String;I)Z
*/
-JNIEXPORT jboolean JNICALL Java_java_net_NetworkInterface_isUp0
+JNIEXPORT jboolean JNICALL NetworkInterface_isUp0
(JNIEnv *, jclass, jstring, jint);
/*
@@ -52,7 +52,7 @@
* Method: isLoopback0
* Signature: (Ljava/lang/String;I)Z
*/
-JNIEXPORT jboolean JNICALL Java_java_net_NetworkInterface_isLoopback0
+JNIEXPORT jboolean JNICALL NetworkInterface_isLoopback0
(JNIEnv *, jclass, jstring, jint);
/*
@@ -60,7 +60,7 @@
* Method: supportsMulticast0
* Signature: (Ljava/lang/String;I)Z
*/
-JNIEXPORT jboolean JNICALL Java_java_net_NetworkInterface_supportsMulticast0
+JNIEXPORT jboolean JNICALL NetworkInterface_supportsMulticast0
(JNIEnv *, jclass, jstring, jint);
/*
@@ -68,7 +68,7 @@
* Method: isP2P0
* Signature: (Ljava/lang/String;I)Z
*/
-JNIEXPORT jboolean JNICALL Java_java_net_NetworkInterface_isP2P0
+JNIEXPORT jboolean JNICALL NetworkInterface_isP2P0
(JNIEnv *, jclass, jstring, jint);
/*
@@ -76,7 +76,7 @@
* Method: getMacAddr0
* Signature: ([BLjava/lang/String;I)[B
*/
-JNIEXPORT jbyteArray JNICALL Java_java_net_NetworkInterface_getMacAddr0
+JNIEXPORT jbyteArray JNICALL NetworkInterface_getMacAddr0
(JNIEnv *, jclass, jbyteArray, jstring, jint);
/*
@@ -84,7 +84,7 @@
* Method: getMTU0
* Signature: (Ljava/lang/String;I)I
*/
-JNIEXPORT jint JNICALL Java_java_net_NetworkInterface_getMTU0
+JNIEXPORT jint JNICALL NetworkInterface_getMTU0
(JNIEnv *, jclass, jstring, jint);
/*
@@ -92,7 +92,7 @@
* Method: init
* Signature: ()V
*/
-JNIEXPORT void JNICALL Java_java_net_NetworkInterface_init
+JNIEXPORT void JNICALL NetworkInterface_init
(JNIEnv *, jclass);
#ifdef __cplusplus
diff --git a/ojluni/src/main/native/java_net_PlainDatagramSocketImpl.h b/ojluni/src/main/native/java_net_PlainDatagramSocketImpl.h
index 50719c4..d974ce7 100755
--- a/ojluni/src/main/native/java_net_PlainDatagramSocketImpl.h
+++ b/ojluni/src/main/native/java_net_PlainDatagramSocketImpl.h
@@ -12,7 +12,7 @@
* Method: bind0
* Signature: (ILjava/net/InetAddress;)V
*/
-JNIEXPORT void JNICALL Java_java_net_PlainDatagramSocketImpl_bind0
+JNIEXPORT void JNICALL PlainDatagramSocketImpl_bind0
(JNIEnv *, jobject, jint, jobject);
/*
@@ -20,7 +20,7 @@
* Method: send
* Signature: (Ljava/net/DatagramPacket;)V
*/
-JNIEXPORT void JNICALL Java_java_net_PlainDatagramSocketImpl_send
+JNIEXPORT void JNICALL PlainDatagramSocketImpl_send
(JNIEnv *, jobject, jobject);
/*
@@ -28,7 +28,7 @@
* Method: peek
* Signature: (Ljava/net/InetAddress;)I
*/
-JNIEXPORT jint JNICALL Java_java_net_PlainDatagramSocketImpl_peek
+JNIEXPORT jint JNICALL PlainDatagramSocketImpl_peek
(JNIEnv *, jobject, jobject);
/*
@@ -36,7 +36,7 @@
* Method: peekData
* Signature: (Ljava/net/DatagramPacket;)I
*/
-JNIEXPORT jint JNICALL Java_java_net_PlainDatagramSocketImpl_peekData
+JNIEXPORT jint JNICALL PlainDatagramSocketImpl_peekData
(JNIEnv *, jobject, jobject);
/*
@@ -44,7 +44,7 @@
* Method: receive0
* Signature: (Ljava/net/DatagramPacket;)V
*/
-JNIEXPORT void JNICALL Java_java_net_PlainDatagramSocketImpl_receive0
+JNIEXPORT void JNICALL PlainDatagramSocketImpl_receive0
(JNIEnv *, jobject, jobject);
/*
@@ -52,7 +52,7 @@
* Method: setTimeToLive
* Signature: (I)V
*/
-JNIEXPORT void JNICALL Java_java_net_PlainDatagramSocketImpl_setTimeToLive
+JNIEXPORT void JNICALL PlainDatagramSocketImpl_setTimeToLive
(JNIEnv *, jobject, jint);
/*
@@ -60,7 +60,7 @@
* Method: getTimeToLive
* Signature: ()I
*/
-JNIEXPORT jint JNICALL Java_java_net_PlainDatagramSocketImpl_getTimeToLive
+JNIEXPORT jint JNICALL PlainDatagramSocketImpl_getTimeToLive
(JNIEnv *, jobject);
/*
@@ -68,7 +68,7 @@
* Method: setTTL
* Signature: (B)V
*/
-JNIEXPORT void JNICALL Java_java_net_PlainDatagramSocketImpl_setTTL
+JNIEXPORT void JNICALL PlainDatagramSocketImpl_setTTL
(JNIEnv *, jobject, jbyte);
/*
@@ -76,7 +76,7 @@
* Method: getTTL
* Signature: ()B
*/
-JNIEXPORT jbyte JNICALL Java_java_net_PlainDatagramSocketImpl_getTTL
+JNIEXPORT jbyte JNICALL PlainDatagramSocketImpl_getTTL
(JNIEnv *, jobject);
/*
@@ -84,7 +84,7 @@
* Method: join
* Signature: (Ljava/net/InetAddress;Ljava/net/NetworkInterface;)V
*/
-JNIEXPORT void JNICALL Java_java_net_PlainDatagramSocketImpl_join
+JNIEXPORT void JNICALL PlainDatagramSocketImpl_join
(JNIEnv *, jobject, jobject, jobject);
/*
@@ -92,7 +92,7 @@
* Method: leave
* Signature: (Ljava/net/InetAddress;Ljava/net/NetworkInterface;)V
*/
-JNIEXPORT void JNICALL Java_java_net_PlainDatagramSocketImpl_leave
+JNIEXPORT void JNICALL PlainDatagramSocketImpl_leave
(JNIEnv *, jobject, jobject, jobject);
/*
@@ -100,7 +100,7 @@
* Method: datagramSocketCreate
* Signature: ()V
*/
-JNIEXPORT void JNICALL Java_java_net_PlainDatagramSocketImpl_datagramSocketCreate
+JNIEXPORT void JNICALL PlainDatagramSocketImpl_datagramSocketCreate
(JNIEnv *, jobject);
/*
@@ -108,7 +108,7 @@
* Method: datagramSocketClose
* Signature: ()V
*/
-JNIEXPORT void JNICALL Java_java_net_PlainDatagramSocketImpl_datagramSocketClose
+JNIEXPORT void JNICALL PlainDatagramSocketImpl_datagramSocketClose
(JNIEnv *, jobject);
/*
@@ -116,7 +116,7 @@
* Method: socketSetOption
* Signature: (ILjava/lang/Object;)V
*/
-JNIEXPORT void JNICALL Java_java_net_PlainDatagramSocketImpl_socketSetOption
+JNIEXPORT void JNICALL PlainDatagramSocketImpl_socketSetOption
(JNIEnv *, jobject, jint, jobject);
/*
@@ -124,7 +124,7 @@
* Method: socketGetOption
* Signature: (I)Ljava/lang/Object;
*/
-JNIEXPORT jobject JNICALL Java_java_net_PlainDatagramSocketImpl_socketGetOption
+JNIEXPORT jobject JNICALL PlainDatagramSocketImpl_socketGetOption
(JNIEnv *, jobject, jint);
/*
@@ -132,7 +132,7 @@
* Method: connect0
* Signature: (Ljava/net/InetAddress;I)V
*/
-JNIEXPORT void JNICALL Java_java_net_PlainDatagramSocketImpl_connect0
+JNIEXPORT void JNICALL PlainDatagramSocketImpl_connect0
(JNIEnv *, jobject, jobject, jint);
/*
@@ -140,7 +140,7 @@
* Method: disconnect0
* Signature: (I)V
*/
-JNIEXPORT void JNICALL Java_java_net_PlainDatagramSocketImpl_disconnect0
+JNIEXPORT void JNICALL PlainDatagramSocketImpl_disconnect0
(JNIEnv *, jobject, jint);
/*
@@ -148,7 +148,7 @@
* Method: init
* Signature: ()V
*/
-JNIEXPORT void JNICALL Java_java_net_PlainDatagramSocketImpl_init
+JNIEXPORT void JNICALL PlainDatagramSocketImpl_init
(JNIEnv *, jclass);
#ifdef __cplusplus
diff --git a/ojluni/src/main/native/java_net_PlainSocketImpl.h b/ojluni/src/main/native/java_net_PlainSocketImpl.h
index 9afa226..dad8b66 100755
--- a/ojluni/src/main/native/java_net_PlainSocketImpl.h
+++ b/ojluni/src/main/native/java_net_PlainSocketImpl.h
@@ -16,7 +16,7 @@
* Method: socketCreate
* Signature: (Z)V
*/
-JNIEXPORT void JNICALL Java_java_net_PlainSocketImpl_socketCreate
+JNIEXPORT void JNICALL PlainSocketImpl_socketCreate
(JNIEnv *, jobject, jboolean);
/*
@@ -24,7 +24,7 @@
* Method: socketConnect
* Signature: (Ljava/net/InetAddress;II)V
*/
-JNIEXPORT void JNICALL Java_java_net_PlainSocketImpl_socketConnect
+JNIEXPORT void JNICALL PlainSocketImpl_socketConnect
(JNIEnv *, jobject, jobject, jint, jint);
/*
@@ -32,7 +32,7 @@
* Method: socketBind
* Signature: (Ljava/net/InetAddress;I)V
*/
-JNIEXPORT void JNICALL Java_java_net_PlainSocketImpl_socketBind
+JNIEXPORT void JNICALL PlainSocketImpl_socketBind
(JNIEnv *, jobject, jobject, jint);
/*
@@ -40,7 +40,7 @@
* Method: socketListen
* Signature: (I)V
*/
-JNIEXPORT void JNICALL Java_java_net_PlainSocketImpl_socketListen
+JNIEXPORT void JNICALL PlainSocketImpl_socketListen
(JNIEnv *, jobject, jint);
/*
@@ -48,7 +48,7 @@
* Method: socketAccept
* Signature: (Ljava/net/SocketImpl;)V
*/
-JNIEXPORT void JNICALL Java_java_net_PlainSocketImpl_socketAccept
+JNIEXPORT void JNICALL PlainSocketImpl_socketAccept
(JNIEnv *, jobject, jobject);
/*
@@ -56,7 +56,7 @@
* Method: socketAvailable
* Signature: ()I
*/
-JNIEXPORT jint JNICALL Java_java_net_PlainSocketImpl_socketAvailable
+JNIEXPORT jint JNICALL PlainSocketImpl_socketAvailable
(JNIEnv *, jobject);
/*
@@ -64,7 +64,7 @@
* Method: socketClose0
* Signature: (Z)V
*/
-JNIEXPORT void JNICALL Java_java_net_PlainSocketImpl_socketClose0
+JNIEXPORT void JNICALL PlainSocketImpl_socketClose0
(JNIEnv *, jobject, jboolean);
/*
@@ -72,7 +72,7 @@
* Method: socketShutdown
* Signature: (I)V
*/
-JNIEXPORT void JNICALL Java_java_net_PlainSocketImpl_socketShutdown
+JNIEXPORT void JNICALL PlainSocketImpl_socketShutdown
(JNIEnv *, jobject, jint);
/*
@@ -80,7 +80,7 @@
* Method: initProto
* Signature: ()V
*/
-JNIEXPORT void JNICALL Java_java_net_PlainSocketImpl_initProto
+JNIEXPORT void JNICALL PlainSocketImpl_initProto
(JNIEnv *, jclass);
/*
@@ -88,7 +88,7 @@
* Method: socketSetOption
* Signature: (IZLjava/lang/Object;)V
*/
-JNIEXPORT void JNICALL Java_java_net_PlainSocketImpl_socketSetOption
+JNIEXPORT void JNICALL PlainSocketImpl_socketSetOption
(JNIEnv *, jobject, jint, jboolean, jobject);
/*
@@ -96,7 +96,7 @@
* Method: socketGetOption
* Signature: (ILjava/lang/Object;)I
*/
-JNIEXPORT jint JNICALL Java_java_net_PlainSocketImpl_socketGetOption
+JNIEXPORT jint JNICALL PlainSocketImpl_socketGetOption
(JNIEnv *, jobject, jint, jobject);
/*
@@ -104,7 +104,7 @@
* Method: socketSendUrgentData
* Signature: (I)V
*/
-JNIEXPORT void JNICALL Java_java_net_PlainSocketImpl_socketSendUrgentData
+JNIEXPORT void JNICALL PlainSocketImpl_socketSendUrgentData
(JNIEnv *, jobject, jint);
#ifdef __cplusplus
diff --git a/ojluni/src/main/native/net_util.c b/ojluni/src/main/native/net_util.c
index 2f99a34..913b911 100755
--- a/ojluni/src/main/native/net_util.c
+++ b/ojluni/src/main/native/net_util.c
@@ -38,7 +38,7 @@
}
JNIEXPORT jint JNICALL
-JNI_OnLoad(JavaVM *vm, void *reserved)
+net_JNI_OnLoad(JavaVM *vm, void* ignored)
{
JNIEnv *env;
jclass iCls;
@@ -77,9 +77,9 @@
static void initInetAddrs(JNIEnv *env) {
if (!initialized) {
- Java_java_net_InetAddress_init(env, 0);
- Java_java_net_Inet4Address_init(env, 0);
- Java_java_net_Inet6Address_init(env, 0);
+ InetAddress_init(env, 0);
+ Inet4Address_init(env, 0);
+ Inet6Address_init(env, 0);
initialized = 1;
}
}
diff --git a/ojluni/src/main/native/net_util.h b/ojluni/src/main/native/net_util.h
index 604c83d..9a68593 100755
--- a/ojluni/src/main/native/net_util.h
+++ b/ojluni/src/main/native/net_util.h
@@ -104,10 +104,10 @@
/************************************************************************
* Utilities
*/
-JNIEXPORT void JNICALL Java_java_net_InetAddress_init(JNIEnv *env, jclass cls);
-JNIEXPORT void JNICALL Java_java_net_Inet4Address_init(JNIEnv *env, jclass cls);
-JNIEXPORT void JNICALL Java_java_net_Inet6Address_init(JNIEnv *env, jclass cls);
-JNIEXPORT void JNICALL Java_java_net_NetworkInterface_init(JNIEnv *env, jclass cls);
+JNIEXPORT void JNICALL InetAddress_init(JNIEnv *env, jclass cls);
+JNIEXPORT void JNICALL Inet4Address_init(JNIEnv *env, jclass cls);
+JNIEXPORT void JNICALL Inet6Address_init(JNIEnv *env, jclass cls);
+JNIEXPORT void JNICALL NetworkInterface_init(JNIEnv *env, jclass cls);
JNIEXPORT void JNICALL NET_ThrowNew(JNIEnv *env, int errorNum, char *msg);
int NET_GetError();
diff --git a/ojluni/src/main/native/net_util_md.c b/ojluni/src/main/native/net_util_md.c
index 84b3156..36efdba 100755
--- a/ojluni/src/main/native/net_util_md.c
+++ b/ojluni/src/main/native/net_util_md.c
@@ -34,15 +34,13 @@
#include <stdlib.h>
#include <dlfcn.h>
-#ifndef _ALLBSD_SOURCE
-#include <values.h>
-#else
#include <limits.h>
#include <sys/param.h>
-#include <sys/sysctl.h>
#ifndef MAXINT
#define MAXINT INT_MAX
#endif
+#ifdef __BIONIC__
+#include <linux/ipv6_route.h>
#endif
#ifdef __solaris__
@@ -114,9 +112,9 @@
static jfieldID ni_defaultIndexID;
if (ni_class == NULL) {
jclass c = (*env)->FindClass(env, "java/net/NetworkInterface");
- CHECK_NULL(c);
+ if (c == NULL) return 0;
c = (*env)->NewGlobalRef(env, c);
- CHECK_NULL(c);
+ if (c == NULL) return 0;
ni_defaultIndexID = (*env)->GetStaticFieldID(
env, c, "defaultIndex", "I");
ni_class = c;
diff --git a/ojluni/src/main/native/openjdksub.mk b/ojluni/src/main/native/openjdksub.mk
index daa7ea7..6ec14e9 100644
--- a/ojluni/src/main/native/openjdksub.mk
+++ b/ojluni/src/main/native/openjdksub.mk
@@ -26,6 +26,22 @@
UnixFileSystem_md.c \
FileSystem_md.c \
ObjectStreamClass.c \
+ InetAddress.c \
+ InetAddressImplFactory.c \
+ net_util.c \
+ net_util_md.c \
+ Inet6Address.c \
+ Inet4Address.c \
+ linux_close.c \
+ PlainSocketImpl.c \
+ PlainDatagramSocketImpl.c \
+ NetworkInterface.c \
+ DatagramPacket.c \
+ Inet4AddressImpl.c \
+ Inet6AddressImpl.c \
+ SocketInputStream.c \
+ SocketOutputStream.c \
+ DefaultProxySelector.c \
Register.cpp \
LOCAL_C_INCLUDES += \
diff --git a/openjdk_java_files b/openjdk_java_files
index cc78193..b0ef967 100644
--- a/openjdk_java_files
+++ b/openjdk_java_files
@@ -23,6 +23,8 @@
com/sun/java/util/jar/pack/TLGlobals.java
com/sun/java/util/jar/pack/UnpackerImpl.java
com/sun/java/util/jar/pack/Utils.java
+com/sun/net/ssl/internal/ssl/Provider.java
+com/sun/net/ssl/internal/ssl/X509ExtendedTrustManager.java
com/sun/nio/file/ExtendedCopyOption.java
com/sun/security/cert/internal/x509/X509V1CertImpl.java
java/awt/font/NumericShaper.java
@@ -159,10 +161,84 @@
java/lang/ref/WeakReference.java
java/lang/RuntimePermission.java
java/lang/Shutdown.java
+java/net/AbstractPlainDatagramSocketImpl.java
+java/net/AbstractPlainSocketImpl.java
+java/net/Authenticator.java
+java/net/BindException.java
+java/net/CacheRequest.java
+java/net/CacheResponse.java
+java/net/ConnectException.java
+java/net/ContentHandlerFactory.java
+java/net/ContentHandler.java
+java/net/CookieHandler.java
+java/net/CookieManager.java
+java/net/CookiePolicy.java
+java/net/CookieStore.java
+java/net/DatagramPacket.java
+java/net/DatagramSocketImplFactory.java
+java/net/DatagramSocketImpl.java
+java/net/DatagramSocket.java
+java/net/DefaultDatagramSocketImplFactory.java
+java/net/DefaultInterface.java
+java/net/FileNameMap.java
+java/net/HttpCookie.java
+java/net/HttpRetryException.java
+java/net/HttpURLConnection.java
+java/net/IDN.java
+java/net/Inet4AddressImpl.java
+java/net/Inet4Address.java
+java/net/Inet6AddressImpl.java
+java/net/Inet6Address.java
+java/net/InetAddressImpl.java
+java/net/InetAddress.java
+java/net/InetSocketAddress.java
+java/net/InMemoryCookieStore.java
+java/net/InterfaceAddress.java
+java/net/JarURLConnection.java
+java/net/MalformedURLException.java
+java/net/MulticastSocket.java
+java/net/NetPermission.java
+java/net/NetUtil.java
+java/net/NetworkInterface.java
+java/net/NoRouteToHostException.java
+java/net/PasswordAuthentication.java
+java/net/PlainDatagramSocketImpl.java
+java/net/PlainSocketImpl.java
+java/net/PortUnreachableException.java
+java/net/ProtocolException.java
java/net/ProtocolFamily.java
+java/net/Proxy.java
+java/net/ProxySelector.java
+java/net/ResponseCache.java
+java/net/SecureCacheResponse.java
+java/net/ServerSocket.java
+java/net/SocketAddress.java
+java/net/SocketException.java
+java/net/SocketImplFactory.java
+java/net/SocketImpl.java
+java/net/SocketInputStream.java
+java/net/Socket.java
java/net/SocketOption.java
+java/net/SocketOptions.java
+java/net/SocketOutputStream.java
+java/net/SocketPermission.java
+java/net/SocketTimeoutException.java
+java/net/SocketUtils.java
+java/net/SocksConsts.java
+java/net/SocksSocketImpl.java
java/net/StandardProtocolFamily.java
java/net/StandardSocketOptions.java
+java/net/UnknownHostException.java
+java/net/UnknownServiceException.java
+java/net/URI.java
+java/net/URISyntaxException.java
+java/net/URLClassLoader.java
+java/net/URLConnection.java
+java/net/URLDecoder.java
+java/net/URLEncoder.java
+java/net/URL.java
+java/net/URLStreamHandlerFactory.java
+java/net/URLStreamHandler.java
java/nio/Bits.java
java/nio/Buffer.java
java/nio/BufferOverflowException.java
@@ -459,6 +535,7 @@
java/security/cert/PKIXCertPathChecker.java
java/security/cert/PKIXCertPathValidatorResult.java
java/security/cert/PKIXParameters.java
+java/security/cert/PKIXReason.java
java/security/cert/PolicyNode.java
java/security/cert/PolicyQualifierInfo.java
java/security/cert/TrustAnchor.java
@@ -893,8 +970,10 @@
javax/net/ServerSocketFactory.java
javax/net/SocketFactory.java
javax/net/ssl/CertPathTrustManagerParameters.java
+javax/net/ssl/DefaultHostnameVerifier.java
javax/net/ssl/DefaultSSLServerSocketFactory.java
javax/net/ssl/DefaultSSLSocketFactory.java
+javax/net/ssl/ExtendedSSLSession.java
javax/net/ssl/HandshakeCompletedEvent.java
javax/net/ssl/HandshakeCompletedListener.java
javax/net/ssl/HostnameVerifier.java
@@ -926,6 +1005,7 @@
javax/net/ssl/TrustManagerFactory.java
javax/net/ssl/TrustManagerFactorySpi.java
javax/net/ssl/TrustManager.java
+javax/net/ssl/X509ExtendedTrustManager.java
javax/net/ssl/X509KeyManager.java
javax/net/ssl/X509TrustManager.java
javax/security/auth/AuthPermission.java
@@ -971,33 +1051,138 @@
org/apache/harmony/security/fortress/Engine.java
org/apache/harmony/security/fortress/SecurityAccess.java
org/apache/harmony/security/fortress/Services.java
+org/apache/harmony/security/utils/JarUtils.java
+org/apache/harmony/security/x509/tsp/TimeStampReq.java
+org/apache/harmony/security/x509/tsp/TimeStampResp.java
+org/apache/harmony/security/x509/tsp/TSTInfo.java
sun/misc/ASCIICaseInsensitiveComparator.java
sun/misc/BASE64Decoder.java
+sun/misc/BASE64Encoder.java
sun/misc/CEFormatException.java
sun/misc/CEStreamExhausted.java
sun/misc/CharacterDecoder.java
sun/misc/CharacterEncoder.java
sun/misc/Cleaner.java
sun/misc/DoubleConsts.java
+sun/misc/FileURLMapper.java
sun/misc/FloatConsts.java
sun/misc/FloatingDecimal.java
sun/misc/FormattedFloatingDecimal.java
sun/misc/FpUtils.java
sun/misc/Hashing.java
sun/misc/HexDumpEncoder.java
+sun/misc/InvalidJarIndexException.java
sun/misc/IoTrace.java
sun/misc/IOUtils.java
sun/misc/JarIndex.java
sun/misc/JavaSecurityProtectionDomainAccess.java
sun/misc/LRUCache.java
sun/misc/MetaIndex.java
+sun/misc/REException.java
+sun/misc/RegexpPool.java
+sun/misc/RegexpTarget.java
+sun/misc/Resource.java
+sun/misc/ServiceConfigurationError.java
+sun/misc/Service.java
sun/misc/SoftCache.java
+sun/misc/URLClassPath.java
sun/misc/VM.java
+sun/net/ApplicationProxy.java
+sun/net/ConnectionResetException.java
+sun/net/ftp/FtpClient.java
+sun/net/ftp/FtpClientProvider.java
+sun/net/ftp/FtpDirEntry.java
+sun/net/ftp/FtpDirParser.java
+sun/net/ftp/FtpLoginException.java
+sun/net/ftp/FtpProtocolException.java
+sun/net/ftp/FtpReplyCode.java
+sun/net/ftp/impl/DefaultFtpClientProvider.java
+sun/net/ftp/impl/FtpClient.java
+sun/net/idn/Punycode.java
+sun/net/idn/StringPrepDataReader.java
+sun/net/idn/StringPrep.java
+sun/net/idn/UCharacterDirection.java
+sun/net/idn/UCharacterEnums.java
+sun/net/InetAddressCachePolicy.java
sun/net/NetHooks.java
+sun/net/NetProperties.java
+sun/net/NetworkClient.java
+sun/net/ProgressEvent.java
+sun/net/ProgressListener.java
+sun/net/ProgressMeteringPolicy.java
+sun/net/ProgressMonitor.java
+sun/net/ProgressSource.java
+sun/net/RegisteredDomain.java
sun/net/ResourceManager.java
sun/net/sdp/SdpProvider.java
sun/net/sdp/SdpSupport.java
+sun/net/smtp/SmtpClient.java
+sun/net/smtp/SmtpProtocolException.java
+sun/net/SocksProxy.java
+sun/net/spi/DefaultProxySelector.java
+sun/net/spi/nameservice/NameServiceDescriptor.java
+sun/net/spi/nameservice/NameService.java
+sun/net/TelnetInputStream.java
+sun/net/TelnetOutputStream.java
+sun/net/TelnetProtocolException.java
+sun/net/TransferProtocolClient.java
+sun/net/util/IPAddressUtil.java
+sun/net/util/URLUtil.java
+sun/net/www/ApplicationLaunchException.java
+sun/net/www/HeaderParser.java
+sun/net/www/http/ChunkedInputStream.java
+sun/net/www/http/ChunkedOutputStream.java
+sun/net/www/http/HttpCaptureInputStream.java
+sun/net/www/http/HttpCapture.java
+sun/net/www/http/HttpCaptureOutputStream.java
+sun/net/www/http/HttpClient.java
+sun/net/www/http/Hurryable.java
+sun/net/www/http/KeepAliveCache.java
+sun/net/www/http/KeepAliveStreamCleaner.java
+sun/net/www/http/KeepAliveStream.java
+sun/net/www/http/PosterOutputStream.java
+sun/net/www/MessageHeader.java
+sun/net/www/MeteredStream.java
+sun/net/www/MimeEntry.java
+sun/net/www/MimeLauncher.java
+sun/net/www/MimeTable.java
sun/net/www/ParseUtil.java
+sun/net/www/protocol/file/FileURLConnection.java
+sun/net/www/protocol/file/Handler.java
+sun/net/www/protocol/ftp/FtpURLConnection.java
+sun/net/www/protocol/ftp/Handler.java
+sun/net/www/protocol/gopher/GopherClient.java
+sun/net/www/protocol/gopher/Handler.java
+sun/net/www/protocol/http/AuthCacheImpl.java
+sun/net/www/protocol/http/AuthCache.java
+sun/net/www/protocol/http/AuthCacheValue.java
+sun/net/www/protocol/http/AuthenticationHeader.java
+sun/net/www/protocol/http/AuthenticationInfo.java
+sun/net/www/protocol/http/AuthScheme.java
+sun/net/www/protocol/http/BasicAuthentication.java
+sun/net/www/protocol/http/DigestAuthentication.java
+sun/net/www/protocol/http/Handler.java
+sun/net/www/protocol/http/HttpAuthenticator.java
+sun/net/www/protocol/http/HttpCallerInfo.java
+sun/net/www/protocol/http/HttpURLConnection.java
+sun/net/www/protocol/http/NegotiateAuthentication.java
+sun/net/www/protocol/http/Negotiator.java
+sun/net/www/protocol/http/NTLMAuthenticationProxy.java
+sun/net/www/protocol/https/AbstractDelegateHttpsURLConnection.java
+sun/net/www/protocol/https/DelegateHttpsURLConnection.java
+sun/net/www/protocol/https/Handler.java
+sun/net/www/protocol/https/HttpsClient.java
+sun/net/www/protocol/https/HttpsURLConnectionImpl.java
+sun/net/www/protocol/jar/Handler.java
+sun/net/www/protocol/jar/JarFileFactory.java
+sun/net/www/protocol/jar/JarURLConnection.java
+sun/net/www/protocol/jar/URLJarFileCallBack.java
+sun/net/www/protocol/jar/URLJarFile.java
+sun/net/www/protocol/mailto/Handler.java
+sun/net/www/protocol/mailto/MailToURLConnection.java
+sun/net/www/protocol/netdoc/Handler.java
+sun/net/www/URLConnection.java
+sun/nio/ByteBuffered.java
sun/nio/ch/AbstractPollArrayWrapper.java
sun/nio/ch/AbstractPollSelectorImpl.java
sun/nio/ch/AllocatedNativeObject.java
@@ -1177,6 +1362,12 @@
sun/security/ec/ECPrivateKeyImpl.java
sun/security/ec/ECPublicKeyImpl.java
sun/security/ec/NamedCurve.java
+sun/security/internal/interfaces/TlsMasterSecret.java
+sun/security/internal/spec/TlsKeyMaterialParameterSpec.java
+sun/security/internal/spec/TlsKeyMaterialSpec.java
+sun/security/internal/spec/TlsMasterSecretParameterSpec.java
+sun/security/internal/spec/TlsPrfParameterSpec.java
+sun/security/internal/spec/TlsRsaPremasterSecretParameterSpec.java
sun/security/jca/GetInstance.java
sun/security/jca/JCAUtil.java
sun/security/jca/ProviderConfig.java
@@ -1191,7 +1382,9 @@
sun/security/pkcs/PKCS9Attributes.java
sun/security/pkcs/SignerInfo.java
sun/security/pkcs/SigningCertificateInfo.java
+sun/security/provider/certpath/AlgorithmChecker.java
sun/security/provider/certpath/CertPathHelper.java
+sun/security/provider/certpath/UntrustedChecker.java
sun/security/provider/certpath/X509CertificatePair.java
sun/security/provider/certpath/X509CertPath.java
sun/security/provider/NativePRNG.java
@@ -1202,6 +1395,61 @@
sun/security/provider/VerificationProvider.java
sun/security/provider/X509Factory.java
sun/security/rsa/SunRsaSignEntries.java
+sun/security/ssl/Alerts.java
+sun/security/ssl/AppInputStream.java
+sun/security/ssl/AppOutputStream.java
+sun/security/ssl/BaseSSLSocketImpl.java
+sun/security/ssl/ByteBufferInputStream.java
+sun/security/ssl/CipherBox.java
+sun/security/ssl/CipherSuite.java
+sun/security/ssl/CipherSuiteList.java
+sun/security/ssl/ClientHandshaker.java
+sun/security/ssl/Debug.java
+sun/security/ssl/DHClientKeyExchange.java
+sun/security/ssl/DHCrypt.java
+sun/security/ssl/ECDHClientKeyExchange.java
+sun/security/ssl/ECDHCrypt.java
+sun/security/ssl/EngineArgs.java
+sun/security/ssl/EngineInputRecord.java
+sun/security/ssl/EngineOutputRecord.java
+sun/security/ssl/EngineWriter.java
+sun/security/ssl/EphemeralKeyManager.java
+sun/security/ssl/HandshakeHash.java
+sun/security/ssl/HandshakeInStream.java
+sun/security/ssl/HandshakeMessage.java
+sun/security/ssl/HandshakeOutStream.java
+sun/security/ssl/Handshaker.java
+sun/security/ssl/HelloExtensions.java
+sun/security/ssl/InputRecord.java
+sun/security/ssl/JsseJce.java
+sun/security/ssl/KerberosClientKeyExchange.java
+sun/security/ssl/Krb5Helper.java
+sun/security/ssl/Krb5Proxy.java
+sun/security/ssl/MAC.java
+sun/security/ssl/OutputRecord.java
+sun/security/ssl/ProtocolList.java
+sun/security/ssl/ProtocolVersion.java
+sun/security/ssl/RandomCookie.java
+sun/security/ssl/Record.java
+sun/security/ssl/RSAClientKeyExchange.java
+sun/security/ssl/RSASignature.java
+sun/security/ssl/ServerHandshaker.java
+sun/security/ssl/SessionId.java
+sun/security/ssl/SignatureAndHashAlgorithm.java
+sun/security/ssl/SSLAlgorithmConstraints.java
+sun/security/ssl/SSLContextImpl.java
+sun/security/ssl/SSLEngineImpl.java
+sun/security/ssl/SSLServerSocketFactoryImpl.java
+sun/security/ssl/SSLServerSocketImpl.java
+sun/security/ssl/SSLSessionContextImpl.java
+sun/security/ssl/SSLSessionImpl.java
+sun/security/ssl/SSLSocketFactoryImpl.java
+sun/security/ssl/SSLSocketImpl.java
+sun/security/ssl/SunJSSE.java
+sun/security/ssl/SunX509KeyManagerImpl.java
+sun/security/ssl/TrustManagerFactoryImpl.java
+sun/security/ssl/X509KeyManagerImpl.java
+sun/security/ssl/X509TrustManagerImpl.java
sun/security/timestamp/TimestampToken.java
sun/security/util/BitArray.java
sun/security/util/ByteArrayLexOrder.java
@@ -1214,6 +1462,10 @@
sun/security/util/DerInputStream.java
sun/security/util/DerOutputStream.java
sun/security/util/DerValue.java
+sun/security/util/DisabledAlgorithmConstraints.java
+sun/security/util/HostnameChecker.java
+sun/security/util/KeyUtil.java
+sun/security/util/Length.java
sun/security/util/ManifestDigester.java
sun/security/util/ManifestEntryVerifier.java
sun/security/util/ObjectIdentifier.java
@@ -1232,6 +1484,13 @@
sun/security/util/Resources_zh_TW.java
sun/security/util/SecurityConstants.java
sun/security/util/SignatureFileVerifier.java
+sun/security/util/UntrustedCertificates.java
+sun/security/validator/EndEntityChecker.java
+sun/security/validator/KeyStores.java
+sun/security/validator/PKIXValidator.java
+sun/security/validator/SimpleValidator.java
+sun/security/validator/ValidatorException.java
+sun/security/validator/Validator.java
sun/security/x509/AccessDescription.java
sun/security/x509/AlgorithmId.java
sun/security/x509/AttributeNameEnumeration.java