diff options
author | Gary Benson <gbenson@redhat.com> | 2006-11-03 10:16:04 +0000 |
---|---|---|
committer | Gary Benson <gary@gcc.gnu.org> | 2006-11-03 10:16:04 +0000 |
commit | adefdaca2d8aa874f3e1f5b8be2736355292b6a4 (patch) | |
tree | 8a6600d7ecfed57029e5fe6bcacbb895c3ca5b97 /libjava | |
parent | 5d7de335d797bb22671a929a0b3712fa25aeb4fe (diff) | |
download | gcc-adefdaca2d8aa874f3e1f5b8be2736355292b6a4.zip gcc-adefdaca2d8aa874f3e1f5b8be2736355292b6a4.tar.gz gcc-adefdaca2d8aa874f3e1f5b8be2736355292b6a4.tar.bz2 |
InetAddress.java: Removed.
2006-11-03 Gary Benson <gbenson@redhat.com>
* java/net/InetAddress.java: Removed.
* java/net/natInetAddressNoNet.cc: Likewise.
* java/net/natInetAddressPosix.cc: Likewise.
* java/net/natInetAddressWin32.cc: Likewise.
* java/net/VMInetAddress.java (getLocalHostname,
lookupInaddrAny, getHostByAddr, getHostByName,
aton): Replace glue methods with native ones.
* java/net/natVMInetAddressNoNet.cc: New file.
* java/net/natVMInetAddressPosix.cc: Likewise.
* java/net/natVMInetAddressWin32.cc: Likewise.
* Makefile.am, configure.ac: Reflect the above.
* sources.am, Makefile.in, configure: Rebuilt.
* java/net/natVMNetworkInterfaceWin32.cc
(winsock2GetRealNetworkInterfaces): Create InetAddress
objects using InetAddress.getByAddress.
* gnu/java/net/natPlainSocketImplWin32.cc
(accept, getOption): Likewise.
* gnu/java/net/natPlainDatagramSocketImplWin32.cc
(peekData, receive, getOption): Likewise.
From-SVN: r118451
Diffstat (limited to 'libjava')
-rw-r--r-- | libjava/ChangeLog | 23 | ||||
-rw-r--r-- | libjava/Makefile.am | 2 | ||||
-rw-r--r-- | libjava/Makefile.in | 18 | ||||
-rwxr-xr-x | libjava/configure | 6 | ||||
-rw-r--r-- | libjava/configure.ac | 4 | ||||
-rw-r--r-- | libjava/gnu/java/net/natPlainDatagramSocketImplWin32.cc | 8 | ||||
-rw-r--r-- | libjava/gnu/java/net/natPlainSocketImplWin32.cc | 6 | ||||
-rw-r--r-- | libjava/java/net/InetAddress.java | 819 | ||||
-rw-r--r-- | libjava/java/net/VMInetAddress.java | 34 | ||||
-rw-r--r-- | libjava/java/net/natInetAddressNoNet.cc | 36 | ||||
-rw-r--r-- | libjava/java/net/natInetAddressPosix.cc | 304 | ||||
-rw-r--r-- | libjava/java/net/natInetAddressWin32.cc | 168 | ||||
-rw-r--r-- | libjava/java/net/natVMInetAddressNoNet.cc | 40 | ||||
-rw-r--r-- | libjava/java/net/natVMInetAddressPosix.cc | 289 | ||||
-rw-r--r-- | libjava/java/net/natVMInetAddressWin32.cc | 121 | ||||
-rw-r--r-- | libjava/java/net/natVMNetworkInterfaceWin32.cc | 6 | ||||
-rw-r--r-- | libjava/sources.am | 2 |
17 files changed, 506 insertions, 1380 deletions
diff --git a/libjava/ChangeLog b/libjava/ChangeLog index cdbf3da..b02e649 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -1,3 +1,26 @@ +2006-11-03 Gary Benson <gbenson@redhat.com> + + * java/net/InetAddress.java: Removed. + * java/net/natInetAddressNoNet.cc: Likewise. + * java/net/natInetAddressPosix.cc: Likewise. + * java/net/natInetAddressWin32.cc: Likewise. + * java/net/VMInetAddress.java (getLocalHostname, + lookupInaddrAny, getHostByAddr, getHostByName, + aton): Replace glue methods with native ones. + * java/net/natVMInetAddressNoNet.cc: New file. + * java/net/natVMInetAddressPosix.cc: Likewise. + * java/net/natVMInetAddressWin32.cc: Likewise. + * Makefile.am, configure.ac: Reflect the above. + * sources.am, Makefile.in, configure: Rebuilt. + + * java/net/natVMNetworkInterfaceWin32.cc + (winsock2GetRealNetworkInterfaces): Create InetAddress + objects using InetAddress.getByAddress. + * gnu/java/net/natPlainSocketImplWin32.cc + (accept, getOption): Likewise. + * gnu/java/net/natPlainDatagramSocketImplWin32.cc + (peekData, receive, getOption): Likewise. + 2006-11-02 Keith Seitz <keiths@redhat.com> * gnu/classpath/jdwp/natVMMethod.cc (getLineTable): Implement. diff --git a/libjava/Makefile.am b/libjava/Makefile.am index a1c041a..a0d6a3c 100644 --- a/libjava/Makefile.am +++ b/libjava/Makefile.am @@ -858,7 +858,7 @@ java/lang/reflect/natConstructor.cc \ java/lang/reflect/natField.cc \ java/lang/reflect/natMethod.cc \ java/net/natVMNetworkInterface.cc \ -java/net/natInetAddress.cc \ +java/net/natVMInetAddress.cc \ java/net/natURLClassLoader.cc \ java/nio/channels/natVMChannels.cc \ java/nio/natDirectByteBufferImpl.cc \ diff --git a/libjava/Makefile.in b/libjava/Makefile.in index d7692ac..ab5b511 100644 --- a/libjava/Makefile.in +++ b/libjava/Makefile.in @@ -95,7 +95,7 @@ CONFIG_HEADER = $(top_builddir)/include/config.h \ $(top_builddir)/gcj/libgcj-config.h CONFIG_CLEAN_FILES = libgcj.pc libgcj.spec libgcj-test.spec \ scripts/jar java/io/natFile.cc java/lang/ConcreteProcess.java \ - java/lang/natConcreteProcess.cc java/net/natInetAddress.cc \ + java/lang/natConcreteProcess.cc java/net/natVMInetAddress.cc \ java/net/natVMNetworkInterface.cc \ gnu/java/net/natPlainSocketImpl.cc \ gnu/java/net/natPlainDatagramSocketImpl.cc \ @@ -300,7 +300,7 @@ am__libgcj_la_SOURCES_DIST = prims.cc jni.cc jvmti.cc exception.cc \ java/lang/ref/natReference.cc java/lang/reflect/natArray.cc \ java/lang/reflect/natConstructor.cc \ java/lang/reflect/natField.cc java/lang/reflect/natMethod.cc \ - java/net/natVMNetworkInterface.cc java/net/natInetAddress.cc \ + java/net/natVMNetworkInterface.cc java/net/natVMInetAddress.cc \ java/net/natURLClassLoader.cc \ java/nio/channels/natVMChannels.cc \ java/nio/natDirectByteBufferImpl.cc \ @@ -348,7 +348,7 @@ am__objects_2 = gnu/classpath/natSystemProperties.lo \ java/lang/ref/natReference.lo java/lang/reflect/natArray.lo \ java/lang/reflect/natConstructor.lo \ java/lang/reflect/natField.lo java/lang/reflect/natMethod.lo \ - java/net/natVMNetworkInterface.lo java/net/natInetAddress.lo \ + java/net/natVMNetworkInterface.lo java/net/natVMInetAddress.lo \ java/net/natURLClassLoader.lo \ java/nio/channels/natVMChannels.lo \ java/nio/natDirectByteBufferImpl.lo \ @@ -4130,7 +4130,7 @@ classpath/java/net/FileNameMap.java \ classpath/java/net/HttpURLConnection.java \ classpath/java/net/Inet4Address.java \ classpath/java/net/Inet6Address.java \ -java/net/InetAddress.java \ +classpath/java/net/InetAddress.java \ classpath/java/net/InetSocketAddress.java \ classpath/java/net/JarURLConnection.java \ classpath/java/net/MalformedURLException.java \ @@ -7431,7 +7431,7 @@ java/lang/reflect/natConstructor.cc \ java/lang/reflect/natField.cc \ java/lang/reflect/natMethod.cc \ java/net/natVMNetworkInterface.cc \ -java/net/natInetAddress.cc \ +java/net/natVMInetAddress.cc \ java/net/natURLClassLoader.cc \ java/nio/channels/natVMChannels.cc \ java/nio/natDirectByteBufferImpl.cc \ @@ -7929,7 +7929,7 @@ java/net/$(DEPDIR)/$(am__dirstamp): @: > java/net/$(DEPDIR)/$(am__dirstamp) java/net/natVMNetworkInterface.lo: java/net/$(am__dirstamp) \ java/net/$(DEPDIR)/$(am__dirstamp) -java/net/natInetAddress.lo: java/net/$(am__dirstamp) \ +java/net/natVMInetAddress.lo: java/net/$(am__dirstamp) \ java/net/$(DEPDIR)/$(am__dirstamp) java/net/natURLClassLoader.lo: java/net/$(am__dirstamp) \ java/net/$(DEPDIR)/$(am__dirstamp) @@ -8261,10 +8261,10 @@ mostlyclean-compile: -rm -f java/lang/reflect/natField.lo -rm -f java/lang/reflect/natMethod.$(OBJEXT) -rm -f java/lang/reflect/natMethod.lo - -rm -f java/net/natInetAddress.$(OBJEXT) - -rm -f java/net/natInetAddress.lo -rm -f java/net/natURLClassLoader.$(OBJEXT) -rm -f java/net/natURLClassLoader.lo + -rm -f java/net/natVMInetAddress.$(OBJEXT) + -rm -f java/net/natVMInetAddress.lo -rm -f java/net/natVMNetworkInterface.$(OBJEXT) -rm -f java/net/natVMNetworkInterface.lo -rm -f java/nio/channels/natVMChannels.$(OBJEXT) @@ -8392,8 +8392,8 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@java/lang/reflect/$(DEPDIR)/natConstructor.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@java/lang/reflect/$(DEPDIR)/natField.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@java/lang/reflect/$(DEPDIR)/natMethod.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@java/net/$(DEPDIR)/natInetAddress.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@java/net/$(DEPDIR)/natURLClassLoader.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@java/net/$(DEPDIR)/natVMInetAddress.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@java/net/$(DEPDIR)/natVMNetworkInterface.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@java/nio/$(DEPDIR)/natDirectByteBufferImpl.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@java/nio/channels/$(DEPDIR)/natVMChannels.Plo@am__quote@ diff --git a/libjava/configure b/libjava/configure index 910850d..cab2891 100755 --- a/libjava/configure +++ b/libjava/configure @@ -7486,9 +7486,9 @@ test -d java/lang || mkdir java/lang ac_config_links="$ac_config_links java/lang/natConcreteProcess.cc:java/lang/nat${PLATFORM}Process.cc" -# Likewise for natInetAddress.cc and natVMNetworkInterface.cc. +# Likewise for natVMInetAddress.cc and natVMNetworkInterface.cc. test -d java/net || mkdir java/net - ac_config_links="$ac_config_links java/net/natInetAddress.cc:java/net/natInetAddress${PLATFORMNET}.cc" + ac_config_links="$ac_config_links java/net/natVMInetAddress.cc:java/net/natVMInetAddress${PLATFORMNET}.cc" ac_config_links="$ac_config_links java/net/natVMNetworkInterface.cc:java/net/natVMNetworkInterface${PLATFORMNET}.cc" @@ -17479,7 +17479,7 @@ do "java/io/natFile.cc" ) CONFIG_LINKS="$CONFIG_LINKS java/io/natFile.cc:java/io/natFile${FILE-${PLATFORM}}.cc" ;; "java/lang/ConcreteProcess.java" ) CONFIG_LINKS="$CONFIG_LINKS java/lang/ConcreteProcess.java:java/lang/${PLATFORM}Process.java" ;; "java/lang/natConcreteProcess.cc" ) CONFIG_LINKS="$CONFIG_LINKS java/lang/natConcreteProcess.cc:java/lang/nat${PLATFORM}Process.cc" ;; - "java/net/natInetAddress.cc" ) CONFIG_LINKS="$CONFIG_LINKS java/net/natInetAddress.cc:java/net/natInetAddress${PLATFORMNET}.cc" ;; + "java/net/natVMInetAddress.cc" ) CONFIG_LINKS="$CONFIG_LINKS java/net/natVMInetAddress.cc:java/net/natVMInetAddress${PLATFORMNET}.cc" ;; "java/net/natVMNetworkInterface.cc" ) CONFIG_LINKS="$CONFIG_LINKS java/net/natVMNetworkInterface.cc:java/net/natVMNetworkInterface${PLATFORMNET}.cc" ;; "gnu/java/net/natPlainSocketImpl.cc" ) CONFIG_LINKS="$CONFIG_LINKS gnu/java/net/natPlainSocketImpl.cc:gnu/java/net/natPlainSocketImpl${PLATFORMNET}.cc" ;; "gnu/java/net/natPlainDatagramSocketImpl.cc" ) CONFIG_LINKS="$CONFIG_LINKS gnu/java/net/natPlainDatagramSocketImpl.cc:gnu/java/net/natPlainDatagramSocketImpl${PLATFORMNET}.cc" ;; diff --git a/libjava/configure.ac b/libjava/configure.ac index ace631a..a51e923 100644 --- a/libjava/configure.ac +++ b/libjava/configure.ac @@ -663,9 +663,9 @@ test -d java/lang || mkdir java/lang AC_CONFIG_LINKS(java/lang/ConcreteProcess.java:java/lang/${PLATFORM}Process.java) AC_CONFIG_LINKS(java/lang/natConcreteProcess.cc:java/lang/nat${PLATFORM}Process.cc) -# Likewise for natInetAddress.cc and natVMNetworkInterface.cc. +# Likewise for natVMInetAddress.cc and natVMNetworkInterface.cc. test -d java/net || mkdir java/net -AC_CONFIG_LINKS(java/net/natInetAddress.cc:java/net/natInetAddress${PLATFORMNET}.cc) +AC_CONFIG_LINKS(java/net/natVMInetAddress.cc:java/net/natVMInetAddress${PLATFORMNET}.cc) AC_CONFIG_LINKS(java/net/natVMNetworkInterface.cc:java/net/natVMNetworkInterface${PLATFORMNET}.cc) # Likewise for natPlainSocketImpl.cc and natPlainDatagramSocketImpl.cc. diff --git a/libjava/gnu/java/net/natPlainDatagramSocketImplWin32.cc b/libjava/gnu/java/net/natPlainDatagramSocketImplWin32.cc index bda03fb..e410196 100644 --- a/libjava/gnu/java/net/natPlainDatagramSocketImplWin32.cc +++ b/libjava/gnu/java/net/natPlainDatagramSocketImplWin32.cc @@ -1,4 +1,4 @@ -/* Copyright (C) 2003 Free Software Foundation +/* Copyright (C) 2003, 2006 Free Software Foundation This file is part of libgcj. @@ -238,7 +238,7 @@ gnu::java::net::PlainDatagramSocketImpl::peekData(::java::net::DatagramPacket *p else throw new ::java::net::SocketException (JvNewStringUTF ("invalid family")); - p->setAddress (new ::java::net::InetAddress (raddr, NULL)); + p->setAddress (::java::net::InetAddress::getByAddress (raddr)); p->setPort (rport); p->length = (jint) retlen; return rport; @@ -360,7 +360,7 @@ gnu::java::net::PlainDatagramSocketImpl::receive (::java::net::DatagramPacket *p else throw new ::java::net::SocketException (JvNewStringUTF ("invalid family")); - p->setAddress (new ::java::net::InetAddress (raddr, NULL)); + p->setAddress (::java::net::InetAddress::getByAddress (raddr)); p->setPort (rport); p->length = (jint) retlen; return; @@ -656,7 +656,7 @@ gnu::java::net::PlainDatagramSocketImpl::getOption (jint optID) else throw new ::java::net::SocketException ( JvNewStringUTF ("invalid family")); - localAddress = new ::java::net::InetAddress (laddr, NULL); + localAddress = ::java::net::InetAddress::getByAddress (laddr); } return localAddress; break; diff --git a/libjava/gnu/java/net/natPlainSocketImplWin32.cc b/libjava/gnu/java/net/natPlainSocketImplWin32.cc index f54edb5..9377998 100644 --- a/libjava/gnu/java/net/natPlainSocketImplWin32.cc +++ b/libjava/gnu/java/net/natPlainSocketImplWin32.cc @@ -1,4 +1,4 @@ -/* Copyright (C) 2003, 2004, 2005 Free Software Foundation +/* Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation This file is part of libgcj. @@ -328,7 +328,7 @@ gnu::java::net::PlainSocketImpl::accept (gnu::java::net::PlainSocketImpl *s) s->native_fd = (jint) hSocket; s->localport = localport; - s->address = new ::java::net::InetAddress (raddr, NULL); + s->address = ::java::net::InetAddress::getByAddress (raddr); s->port = rport; return; @@ -735,7 +735,7 @@ gnu::java::net::PlainSocketImpl::getOption (jint optID) else throw new ::java::net::SocketException (JvNewStringUTF ("invalid family")); - localAddress = new ::java::net::InetAddress (laddr, NULL); + localAddress = ::java::net::InetAddress::getByAddress (laddr); } return localAddress; diff --git a/libjava/java/net/InetAddress.java b/libjava/java/net/InetAddress.java deleted file mode 100644 index 640750d..0000000 --- a/libjava/java/net/InetAddress.java +++ /dev/null @@ -1,819 +0,0 @@ -/* InetAddress.java -- Class to model an Internet address - Copyright (C) 1998, 1999, 2002, 2004, 2005, 2006 - Free Software Foundation, Inc. - -This file is part of GNU Classpath. - -GNU Classpath is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -GNU Classpath 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 for more details. - -You should have received a copy of the GNU General Public License -along with GNU Classpath; see the file COPYING. If not, write to the -Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -02110-1301 USA. - -Linking this library statically or dynamically with other modules is -making a combined work based on this library. Thus, the terms and -conditions of the GNU General Public License cover the whole -combination. - -As a special exception, the copyright holders of this library give you -permission to link this library with independent modules to produce an -executable, regardless of the license terms of these independent -modules, and to copy and distribute the resulting executable under -terms of your choice, provided that you also meet, for each linked -independent module, the terms and conditions of the license of that -module. An independent module is a module which is not derived from -or based on this library. If you modify this library, you may extend -this exception to your version of the library, but you are not -obligated to do so. If you do not wish to do so, delete this -exception statement from your version. */ - - -package java.net; - -import java.io.IOException; -import java.io.ObjectInputStream; -import java.io.ObjectOutputStream; -import java.io.ObjectStreamException; -import java.io.Serializable; - -/** - * This class models an Internet address. It does not have a public - * constructor. Instead, new instances of this objects are created - * using the static methods getLocalHost(), getByName(), and - * getAllByName(). - * - * <p>This class fulfills the function of the C style functions gethostname(), - * gethostbyname(), and gethostbyaddr(). It resolves Internet DNS names - * into their corresponding numeric addresses and vice versa.</p> - * - * @author Aaron M. Renn (arenn@urbanophile.com) - * @author Per Bothner - * @author Gary Benson (gbenson@redhat.com) - * - * @specnote This class is not final since JK 1.4 - */ -public class InetAddress implements Serializable -{ - private static final long serialVersionUID = 3286316764910316507L; - - /** - * Stores static localhost address object. - */ - static InetAddress LOCALHOST; - static - { - try - { - LOCALHOST = getByAddress("localhost", new byte[] {127, 0, 0, 1}); - // Some soon-to-be-removed native code synchronizes on this. - loopbackAddress = LOCALHOST; - } - catch (UnknownHostException e) - { - throw new RuntimeException("should never happen", e); - } - } - - /** - * Dummy InetAddress, used to bind socket to any (all) network interfaces. - */ - static InetAddress ANY_IF; - static - { - byte[] addr; - try - { - addr = VMInetAddress.lookupInaddrAny(); - } - catch (UnknownHostException e) - { - // Make one up and hope it works. - addr = new byte[] {0, 0, 0, 0}; - } - try - { - ANY_IF = getByAddress(addr); - } - catch (UnknownHostException e) - { - throw new RuntimeException("should never happen", e); - } - ANY_IF.hostName = ANY_IF.getHostName(); - } - - /** - * The Serialized Form specifies that an int 'address' is saved/restored. - * This class uses a byte array internally so we'll just do the conversion - * at serialization time and leave the rest of the algorithm as is. - */ - private int address; - - /** - * An array of octets representing an IP address. - */ - transient byte[] addr; - - /** - * The name of the host for this address. - */ - String hostName; - - /** - * Needed for serialization. - */ - private int family; - - /** - * Constructor. Prior to the introduction of IPv6 support in 1.4, - * methods such as InetAddress.getByName() would return InetAddress - * objects. From 1.4 such methods returned either Inet4Address or - * Inet6Address objects, but for compatibility Inet4Address objects - * are serialized as InetAddresses. As such, there are only two - * places where it is appropriate to invoke this constructor: within - * subclasses constructors and within Inet4Address.writeReplace(). - * - * @param ipaddr The IP number of this address as an array of bytes - * @param hostname The hostname of this IP address. - * @param family The address family of this IP address. - */ - InetAddress(byte[] ipaddr, String hostname, int family) - { - addr = (null == ipaddr) ? null : (byte[]) ipaddr.clone(); - hostName = hostname; - this.family = family; - } - - /** - * Returns true if this address is a multicast address, false otherwise. - * An address is multicast if the high four bits are "1110". These are - * also known as "Class D" addresses. - * - * <p>This method cannot be abstract for backward compatibility reasons. By - * default it always throws {@link UnsupportedOperationException} unless - * overridden.</p> - * - * @return true if mulitcast, false if not - * - * @since 1.1 - */ - public boolean isMulticastAddress() - { - // This method is masked on Posix systems, where all InetAddress - // objects are created using InetAddress.getByAddress() which - // returns either Inet4Address or Inet6Address objects. Certain - // native methods on Win32 use "new InetAddress" in which case - // this method will be visible. - try - { - return getByAddress(hostName, addr).isMulticastAddress(); - } - catch (UnknownHostException e) - { - throw new RuntimeException("should never happen", e); - } - } - - /** - * Utility routine to check if the InetAddress in a wildcard address - * - * <p>This method cannot be abstract for backward compatibility reasons. By - * default it always throws {@link UnsupportedOperationException} unless - * overridden.</p> - * - * @since 1.4 - */ - public boolean isAnyLocalAddress() - { - // This is inefficient, but certain methods on Win32 create - // InetAddress objects using "new InetAddress" rather than - // "InetAddress.getByAddress" so we provide a method body. - // This code is never executed on Posix systems. - try - { - return getByAddress(hostName, addr).isAnyLocalAddress(); - } - catch (UnknownHostException e) - { - throw new RuntimeException("should never happen", e); - } - } - - /** - * Utility routine to check if the InetAddress is a loopback address - * - * <p>This method cannot be abstract for backward compatibility reasons. By - * default it always throws {@link UnsupportedOperationException} unless - * overridden.</p> - * - * @since 1.4 - */ - public boolean isLoopbackAddress() - { - // This method is masked on Posix systems, where all InetAddress - // objects are created using InetAddress.getByAddress() which - // returns either Inet4Address or Inet6Address objects. Certain - // native methods on Win32 use "new InetAddress" in which case - // this method will be visible. - try - { - return getByAddress(hostName, addr).isLoopbackAddress(); - } - catch (UnknownHostException e) - { - throw new RuntimeException("should never happen", e); - } - } - - /** - * Utility routine to check if InetAddress is a link local address - * - * <p>This method cannot be abstract for backward compatibility reasons. By - * default it always throws {@link UnsupportedOperationException} unless - * overridden.</p> - * - * @since 1.4 - */ - public boolean isLinkLocalAddress() - { - // This method is masked on Posix systems, where all InetAddress - // objects are created using InetAddress.getByAddress() which - // returns either Inet4Address or Inet6Address objects. Certain - // native methods on Win32 use "new InetAddress" in which case - // this method will be visible. - try - { - return getByAddress(hostName, addr).isLinkLocalAddress(); - } - catch (UnknownHostException e) - { - throw new RuntimeException("should never happen", e); - } - } - - /** - * Utility routine to check if InetAddress is a site local address - * - * <p>This method cannot be abstract for backward compatibility reasons. By - * default it always throws {@link UnsupportedOperationException} unless - * overridden.</p> - * - * @since 1.4 - */ - public boolean isSiteLocalAddress() - { - // This method is masked on Posix systems, where all InetAddress - // objects are created using InetAddress.getByAddress() which - // returns either Inet4Address or Inet6Address objects. Certain - // native methods on Win32 use "new InetAddress" in which case - // this method will be visible. - try - { - return getByAddress(hostName, addr).isSiteLocalAddress(); - } - catch (UnknownHostException e) - { - throw new RuntimeException("should never happen", e); - } - } - - /** - * Utility routine to check if InetAddress is a global multicast address - * - * <p>This method cannot be abstract for backward compatibility reasons. By - * default it always throws {@link UnsupportedOperationException} unless - * overridden.</p> - * - * @since 1.4 - */ - public boolean isMCGlobal() - { - // This method is masked on Posix systems, where all InetAddress - // objects are created using InetAddress.getByAddress() which - // returns either Inet4Address or Inet6Address objects. Certain - // native methods on Win32 use "new InetAddress" in which case - // this method will be visible. - try - { - return getByAddress(hostName, addr).isMCGlobal(); - } - catch (UnknownHostException e) - { - throw new RuntimeException("should never happen", e); - } - } - - /** - * Utility routine to check if InetAddress is a node local multicast address. - * - * <p>This method cannot be abstract for backward compatibility reasons. By - * default it always throws {@link UnsupportedOperationException} unless - * overridden.</p> - * - * @since 1.4 - */ - public boolean isMCNodeLocal() - { - // This method is masked on Posix systems, where all InetAddress - // objects are created using InetAddress.getByAddress() which - // returns either Inet4Address or Inet6Address objects. Certain - // native methods on Win32 use "new InetAddress" in which case - // this method will be visible. - try - { - return getByAddress(hostName, addr).isMCNodeLocal(); - } - catch (UnknownHostException e) - { - throw new RuntimeException("should never happen", e); - } - } - - /** - * Utility routine to check if InetAddress is a link local multicast address. - * - * <p>This method cannot be abstract for backward compatibility reasons. By - * default it always throws {@link UnsupportedOperationException} unless - * overridden.</p> - * - * @since 1.4 - */ - public boolean isMCLinkLocal() - { - // This method is masked on Posix systems, where all InetAddress - // objects are created using InetAddress.getByAddress() which - // returns either Inet4Address or Inet6Address objects. Certain - // native methods on Win32 use "new InetAddress" in which case - // this method will be visible. - try - { - return getByAddress(hostName, addr).isMCLinkLocal(); - } - catch (UnknownHostException e) - { - throw new RuntimeException("should never happen", e); - } - } - - /** - * Utility routine to check if InetAddress is a site local multicast address. - * - * <p>This method cannot be abstract for backward compatibility reasons. By - * default it always throws {@link UnsupportedOperationException} unless - * overridden.</p> - * - * @since 1.4 - */ - public boolean isMCSiteLocal() - { - // This method is masked on Posix systems, where all InetAddress - // objects are created using InetAddress.getByAddress() which - // returns either Inet4Address or Inet6Address objects. Certain - // native methods on Win32 use "new InetAddress" in which case - // this method will be visible. - try - { - return getByAddress(hostName, addr).isMCSiteLocal(); - } - catch (UnknownHostException e) - { - throw new RuntimeException("should never happen", e); - } - } - - /** - * Utility routine to check if InetAddress is a organization local - * multicast address. - * - * <p>This method cannot be abstract for backward compatibility reasons. By - * default it always throws {@link UnsupportedOperationException} unless - * overridden.</p> - * - * @since 1.4 - */ - public boolean isMCOrgLocal() - { - // This method is masked on Posix systems, where all InetAddress - // objects are created using InetAddress.getByAddress() which - // returns either Inet4Address or Inet6Address objects. Certain - // native methods on Win32 use "new InetAddress" in which case - // this method will be visible. - try - { - return getByAddress(hostName, addr).isMCOrgLocal(); - } - catch (UnknownHostException e) - { - throw new RuntimeException("should never happen", e); - } - } - - /** - * Returns the hostname for this address. This will return the IP address - * as a String if there is no hostname available for this address - * - * @return The hostname for this address - */ - public String getHostName() - { - if (hostName == null) - hostName = getCanonicalHostName(); - - return hostName; - } - - /** - * Returns the canonical hostname represented by this InetAddress - */ - String internalGetCanonicalHostName() - { - try - { - return ResolverCache.getHostByAddr(addr); - } - catch (UnknownHostException e) - { - return getHostAddress(); - } - } - - /** - * Returns the canonical hostname represented by this InetAddress - * - * @since 1.4 - */ - public String getCanonicalHostName() - { - String hostname = internalGetCanonicalHostName(); - - SecurityManager sm = System.getSecurityManager(); - if (sm != null) - { - try - { - sm.checkConnect(hostname, -1); - } - catch (SecurityException e) - { - return getHostAddress(); - } - } - - return hostname; - } - - /** - * Returns the IP address of this object as a byte array. - * - * @return IP address - */ - public byte[] getAddress() - { - // An experiment shows that JDK1.2 returns a different byte array each - // time. This makes sense, in terms of security. - return (byte[]) addr.clone(); - } - - /** - * Returns the IP address of this object as a String. - * - * <p>This method cannot be abstract for backward compatibility reasons. By - * default it always throws {@link UnsupportedOperationException} unless - * overridden.</p> - * - * @return The IP address of this object in String form - * - * @since 1.0.2 - */ - public String getHostAddress() - { - // This method is masked on Posix systems, where all InetAddress - // objects are created using InetAddress.getByAddress() which - // returns either Inet4Address or Inet6Address objects. Certain - // native methods on Win32 use "new InetAddress" in which case - // this method will be visible. - try - { - return getByAddress(hostName, addr).getHostAddress(); - } - catch (UnknownHostException e) - { - throw new RuntimeException("should never happen", e); - } - } - - /** - * Returns a hash value for this address. Useful for creating hash - * tables. Overrides Object.hashCode() - * - * @return A hash value for this address. - */ - public int hashCode() - { - // There hashing algorithm is not specified, but a simple experiment - // shows that it is equal to the address, as a 32-bit big-endian integer. - int hash = 0; - int len = addr.length; - int i = len > 4 ? len - 4 : 0; - - for (; i < len; i++) - hash = (hash << 8) | (addr[i] & 0xff); - - return hash; - } - - /** - * Tests this address for equality against another InetAddress. The two - * addresses are considered equal if they contain the exact same octets. - * This implementation overrides Object.equals() - * - * @param obj The address to test for equality - * - * @return true if the passed in object's address is equal to this one's, - * false otherwise - */ - public boolean equals(Object obj) - { - if (! (obj instanceof InetAddress)) - return false; - - // "The Java Class Libraries" 2nd edition says "If a machine has - // multiple names instances of InetAddress for different name of - // that same machine are not equal. This is because they have - // different host names." This violates the description in the - // JDK 1.2 API documentation. A little experimentation - // shows that the latter is correct. - byte[] addr2 = ((InetAddress) obj).addr; - - if (addr.length != addr2.length) - return false; - - for (int i = 0; i < addr.length; i++) - if (addr[i] != addr2[i]) - return false; - - return true; - } - - /** - * Converts this address to a String. This string contains the IP in - * dotted decimal form. For example: "127.0.0.1" This method is equivalent - * to getHostAddress() and overrides Object.toString() - * - * @return This address in String form - */ - public String toString() - { - String addr = getHostAddress(); - String host = (hostName != null) ? hostName : ""; - return host + "/" + addr; - } - - /** - * Returns an InetAddress object given the raw IP address. - * - * The argument is in network byte order: the highest order byte of the - * address is in getAddress()[0]. - * - * @param addr The IP address to create the InetAddress object from - * - * @exception UnknownHostException If IP address has illegal length - * - * @since 1.4 - */ - public static InetAddress getByAddress(byte[] addr) - throws UnknownHostException - { - return getByAddress(null, addr); - } - - /** - * Creates an InetAddress based on the provided host name and IP address. - * No name service is checked for the validity of the address. - * - * @param host The hostname of the InetAddress object to create - * @param addr The IP address to create the InetAddress object from - * - * @exception UnknownHostException If IP address is of illegal length - * - * @since 1.4 - */ - public static InetAddress getByAddress(String host, byte[] addr) - throws UnknownHostException - { - if (addr.length == 4) - return new Inet4Address(addr, host); - - if (addr.length == 16) - { - for (int i = 0; i < 12; i++) - { - if (addr[i] != (i < 10 ? 0 : (byte) 0xFF)) - return new Inet6Address(addr, host); - } - - byte[] ip4addr = new byte[4]; - ip4addr[0] = addr[12]; - ip4addr[1] = addr[13]; - ip4addr[2] = addr[14]; - ip4addr[3] = addr[15]; - return new Inet4Address(ip4addr, host); - } - - throw new UnknownHostException("IP address has illegal length"); - } - - /** - * Returns an InetAddress object representing the IP address of - * the given literal IP address in dotted decimal format such as - * "127.0.0.1". This is used by SocketPermission.setHostPort() - * to parse literal IP addresses without performing a DNS lookup. - * - * @param literal The literal IP address to create the InetAddress - * object from - * - * @return The address of the host as an InetAddress object, or - * null if the IP address is invalid. - */ - static InetAddress getByLiteral(String literal) - { - byte[] address = VMInetAddress.aton(literal); - if (address == null) - return null; - - try - { - return getByAddress(address); - } - catch (UnknownHostException e) - { - throw new RuntimeException("should never happen", e); - } - } - - /** - * Returns an InetAddress object representing the IP address of the given - * hostname. This name can be either a hostname such as "www.urbanophile.com" - * or an IP address in dotted decimal format such as "127.0.0.1". If the - * hostname is null or "", the hostname of the local machine is supplied by - * default. This method is equivalent to returning the first element in - * the InetAddress array returned from GetAllByName. - * - * @param hostname The name of the desired host, or null for the local - * loopback address. - * - * @return The address of the host as an InetAddress object. - * - * @exception UnknownHostException If no IP address for the host could - * be found - * @exception SecurityException If a security manager exists and its - * checkConnect method doesn't allow the operation - */ - public static InetAddress getByName(String hostname) - throws UnknownHostException - { - InetAddress[] addresses = getAllByName(hostname); - return addresses[0]; - } - - /** - * Returns an array of InetAddress objects representing all the host/ip - * addresses of a given host, given the host's name. This name can be - * either a hostname such as "www.urbanophile.com" or an IP address in - * dotted decimal format such as "127.0.0.1". If the value is null, the - * hostname of the local machine is supplied by default. - * - * @param hostname The name of the desired host, or null for the - * local loopback address. - * - * @return All addresses of the host as an array of InetAddress objects. - * - * @exception UnknownHostException If no IP address for the host could - * be found - * @exception SecurityException If a security manager exists and its - * checkConnect method doesn't allow the operation - */ - public static InetAddress[] getAllByName(String hostname) - throws UnknownHostException - { - // If null or the empty string is supplied, the loopback address - // is returned. - if (hostname == null || hostname.length() == 0) - return new InetAddress[] {LOCALHOST}; - - // Check if hostname is an IP address - InetAddress address = getByLiteral(hostname); - if (address != null) - return new InetAddress[] {address}; - - // Perform security check before resolving - SecurityManager sm = System.getSecurityManager(); - if (sm != null) - sm.checkConnect(hostname, -1); - - // Resolve the hostname - byte[][] iplist = ResolverCache.getHostByName(hostname); - if (iplist.length == 0) - throw new UnknownHostException(hostname); - - InetAddress[] addresses = new InetAddress[iplist.length]; - for (int i = 0; i < iplist.length; i++) - addresses[i] = getByAddress(hostname, iplist[i]); - - return addresses; - } - - /** - * Returns an InetAddress object representing the address of the current - * host. - * - * @return The local host's address - * - * @exception UnknownHostException If no IP address for the host could - * be found - */ - public static InetAddress getLocalHost() throws UnknownHostException - { - String hostname = VMInetAddress.getLocalHostname(); - try - { - return getByName(hostname); - } - catch (SecurityException e) - { - return LOCALHOST; - } - } - - /** - * Inet4Address objects are serialized as InetAddress objects. - * This deserializes them back into Inet4Address objects. - */ - private Object readResolve() throws ObjectStreamException - { - return new Inet4Address(addr, hostName); - } - - private void readObject(ObjectInputStream ois) - throws IOException, ClassNotFoundException - { - ois.defaultReadObject(); - addr = new byte[4]; - addr[3] = (byte) address; - - for (int i = 2; i >= 0; --i) - addr[i] = (byte) (address >>= 8); - } - - private void writeObject(ObjectOutputStream oos) throws IOException - { - // Build a 32 bit address from the last 4 bytes of a 4 byte IPv4 address - // or a 16 byte IPv6 address. - int len = addr.length; - int i = len - 4; - - for (; i < len; i++) - address = address << 8 | (addr[i] & 0xff); - - oos.defaultWriteObject(); - } - - // The native methods remain here for now; - // methods in VMInetAddress map onto them. - static native byte[] aton(String hostname); - static native InetAddress[] lookup (String hostname, - InetAddress ipaddr, boolean all); - static native int getFamily (byte[] ipaddr); - static native String getLocalHostname(); - - // Some soon-to-be-removed native code synchronizes on this. - static InetAddress loopbackAddress; - - // Some soon-to-be-removed code uses this old and broken method. - InetAddress(byte[] ipaddr, String hostname) - { - addr = (null == ipaddr) ? null : (byte[]) ipaddr.clone(); - hostName = hostname; - - if (ipaddr != null) - family = getFamily(ipaddr); - } - - // Some soon-to-be-removed native code uses these old methods. - private static InetAddress[] allocArray (int count) - { - return new InetAddress [count]; - } - private static SecurityException checkConnect (String hostname) - { - return null; - } -} diff --git a/libjava/java/net/VMInetAddress.java b/libjava/java/net/VMInetAddress.java index b10cf25..a99c216 100644 --- a/libjava/java/net/VMInetAddress.java +++ b/libjava/java/net/VMInetAddress.java @@ -58,18 +58,12 @@ class VMInetAddress implements Serializable * * @return The local hostname. */ - public static String getLocalHostname() - { - return InetAddress.getLocalHostname(); - } + public static native String getLocalHostname(); /** * Returns the value of the special address INADDR_ANY */ - public static byte[] lookupInaddrAny() throws UnknownHostException - { - return new byte[] {0, 0, 0, 0}; - } + public static native byte[] lookupInaddrAny() throws UnknownHostException; /** * This method returns the hostname for a given IP address. It will @@ -81,26 +75,15 @@ class VMInetAddress implements Serializable * * @exception UnknownHostException If the reverse lookup fails */ - public static String getHostByAddr(byte[] ip) throws UnknownHostException - { - InetAddress addr = InetAddress.getByAddress(ip); - InetAddress.lookup(null, addr, false); - return addr.getHostName(); - } + public static native String getHostByAddr(byte[] ip) + throws UnknownHostException; /** * Returns a list of all IP addresses for a given hostname. Will throw * an UnknownHostException if the hostname cannot be resolved. */ - public static byte[][] getHostByName(String hostname) - throws UnknownHostException - { - InetAddress[] iaddrs = InetAddress.lookup(hostname, null, true); - byte[][] addrs = new byte[iaddrs.length][]; - for (int i = 0; i < iaddrs.length; i++) - addrs[i] = iaddrs[i].getAddress(); - return addrs; - } + public static native byte[][] getHostByName(String hostname) + throws UnknownHostException; /** * Return the IP address represented by a literal address. @@ -110,8 +93,5 @@ class VMInetAddress implements Serializable * * @return The IP address as a byte array */ - public static byte[] aton(String address) - { - return InetAddress.aton(address); - } + public static native byte[] aton(String address); } diff --git a/libjava/java/net/natInetAddressNoNet.cc b/libjava/java/net/natInetAddressNoNet.cc deleted file mode 100644 index 0374af1..0000000 --- a/libjava/java/net/natInetAddressNoNet.cc +++ /dev/null @@ -1,36 +0,0 @@ -/* Copyright (C) 2003 Free Software Foundation - - This file is part of libgcj. - -This software is copyrighted work licensed under the terms of the -Libgcj License. Please consult the file "LIBGCJ_LICENSE" for -details. */ - -#include <config.h> -#include <stddef.h> - -#include <java/net/InetAddress.h> - -jbyteArray -java::net::InetAddress::aton (jstring) -{ - return NULL; -} - -jint -java::net::InetAddress::getFamily (jbyteArray bytes) -{ - return 0; -} - -JArray<java::net::InetAddress*> * -java::net::InetAddress::lookup (jstring, java::net::InetAddress *, jboolean) -{ - return NULL; -} - -jstring -java::net::InetAddress::getLocalHostname () -{ - return NULL; -} diff --git a/libjava/java/net/natInetAddressPosix.cc b/libjava/java/net/natInetAddressPosix.cc deleted file mode 100644 index d343f23..0000000 --- a/libjava/java/net/natInetAddressPosix.cc +++ /dev/null @@ -1,304 +0,0 @@ -/* Copyright (C) 2003 Free Software Foundation - - This file is part of libgcj. - -This software is copyrighted work licensed under the terms of the -Libgcj License. Please consult the file "LIBGCJ_LICENSE" for -details. */ - -#include <config.h> - -#ifdef HAVE_UNISTD_H -#include <unistd.h> -#endif -#include <string.h> -#include <errno.h> - -#include <sys/param.h> -#include <sys/types.h> -#ifdef HAVE_SYS_SOCKET_H -#include <sys/socket.h> -#endif -#ifdef HAVE_NETINET_IN_H -#include <netinet/in.h> -#endif -#ifdef HAVE_ARPA_INET_H -#include <arpa/inet.h> -#endif -#ifdef HAVE_NETDB_H -#include <netdb.h> -#endif - -#include <gcj/cni.h> -#include <jvm.h> -#include <java/net/InetAddress.h> -#include <java/net/UnknownHostException.h> -#include <java/lang/SecurityException.h> - -#if defined(HAVE_UNAME) && ! defined(HAVE_GETHOSTNAME) -#include <sys/utsname.h> -#endif - -#ifndef HAVE_GETHOSTNAME_DECL -extern "C" int gethostname (char *name, int namelen); -#endif - -jbyteArray -java::net::InetAddress::aton (jstring host) -{ - char *hostname; - char buf[100]; - int len = JvGetStringUTFLength(host); - if (len < 100) - hostname = buf; - else - hostname = (char*) _Jv_AllocBytes (len+1); - JvGetStringUTFRegion (host, 0, host->length(), hostname); - buf[len] = '\0'; - char* bytes = NULL; - int blen = 0; -#ifdef HAVE_INET_ATON - struct in_addr laddr; - if (inet_aton (hostname, &laddr)) - { - bytes = (char*) &laddr; - blen = 4; - } -#elif defined(HAVE_INET_ADDR) -#if ! HAVE_IN_ADDR_T - typedef jint in_addr_t; -#endif - in_addr_t laddr = inet_addr (hostname); - if (laddr != (in_addr_t)(-1)) - { - bytes = (char*) &laddr; - blen = 4; - } -#endif -#if defined (HAVE_INET_PTON) && defined (HAVE_INET6) - char inet6_addr[16]; - if (len != 0 && inet_pton (AF_INET6, hostname, inet6_addr) > 0) - { - bytes = inet6_addr; - blen = 16; - } -#endif - if (blen == 0) - return NULL; - jbyteArray result = JvNewByteArray (blen); - memcpy (elements (result), bytes, blen); - return result; -} - -jint -java::net::InetAddress::getFamily (jbyteArray bytes) -{ - int len = bytes->length; - if (len == 4) - return AF_INET; -#ifdef HAVE_INET6 - else if (len == 16) - return AF_INET6; -#endif /* HAVE_INET6 */ - else - JvFail ("unrecognized size"); -} - - -JArray<java::net::InetAddress*> * -java::net::InetAddress::lookup (jstring host, java::net::InetAddress* iaddr, - jboolean all) -{ - struct hostent *hptr = NULL; -#if defined (HAVE_GETHOSTBYNAME_R) || defined (HAVE_GETHOSTBYADDR_R) - struct hostent hent_r; -#if HAVE_STRUCT_HOSTENT_DATA - struct hostent_data fixed_buffer, *buffer_r = &fixed_buffer; -#else -#if defined (__GLIBC__) - // FIXME: in glibc, gethostbyname_r returns NETDB_INTERNAL to herr and - // ERANGE to errno if the buffer size is too small, rather than what is - // expected here. We work around this by setting a bigger buffer size and - // hoping that it is big enough. - char fixed_buffer[1024]; -#else - char fixed_buffer[200]; -#endif - char *buffer_r = fixed_buffer; - int size_r = sizeof (fixed_buffer); -#endif -#endif - - if (host != NULL) - { - char *hostname; - char buf[100]; - int len = JvGetStringUTFLength(host); - if (len < 100) - hostname = buf; - else - hostname = (char*) _Jv_AllocBytes (len+1); - JvGetStringUTFRegion (host, 0, host->length(), hostname); - buf[len] = '\0'; -#ifdef HAVE_GETHOSTBYNAME_R - while (true) - { - int ok; -#if HAVE_STRUCT_HOSTENT_DATA - ok = ! gethostbyname_r (hostname, &hent_r, buffer_r); -#else - int herr = 0; -#ifdef GETHOSTBYNAME_R_RETURNS_INT - ok = ! gethostbyname_r (hostname, &hent_r, buffer_r, size_r, - &hptr, &herr); -#else - hptr = gethostbyname_r (hostname, &hent_r, buffer_r, size_r, &herr); - ok = hptr != NULL; -#endif /* GETHOSTNAME_R_RETURNS_INT */ - if (! ok && herr == ERANGE) - { - size_r *= 2; - buffer_r = (char *) _Jv_AllocBytes (size_r); - } - else -#endif /* HAVE_STRUCT_HOSTENT_DATA */ - break; - } -#else - // FIXME: this is insufficient if some other piece of code calls - // this gethostbyname. - JvSynchronize sync (java::net::InetAddress::loopbackAddress); - hptr = gethostbyname (hostname); -#endif /* HAVE_GETHOSTBYNAME_R */ - } - else - { - jbyteArray bytes = iaddr->addr; - char *chars = (char*) elements (bytes); - int len = bytes->length; - int type; - char *val; - if (len == 4) - { - val = chars; - type = iaddr->family = AF_INET; - } -#ifdef HAVE_INET6 - else if (len == 16) - { - val = (char *) &chars; - type = iaddr->family = AF_INET6; - } -#endif /* HAVE_INET6 */ - else - JvFail ("unrecognized size"); - -#ifdef HAVE_GETHOSTBYADDR_R - while (true) - { - int ok; -#if HAVE_STRUCT_HOSTENT_DATA - ok = ! gethostbyaddr_r (val, len, type, &hent_r, buffer_r); -#else - int herr = 0; -#ifdef GETHOSTBYADDR_R_RETURNS_INT - ok = ! gethostbyaddr_r (val, len, type, &hent_r, - buffer_r, size_r, &hptr, &herr); -#else - hptr = gethostbyaddr_r (val, len, type, &hent_r, - buffer_r, size_r, &herr); - ok = hptr != NULL; -#endif /* GETHOSTBYADDR_R_RETURNS_INT */ - if (! ok && herr == ERANGE) - { - size_r *= 2; - buffer_r = (char *) _Jv_AllocBytes (size_r); - } - else -#endif /* HAVE_STRUCT_HOSTENT_DATA */ - break; - } -#else /* HAVE_GETHOSTBYADDR_R */ - // FIXME: this is insufficient if some other piece of code calls - // this gethostbyaddr. - JvSynchronize sync (java::net::InetAddress::loopbackAddress); - hptr = gethostbyaddr (val, len, type); -#endif /* HAVE_GETHOSTBYADDR_R */ - } - if (hptr != NULL) - { - if (!all) - host = JvNewStringUTF (hptr->h_name); - } - if (hptr == NULL) - { - if (iaddr != NULL && iaddr->addr != NULL) - { - iaddr->hostName = iaddr->getHostAddress(); - return NULL; - } - else - throw new java::net::UnknownHostException(host); - } - int count; - if (all) - { - char** ptr = hptr->h_addr_list; - count = 0; - while (*ptr++) count++; - } - else - count = 1; - JArray<java::net::InetAddress*> *result; - java::net::InetAddress** iaddrs; - if (all) - { - result = java::net::InetAddress::allocArray (count); - iaddrs = elements (result); - } - else - { - result = NULL; - iaddrs = &iaddr; - } - - for (int i = 0; i < count; i++) - { - if (iaddrs[i] == NULL) - iaddrs[i] = new java::net::InetAddress (NULL, NULL); - if (iaddrs[i]->hostName == NULL) - iaddrs[i]->hostName = host; - if (iaddrs[i]->addr == NULL) - { - char *bytes = hptr->h_addr_list[i]; - iaddrs[i]->addr = JvNewByteArray (hptr->h_length); - iaddrs[i]->family = getFamily (iaddrs[i]->addr); - memcpy (elements (iaddrs[i]->addr), bytes, hptr->h_length); - } - } - return result; -} - -jstring -java::net::InetAddress::getLocalHostname () -{ - char *chars; -#ifdef HAVE_GETHOSTNAME - char buffer[MAXHOSTNAMELEN]; - if (gethostname (buffer, MAXHOSTNAMELEN)) - return NULL; - chars = buffer; -#elif HAVE_UNAME - struct utsname stuff; - if (uname (&stuff) != 0) - return NULL; - chars = stuff.nodename; -#else - return NULL; -#endif - // It is admittedly non-optimal to convert the hostname to Unicode - // only to convert it back in getByName, but simplicity wins. Note - // that unless there is a SecurityManager, we only get called once - // anyway, thanks to the InetAddress.localhost cache. - return JvNewStringUTF (chars); -} diff --git a/libjava/java/net/natInetAddressWin32.cc b/libjava/java/net/natInetAddressWin32.cc deleted file mode 100644 index 82c1e6f..0000000 --- a/libjava/java/net/natInetAddressWin32.cc +++ /dev/null @@ -1,168 +0,0 @@ -/* Copyright (C) 2003 Free Software Foundation - - This file is part of libgcj. - -This software is copyrighted work licensed under the terms of the -Libgcj License. Please consult the file "LIBGCJ_LICENSE" for -details. */ - -#include <config.h> -#include <platform.h> - -#undef STRICT - -#include <java/net/InetAddress.h> -#include <java/net/UnknownHostException.h> -#include <java/lang/SecurityException.h> - -jbyteArray -java::net::InetAddress::aton (jstring host) -{ - JV_TEMP_UTF_STRING (hostname, host); - char* bytes = NULL; - int blen = 0; - unsigned long laddr = inet_addr (hostname); - if (laddr != INADDR_NONE) - { - bytes = (char*) &laddr; - blen = 4; - } - if (blen == 0) - return NULL; - jbyteArray result = JvNewByteArray (blen); - memcpy (elements (result), bytes, blen); - return result; -} - -jint -java::net::InetAddress::getFamily (jbyteArray bytes) -{ - int len = bytes->length; - if (len == 4) - return AF_INET; -#ifdef HAVE_INET6 - else if (len == 16) - return AF_INET6; -#endif /* HAVE_INET6 */ - else - JvFail ("unrecognized size"); -} - - -JArray<java::net::InetAddress*> * -java::net::InetAddress::lookup (jstring host, java::net::InetAddress* iaddr, - jboolean all) -{ - struct hostent *hptr = NULL; - if (host != NULL) - { - JV_TEMP_UTF_STRING (hostname, host); - - // FIXME: this is insufficient if some other piece of code calls - // this gethostbyname. - JvSynchronize sync (java::net::InetAddress::loopbackAddress); - hptr = gethostbyname (hostname); - } - else - { - jbyteArray bytes = iaddr->addr; - char *chars = (char*) elements (bytes); - int len = bytes->length; - int type; - char *val; - if (len == 4) - { - val = chars; - type = iaddr->family = AF_INET; - } -#ifdef HAVE_INET6 - else if (len == 16) - { - val = (char *) &chars; - type = iaddr->family = AF_INET6; - } -#endif /* HAVE_INET6 */ - else - JvFail ("unrecognized size"); - - // FIXME: this is insufficient if some other piece of code calls - // this gethostbyaddr. - JvSynchronize sync (java::net::InetAddress::loopbackAddress); - hptr = gethostbyaddr (val, len, type); - } - if (hptr != NULL) - { - if (!all) - host = JvNewStringUTF (hptr->h_name); - java::lang::SecurityException *ex = checkConnect (host); - if (ex != NULL) - { - if (iaddr == NULL || iaddr->addr == NULL) - throw ex; - hptr = NULL; - } - } - if (hptr == NULL) - { - if (iaddr != NULL && iaddr->addr != NULL) - { - iaddr->hostName = iaddr->getHostAddress(); - return NULL; - } - else - throw new java::net::UnknownHostException(host); - } - - int count; - if (all) - { - char** ptr = hptr->h_addr_list; - count = 0; - while (*ptr++) count++; - } - else - count = 1; - - JArray<java::net::InetAddress*> *result; - java::net::InetAddress** iaddrs; - if (all) - { - result = java::net::InetAddress::allocArray (count); - iaddrs = elements (result); - } - else - { - result = NULL; - iaddrs = &iaddr; - } - - for (int i = 0; i < count; i++) - { - if (iaddrs[i] == NULL) - iaddrs[i] = new java::net::InetAddress (NULL, NULL); - if (iaddrs[i]->hostName == NULL) - iaddrs[i]->hostName = host; - if (iaddrs[i]->addr == NULL) - { - char *bytes = hptr->h_addr_list[i]; - iaddrs[i]->addr = JvNewByteArray (hptr->h_length); - iaddrs[i]->family = getFamily (iaddrs[i]->addr); - memcpy (elements (iaddrs[i]->addr), bytes, hptr->h_length); - } - } - - return result; -} - -jstring -java::net::InetAddress::getLocalHostname () -{ - char buffer[400]; - if (gethostname (buffer, sizeof(buffer))) - return NULL; - // It is admittedly non-optimal to convert the hostname to Unicode - // only to convert it back in getByName, but simplicity wins. Note - // that unless there is a SecurityManager, we only get called once - // anyway, thanks to the InetAddress.localhost cache. - return JvNewStringUTF (buffer); -} diff --git a/libjava/java/net/natVMInetAddressNoNet.cc b/libjava/java/net/natVMInetAddressNoNet.cc new file mode 100644 index 0000000..fd8303b --- /dev/null +++ b/libjava/java/net/natVMInetAddressNoNet.cc @@ -0,0 +1,40 @@ +/* Copyright (C) 2003, 2006 Free Software Foundation + + This file is part of libgcj. + +This software is copyrighted work licensed under the terms of the +Libgcj License. Please consult the file "LIBGCJ_LICENSE" for +details. */ + +#include <config.h> +#include <stddef.h> + +jstring +java::net::VMInetAddress::getLocalHostname () +{ + return NULL; +} + +jbyteArray +java::net::VMInetAddress::lookupInaddrAny () +{ + return NULL; +} + +jstring +java::net::VMInetAddress::getHostByAddr (jbyteArray addr) +{ + return NULL; +} + +JArray<jbyteArray> * +java::net::VMInetAddress::getHostByName (jstring host) +{ + return NULL; +} + +jbyteArray +java::net::VMInetAddress::aton (jstring host) +{ + return NULL; +} diff --git a/libjava/java/net/natVMInetAddressPosix.cc b/libjava/java/net/natVMInetAddressPosix.cc new file mode 100644 index 0000000..7fbe1bb --- /dev/null +++ b/libjava/java/net/natVMInetAddressPosix.cc @@ -0,0 +1,289 @@ +/* Copyright (C) 2003, 2006 Free Software Foundation + + This file is part of libgcj. + +This software is copyrighted work licensed under the terms of the +Libgcj License. Please consult the file "LIBGCJ_LICENSE" for +details. */ + +#include <config.h> + +#ifdef HAVE_UNISTD_H +#include <unistd.h> +#endif +#include <string.h> +#include <errno.h> + +#include <sys/param.h> +#include <sys/types.h> +#ifdef HAVE_SYS_SOCKET_H +#include <sys/socket.h> +#endif +#ifdef HAVE_NETINET_IN_H +#include <netinet/in.h> +#endif +#ifdef HAVE_ARPA_INET_H +#include <arpa/inet.h> +#endif +#ifdef HAVE_NETDB_H +#include <netdb.h> +#endif + +#include <gcj/cni.h> +#include <jvm.h> +#include <java/net/VMInetAddress.h> +#include <java/net/UnknownHostException.h> + +#if defined(HAVE_UNAME) && ! defined(HAVE_GETHOSTNAME) +#include <sys/utsname.h> +#endif + +#ifndef HAVE_GETHOSTNAME_DECL +extern "C" int gethostname (char *name, int namelen); +#endif + +jstring +java::net::VMInetAddress::getLocalHostname () +{ + char *chars; +#ifdef HAVE_GETHOSTNAME + char buffer[MAXHOSTNAMELEN]; + if (gethostname (buffer, MAXHOSTNAMELEN)) + return NULL; + chars = buffer; +#elif HAVE_UNAME + struct utsname stuff; + if (uname (&stuff) != 0) + return NULL; + chars = stuff.nodename; +#else + return NULL; +#endif + // It is admittedly non-optimal to convert the hostname to Unicode + // only to convert it back in getByName, but simplicity wins. + return JvNewStringUTF (chars); +} + +jbyteArray +java::net::VMInetAddress::lookupInaddrAny () +{ +#if ! HAVE_IN_ADDR_T + typedef jint in_addr_t; +#endif + in_addr_t laddr = INADDR_ANY; + char *bytes = (char *) &laddr; + int blen = sizeof (laddr); + jbyteArray result = JvNewByteArray (blen); + memcpy (elements (result), bytes, blen); + return result; +} + +jstring +java::net::VMInetAddress::getHostByAddr (jbyteArray addr) +{ + struct hostent *hptr = NULL; +#ifdef HAVE_GETHOSTBYADDR_R + struct hostent hent_r; +#if HAVE_STRUCT_HOSTENT_DATA + struct hostent_data fixed_buffer, *buffer_r = &fixed_buffer; +#else +#ifdef __GLIBC__ + // FIXME: in glibc, gethostbyname_r returns NETDB_INTERNAL to herr and + // ERANGE to errno if the buffer size is too small, rather than what is + // expected here. We work around this by setting a bigger buffer size and + // hoping that it is big enough. + char fixed_buffer[1024]; +#else + char fixed_buffer[200]; +#endif /* __GLIBC__ */ + char *buffer_r = fixed_buffer; + int size_r = sizeof (fixed_buffer); +#endif /* HAVE_STRUCT_HOSTENT_DATA */ +#endif /* HAVE_GETHOSTBYADDR_R */ + + char *bytes = (char*) elements (addr); + int len = addr->length; + int type; + char *val; + if (len == 4) + { + val = bytes; + type = AF_INET; + } +#ifdef HAVE_INET6 + else if (len == 16) + { + val = (char *) &bytes; + type = AF_INET6; + } +#endif /* HAVE_INET6 */ + else + JvFail ("unrecognized size"); + +#ifdef HAVE_GETHOSTBYADDR_R + while (true) + { + int ok; +#if HAVE_STRUCT_HOSTENT_DATA + ok = ! gethostbyaddr_r (val, len, type, &hent_r, buffer_r); +#else + int herr = 0; +#ifdef GETHOSTBYADDR_R_RETURNS_INT + ok = ! gethostbyaddr_r (val, len, type, &hent_r, + buffer_r, size_r, &hptr, &herr); +#else + hptr = gethostbyaddr_r (val, len, type, &hent_r, + buffer_r, size_r, &herr); + ok = hptr != NULL; +#endif /* GETHOSTBYADDR_R_RETURNS_INT */ + if (! ok && herr == ERANGE) + { + size_r *= 2; + buffer_r = (char *) _Jv_AllocBytes (size_r); + } + else +#endif /* HAVE_STRUCT_HOSTENT_DATA */ + break; + } +#else /* HAVE_GETHOSTBYADDR_R */ + // FIXME: this is insufficient if some other piece of code calls + // this gethostbyaddr. + JvSynchronize sync (&java::net::VMInetAddress::class$); + hptr = gethostbyaddr (val, len, type); +#endif /* HAVE_GETHOSTBYADDR_R */ + + if (hptr == NULL) + throw new java::net::UnknownHostException (); + + return JvNewStringUTF (hptr->h_name); +} + +JArray<jbyteArray> * +java::net::VMInetAddress::getHostByName (jstring host) +{ + struct hostent *hptr = NULL; +#ifdef HAVE_GETHOSTBYNAME_R + struct hostent hent_r; +#if HAVE_STRUCT_HOSTENT_DATA + struct hostent_data fixed_buffer, *buffer_r = &fixed_buffer; +#else +#ifdef __GLIBC__ + // FIXME: in glibc, gethostbyname_r returns NETDB_INTERNAL to herr and + // ERANGE to errno if the buffer size is too small, rather than what is + // expected here. We work around this by setting a bigger buffer size and + // hoping that it is big enough. + char fixed_buffer[1024]; +#else + char fixed_buffer[200]; +#endif /* __GLIBC__ */ + char *buffer_r = fixed_buffer; + int size_r = sizeof (fixed_buffer); +#endif /* HAVE_STRUCT_HOSTENT_DATA */ +#endif /* HAVE_GETHOSTBYNAME_R */ + + char *hostname; + char buf[100]; + int len = JvGetStringUTFLength(host); + if (len < 100) + hostname = buf; + else + hostname = (char *) _Jv_AllocBytes (len + 1); + JvGetStringUTFRegion (host, 0, host->length(), hostname); + buf[len] = '\0'; +#ifdef HAVE_GETHOSTBYNAME_R + while (true) + { + int ok; +#if HAVE_STRUCT_HOSTENT_DATA + ok = ! gethostbyname_r (hostname, &hent_r, buffer_r); +#else + int herr = 0; +#ifdef GETHOSTBYNAME_R_RETURNS_INT + ok = ! gethostbyname_r (hostname, &hent_r, buffer_r, size_r, + &hptr, &herr); +#else + hptr = gethostbyname_r (hostname, &hent_r, buffer_r, size_r, &herr); + ok = hptr != NULL; +#endif /* GETHOSTNAME_R_RETURNS_INT */ + if (! ok && herr == ERANGE) + { + size_r *= 2; + buffer_r = (char *) _Jv_AllocBytes (size_r); + } + else +#endif /* HAVE_STRUCT_HOSTENT_DATA */ + break; + } +#else /* HAVE_GETHOSTBYNAME_R */ + // FIXME: this is insufficient if some other piece of code calls + // this gethostbyname. + JvSynchronize sync (&java::net::VMInetAddress::class$); + hptr = gethostbyname (hostname); +#endif /* HAVE_GETHOSTBYNAME_R */ + + if (hptr == NULL) + throw new java::net::UnknownHostException (host); + + int count = 0; + char ** ptr = hptr->h_addr_list; + while (*ptr++) count++; + + JArray<jbyteArray> *result = + (JArray<jbyteArray> *) _Jv_NewObjectArray ( + count, _Jv_GetArrayClass(JvPrimClass(byte), NULL), NULL); + jbyteArray* addrs = elements (result); + + for (int i = 0; i < count; i++) + { + addrs[i] = JvNewByteArray (hptr->h_length); + memcpy (elements (addrs[i]), hptr->h_addr_list[i], hptr->h_length); + } + return result; +} + +jbyteArray +java::net::VMInetAddress::aton (jstring host) +{ + char *hostname; + char buf[100]; + int len = JvGetStringUTFLength(host); + if (len < 100) + hostname = buf; + else + hostname = (char *) _Jv_AllocBytes (len+1); + JvGetStringUTFRegion (host, 0, host->length(), hostname); + buf[len] = '\0'; + char *bytes = NULL; + int blen = 0; +#ifdef HAVE_INET_ATON + struct in_addr laddr; + if (inet_aton (hostname, &laddr)) + { + bytes = (char *) &laddr; + blen = 4; + } +#elif defined(HAVE_INET_ADDR) +#if ! HAVE_IN_ADDR_T + typedef jint in_addr_t; +#endif + in_addr_t laddr = inet_addr (hostname); + if (laddr != (in_addr_t)(-1)) + { + bytes = (char *) &laddr; + blen = 4; + } +#endif +#if defined (HAVE_INET_PTON) && defined (HAVE_INET6) + char inet6_addr[16]; + if (len != 0 && inet_pton (AF_INET6, hostname, inet6_addr) > 0) + { + bytes = inet6_addr; + blen = 16; + } +#endif + if (blen == 0) + return NULL; + jbyteArray result = JvNewByteArray (blen); + memcpy (elements (result), bytes, blen); + return result; +} diff --git a/libjava/java/net/natVMInetAddressWin32.cc b/libjava/java/net/natVMInetAddressWin32.cc new file mode 100644 index 0000000..259480f --- /dev/null +++ b/libjava/java/net/natVMInetAddressWin32.cc @@ -0,0 +1,121 @@ +/* Copyright (C) 2003, 2006 Free Software Foundation + + This file is part of libgcj. + +This software is copyrighted work licensed under the terms of the +Libgcj License. Please consult the file "LIBGCJ_LICENSE" for +details. */ + +#include <config.h> +#include <platform.h> + +#undef STRICT + +#include <java/net/VMInetAddress.h> +#include <java/net/UnknownHostException.h> + +jstring +java::net::VMInetAddress::getLocalHostname () +{ + char buffer[400]; + if (gethostname (buffer, sizeof(buffer))) + return NULL; + // It is admittedly non-optimal to convert the hostname to Unicode + // only to convert it back in getByName, but simplicity wins. + return JvNewStringUTF (buffer); +} + +jbyteArray +java::net::VMInetAddress::lookupInaddrAny () +{ + unsigned long laddr = INADDR_ANY; + char *bytes = (char *) &laddr; + int blen = sizeof (laddr); + jbyteArray result = JvNewByteArray (blen); + memcpy (elements (result), bytes, blen); + return result; +} + +jstring +java::net::VMInetAddress::getHostByAddr (jbyteArray addr) +{ + struct hostent *hptr = NULL; + char *bytes = (char*) elements (addr); + int len = addr->length; + int type; + char *val; + if (len == 4) + { + val = bytes; + type = AF_INET; + } +#ifdef HAVE_INET6 + else if (len == 16) + { + val = (char *) &bytes; + type = AF_INET6; + } +#endif /* HAVE_INET6 */ + else + JvFail ("unrecognized size"); + + // FIXME: this is insufficient if some other piece of code calls + // this gethostbyaddr. + JvSynchronize sync (&java::net::VMInetAddress::class$); + hptr = gethostbyaddr (val, len, type); + + if (hptr == NULL) + throw new java::net::UnknownHostException (); + + return JvNewStringUTF (hptr->h_name); +} + +JArray<jbyteArray> * +java::net::VMInetAddress::getHostByName (jstring host) +{ + struct hostent *hptr = NULL; + JV_TEMP_UTF_STRING (hostname, host); + + // FIXME: this is insufficient if some other piece of code calls + // this gethostbyname. + JvSynchronize sync (&java::net::VMInetAddress::class$); + hptr = gethostbyname (hostname); + + if (hptr == NULL) + throw new java::net::UnknownHostException (host); + + int count = 0; + char ** ptr = hptr->h_addr_list; + while (*ptr++) count++; + + JArray<jbyteArray> *result = + (JArray<jbyteArray> *) _Jv_NewObjectArray ( + count, _Jv_GetArrayClass(JvPrimClass(byte), NULL), NULL); + jbyteArray* addrs = elements (result); + + for (int i = 0; i < count; i++) + { + addrs[i] = JvNewByteArray (hptr->h_length); + memcpy (elements (addrs[i]), hptr->h_addr_list[i], hptr->h_length); + } + return result; +} + +jbyteArray +java::net::VMInetAddress::aton (jstring host) +{ + JV_TEMP_UTF_STRING (hostname, host); + char* bytes = NULL; + int blen = 0; + unsigned long laddr = inet_addr (hostname); + if (laddr != INADDR_NONE) + { + bytes = (char *) &laddr; + blen = 4; + } + if (blen == 0) + return NULL; + jbyteArray result = JvNewByteArray (blen); + memcpy (elements (result), bytes, blen); + return result; +} diff --git a/libjava/java/net/natVMNetworkInterfaceWin32.cc b/libjava/java/net/natVMNetworkInterfaceWin32.cc index d42f33d..c9b14d5 100644 --- a/libjava/java/net/natVMNetworkInterfaceWin32.cc +++ b/libjava/java/net/natVMNetworkInterfaceWin32.cc @@ -12,7 +12,7 @@ details. */ #undef STRICT #include <java/net/NetworkInterface.h> -#include <java/net/Inet4Address.h> +#include <java/net/InetAddress.h> #include <java/net/SocketException.h> #include <java/net/VMNetworkInterface.h> #include <java/util/Vector.h> @@ -83,8 +83,8 @@ winsock2GetRealNetworkInterfaces (jstring* pjstrName, } jstring if_name = _Jv_Win32NewString (szName); - java::net::Inet4Address* address = - new java::net::Inet4Address (baddr, JvNewStringLatin1 ("")); + java::net::InetAddress* address = + java::net::InetAddress::getByAddress (baddr); pjstrName[i] = if_name; ppAddress[i] = address; } diff --git a/libjava/sources.am b/libjava/sources.am index 7cd9e26..b13633f 100644 --- a/libjava/sources.am +++ b/libjava/sources.am @@ -5229,7 +5229,7 @@ classpath/java/net/FileNameMap.java \ classpath/java/net/HttpURLConnection.java \ classpath/java/net/Inet4Address.java \ classpath/java/net/Inet6Address.java \ -java/net/InetAddress.java \ +classpath/java/net/InetAddress.java \ classpath/java/net/InetSocketAddress.java \ classpath/java/net/JarURLConnection.java \ classpath/java/net/MalformedURLException.java \ |