You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by ml...@apache.org on 2006/06/02 10:05:13 UTC

svn commit: r411083 - in /incubator/harmony/enhanced/classlib/trunk/modules/luni/src: main/java/java/net/Inet6Address.java main/java/java/net/NetworkInterface.java test/java/tests/api/java/net/Inet6AddressTest.java

Author: mloenko
Date: Fri Jun  2 01:05:12 2006
New Revision: 411083

URL: http://svn.apache.org/viewvc?rev=411083&view=rev
Log:
fixes for HARMONY-500
Java 5 Enhancement: java.net.Inet6Address needs read/write scope_ifname_set and ifname in serialization

Modified:
    incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/net/Inet6Address.java
    incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/net/NetworkInterface.java
    incubator/harmony/enhanced/classlib/trunk/modules/luni/src/test/java/tests/api/java/net/Inet6AddressTest.java

Modified: incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/net/Inet6Address.java
URL: http://svn.apache.org/viewvc/incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/net/Inet6Address.java?rev=411083&r1=411082&r2=411083&view=diff
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/net/Inet6Address.java (original)
+++ incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/net/Inet6Address.java Fri Jun  2 01:05:12 2006
@@ -44,7 +44,7 @@
 	/*
 	 * scoped interface.
 	 */
-	private transient NetworkInterface scopedIf = null;
+	transient NetworkInterface scopedIf = null;
 
 	Inet6Address(byte address[]) {
 		ipaddress = address;
@@ -416,7 +416,9 @@
 	private static final ObjectStreamField[] serialPersistentFields = {
 			new ObjectStreamField("ipaddress", new byte[0].getClass()),
 			new ObjectStreamField("scope_id", Integer.TYPE),
-			new ObjectStreamField("scope_id_set", Boolean.TYPE) };
+			new ObjectStreamField("scope_id_set", Boolean.TYPE),
+            new ObjectStreamField("scope_ifname_set", Boolean.TYPE),
+            new ObjectStreamField("ifname", String.class),};
 
 	private void writeObject(ObjectOutputStream stream) throws IOException {
 		ObjectOutputStream.PutField fields = stream.putFields();
@@ -428,7 +430,8 @@
 
 		fields.put("scope_id", scope_id);
 		fields.put("scope_id_set", scope_id_set);
-
+        fields.put("scope_ifname_set", scope_ifname_set);
+        fields.put("ifname", ifname);
 		stream.writeFields();
 	}
 
@@ -438,6 +441,11 @@
 		ipaddress = (byte[]) fields.get("ipaddress", null);
 		scope_id = fields.get("scope_id", 0);
 		scope_id_set = fields.get("scope_id_set", false);
+        ifname = (String)fields.get("ifname", null);
+        scope_ifname_set = fields.get("scope_ifname_set", false);
+        if (scope_ifname_set){
+            scopedIf = NetworkInterface.getByName(ifname);
+        }
 	}
 
 	/**

Modified: incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/net/NetworkInterface.java
URL: http://svn.apache.org/viewvc/incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/net/NetworkInterface.java?rev=411083&r1=411082&r2=411083&view=diff
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/net/NetworkInterface.java (original)
+++ incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/net/NetworkInterface.java Fri Jun  2 01:05:12 2006
@@ -296,6 +296,19 @@
         if (interfaces == null) {
             return null;
         }
+
+        for (NetworkInterface netif : interfaces) {
+            for (InetAddress addr : netif.addresses) {
+                if (16 == addr.ipaddress.length) {
+                    if (addr.isLinkLocalAddress() || addr.isSiteLocalAddress()) {
+                        ((Inet6Address) addr).scopedIf = netif;
+                        ((Inet6Address) addr).ifname = netif.name;
+                        ((Inet6Address) addr).scope_ifname_set = true;
+                    }
+                }
+            }
+        }
+
         return (new Vector<NetworkInterface>(Arrays.asList(interfaces)))
                 .elements();
     }
@@ -305,8 +318,7 @@
      * are equal. The object must be an instance of NetworkInterface with the
      * same name, displayName and list of network interfaces to be the same
      * 
-     * @param obj
-     *            the object to compare
+     * @param obj the object to compare
      * @return true if the specified object is equal to this NetworkInterfcae,
      *         false otherwise
      * 

Modified: incubator/harmony/enhanced/classlib/trunk/modules/luni/src/test/java/tests/api/java/net/Inet6AddressTest.java
URL: http://svn.apache.org/viewvc/incubator/harmony/enhanced/classlib/trunk/modules/luni/src/test/java/tests/api/java/net/Inet6AddressTest.java?rev=411083&r1=411082&r2=411083&view=diff
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/luni/src/test/java/tests/api/java/net/Inet6AddressTest.java (original)
+++ incubator/harmony/enhanced/classlib/trunk/modules/luni/src/test/java/tests/api/java/net/Inet6AddressTest.java Fri Jun  2 01:05:12 2006
@@ -20,8 +20,12 @@
 import java.net.NetworkInterface;
 import java.net.UnknownHostException;
 
+import tests.util.SerializationTester;
+
 public class Inet6AddressTest extends junit.framework.TestCase {
 
+    private static final String SERIALIZATION_FILE_NAME = "serialization/java/net/Inet6Address.golden.ser";
+
 	/**
 	 * @tests java.net.Inet6Address#isMulticastAddress()
 	 */
@@ -957,4 +961,36 @@
 
 		return fullString.toUpperCase();
 	}
+
+    /*
+     * Test serialization/deserilazation.
+     */
+    public void testSerialization() throws Exception {       
+        byte[] localv6 = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 };        
+        Inet6Address ia = (Inet6Address) InetAddress.getByAddress(localv6);
+        Inet6Address deIA = (Inet6Address) SerializationTester
+                .getDeserilizedObject(ia);
+        byte[] deAddr = deIA.getAddress();
+        for (int i = 0; i < localv6.length; i++) {
+            assertEquals(localv6[i], deAddr[i]);
+        }
+        assertEquals(ia.getScopeId(), deIA.getScopeId());
+        assertEquals(ia.getScopedInterface(), deIA.getScopedInterface());
+    }
+
+    /*
+     * Test serialization/deserilazation compatibility with RI.
+     */
+    public void testSerializationCompatibility() throws Exception {
+        byte[] localv6 = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 };
+        Inet6Address ia = (Inet6Address) InetAddress.getByAddress(localv6);
+        Inet6Address deIA = (Inet6Address) SerializationTester.readObject(ia,
+                SERIALIZATION_FILE_NAME);
+        byte[] deAddr = deIA.getAddress();
+        for (int i = 0; i < localv6.length; i++) {
+            assertEquals(localv6[i], deAddr[i]);
+        }
+        assertEquals(ia.getScopeId(), deIA.getScopeId());
+        assertEquals(ia.getScopedInterface(), deIA.getScopedInterface());
+    }
 }