Hi, the attached patch partly fixes PR29576. Without redesigning VMNetworkInterface I just added a constructor which sets the field name to null and adds the ANY_ADDR to the address list. NetworkInterface got a new package private method which is to be called by MulticastSocket. Some other methods learned to deal with the field name of an VMNetworkInterface instance being null.
ChangeLog: 2006-10-25 Robert Schuster <[EMAIL PROTECTED]> Fixes PR29576 * java/net/NetworkInterface.java: (createAnyInterface): New method. (equals): Added if-statement to handle case where netif.name is null. * vm/reference/java/net/VMNetworkInterface.java: (hashCode): Rewritten. (VMNetworkInterface): New constructor. cya Robert
Index: java/net/NetworkInterface.java =================================================================== RCS file: /cvsroot/classpath/classpath/java/net/NetworkInterface.java,v retrieving revision 1.20 diff -u -r1.20 NetworkInterface.java --- java/net/NetworkInterface.java 17 Sep 2006 07:31:42 -0000 1.20 +++ java/net/NetworkInterface.java 24 Oct 2006 23:17:23 -0000 @@ -67,6 +67,16 @@ this.netif = netif; } + /** Creates an NetworkInterface instance which + * represents any interface in the system. Its only + * address is <code>0.0.0.0/0.0.0.0</code>. This + * method is needed by [EMAIL PROTECTED] MulticastSocket#getNetworkInterface} + */ + static NetworkInterface createAnyInterface() + { + return new NetworkInterface(new VMNetworkInterface()); + } + /** * Returns the name of the network interface * @@ -206,6 +216,9 @@ return false; NetworkInterface tmp = (NetworkInterface) obj; + + if (netif.name == null) + return tmp.netif.name == null; return (netif.name.equals(tmp.netif.name) && (netif.addresses.equals(tmp.netif.addresses))); @@ -219,7 +232,12 @@ public int hashCode() { // FIXME: hash correctly - return netif.name.hashCode() + netif.addresses.hashCode(); + int hc = netif.addresses.hashCode(); + + if (netif.name != null) + hc += netif.name.hashCode(); + + return hc; } /** Index: vm/reference/java/net/VMNetworkInterface.java =================================================================== RCS file: /cvsroot/classpath/classpath/vm/reference/java/net/VMNetworkInterface.java,v retrieving revision 1.5 diff -u -r1.5 VMNetworkInterface.java --- vm/reference/java/net/VMNetworkInterface.java 17 Sep 2006 07:31:43 -0000 1.5 +++ vm/reference/java/net/VMNetworkInterface.java 24 Oct 2006 23:17:23 -0000 @@ -66,6 +66,23 @@ addresses = new HashSet(); } + /** + * Creates a dummy instance which represents any network + * interface. + */ + public VMNetworkInterface() + { + addresses = new HashSet(); + try + { + addresses.add(InetAddress.getByName("0.0.0.0")); + } + catch (UnknownHostException _) + { + // Cannot happen. + } + } + static { if (Configuration.INIT_LOAD_LIBRARY)
signature.asc
Description: OpenPGP digital signature