[Patch] java.net - InetAddress and Inet4Address

Michael Koch konqueror@gmx.de
Tue Apr 26 22:09:00 GMT 2005


Hi list,


I just merged the attached patch from GNU classpath to HEAD to fix the
handling of byte values of the ip address in several places.


Michael


2005-04-26  Michael Koch  <konqueror@gmx.de>

	* java/net/InetAddress.java: Made all hexadecimal numbers lowercase.
	Fixed typos in javadocs.
	(isSiteLocalAddress): Fixed handling of byte values.
	(isMCLinkLocal): Likewise.
	* java/net/Inet4Address.java
	(isMulticastAddress): Call super method.
	(isLoopbackAddress): Likewise.
	(isAnyLocalAddress): Likewise.
	(isLinkLocalAddress): Likewise.
	(isSiteLocalAddress): Likewise.
	(isMCGlobal): Likewise.
	(isMCNodeLocal): Likewise.
	(isMCLinkLocal): Likewise.
	(isMCSiteLocal): Likewise.
	(isMCOrgLocal): Likewise.
	(getHostAddress): Likewise.

-------------- next part --------------
Index: java/net/Inet4Address.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/java/net/Inet4Address.java,v
retrieving revision 1.11
diff -u -r1.11 Inet4Address.java
--- java/net/Inet4Address.java	3 Feb 2005 17:44:20 -0000	1.11
+++ java/net/Inet4Address.java	26 Apr 2005 22:06:35 -0000
@@ -1,5 +1,5 @@
 /* Inet4Address.java --
-   Copyright (C) 2002, 2003, 2004  Free Software Foundation, Inc.
+   Copyright (C) 2002, 2003, 2004, 2005  Free Software Foundation, Inc.
 
 This file is part of GNU Classpath.
 
@@ -39,7 +39,6 @@
 package java.net;
 
 import java.io.ObjectStreamException;
-import java.util.Arrays;
 
 /*
  * Written using on-line Java Platform 1.4 API Specification and
@@ -85,7 +84,7 @@
    */
   public boolean isMulticastAddress()
   {
-    return (addr[0] & 0xF0) == 0xE0;
+    return super.isMulticastAddress();
   }
 
   /**
@@ -93,7 +92,7 @@
    */
   public boolean isLoopbackAddress()
   {
-    return addr[0] == 0x7F;
+    return super.isLoopbackAddress();
   }
 
   /**
@@ -103,9 +102,7 @@
    */
   public boolean isAnyLocalAddress()
   {
-    byte[] anylocal = { 0, 0, 0, 0 };
-
-    return Arrays.equals(addr, anylocal);
+    return super.isAnyLocalAddress();
   }
 
   /**
@@ -115,8 +112,7 @@
    */
   public boolean isLinkLocalAddress()
   {
-    // XXX: This seems to not exist with IPv4 addresses
-    return false;
+    return super.isLinkLocalAddress();
   }
 
   /**
@@ -126,23 +122,7 @@
    */
   public boolean isSiteLocalAddress()
   {
-    // 10.0.0.0/8
-    if (addr[0] == 0x0A)
-      return true;
-
-    // XXX: Suns JDK 1.4.1 (on Linux) seems to have a bug here:
-    // it says 172.16.0.0 - 172.255.255.255 are site local addresses
-    //
-    // 172.16.0.0/12
-    if (addr[0] == 0xAC && (addr[1] & 0xF0) == 0x01)
-      return true;
-
-    // 192.168.0.0/16
-    if (addr[0] == 0xC0 && addr[1] == 0xA8)
-      return true;
-
-    // XXX: Do we need to check more addresses here ?
-    return false;
+    return super.isSiteLocalAddress();
   }
 
   /**
@@ -152,8 +132,7 @@
    */
   public boolean isMCGlobal()
   {
-    // XXX: This seems to net exist with IPv4 addresses
-    return false;
+    return super.isMCGlobal();
   }
 
   /**
@@ -163,8 +142,7 @@
    */
   public boolean isMCNodeLocal()
   {
-    // XXX: This seems to net exist with IPv4 addresses
-    return false;
+    return isMCNodeLocal();
   }
 
   /**
@@ -174,10 +152,7 @@
    */
   public boolean isMCLinkLocal()
   {
-    if (! isMulticastAddress())
-      return false;
-
-    return (addr[0] == 0xE0) && (addr[1] == 0x00) && (addr[2] == 0x00);
+    return super.isMCLinkLocal();
   }
 
   /**
@@ -187,8 +162,7 @@
    */
   public boolean isMCSiteLocal()
   {
-    // XXX: This seems to net exist with IPv4 addresses
-    return false;
+    return super.isMCSiteLocal();
   }
 
   /**
@@ -198,8 +172,7 @@
    */
   public boolean isMCOrgLocal()
   {
-    // XXX: This seems to net exist with IPv4 addresses
-    return false;
+    return isMCOrgLocal();
   }
 
   /**
@@ -217,22 +190,7 @@
    */
   public String getHostAddress()
   {
-    StringBuffer sbuf = new StringBuffer(40);
-    int len = addr.length;
-    int i = 0;
-
-    for (;;)
-      {
-	sbuf.append(addr[i] & 0xFF);
-	i++;
-
-	if (i == len)
-	  break;
-
-	sbuf.append('.');
-      }
-
-    return sbuf.toString();
+    return super.getHostAddress();
   }
 
   /**
@@ -272,4 +230,4 @@
 
     return true;
   }
-} // class Inet4Address
+}
Index: java/net/InetAddress.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/java/net/InetAddress.java,v
retrieving revision 1.39
diff -u -r1.39 InetAddress.java
--- java/net/InetAddress.java	26 Apr 2005 21:55:30 -0000	1.39
+++ java/net/InetAddress.java	26 Apr 2005 22:06:35 -0000
@@ -143,7 +143,7 @@
   {
     // Mask against high order bits of 1110
     if (addr.length == 4)
-      return (addr[0] & 0xF0) == 0xE0;
+      return (addr[0] & 0xf0) == 0xe0;
 
     // Mask against high order bits of 11111111
     if (addr.length == 16)
@@ -173,7 +173,7 @@
   {
     // This is the IPv4 implementation.
     // Any class derived from InetAddress should override this.
-    return addr[0] == 0x7F;
+    return (addr[0] & 0xff) == 0x7f;
   }
 
   /**
@@ -198,18 +198,17 @@
   {
     // This is the IPv4 implementation.
     // Any class derived from InetAddress should override this.
+
     // 10.0.0.0/8
-    if (addr[0] == 0x0A)
+    if ((addr[0] & 0xff) == 0x0a)
       return true;
 
-    // XXX: Suns JDK 1.4.1 (on Linux) seems to have a bug here:
-    // it says 172.16.0.0 - 172.255.255.255 are site local addresses
     // 172.16.0.0/12
-    if (addr[0] == 0xAC && (addr[1] & 0xF0) == 0x01)
+    if ((addr[0] & 0xff) == 0xac && (addr[1] & 0xf0) == 0x10)
       return true;
 
     // 192.168.0.0/16
-    if (addr[0] == 0xC0 && addr[1] == 0xA8)
+    if ((addr[0] & 0xff) == 0xc0 && (addr[1] & 0xff) == 0xa8)
       return true;
 
     // XXX: Do we need to check more addresses here ?
@@ -254,7 +253,9 @@
     if (! isMulticastAddress())
       return false;
 
-    return (addr[0] == 0xE0 && addr[1] == 0x00 && addr[2] == 0x00);
+    return ((addr[0] & 0xff) == 0xe0
+	    && (addr[1] & 0xff)  == 0x00
+	    && (addr[2] & 0xff)  == 0x00);
   }
 
   /**
@@ -447,7 +448,7 @@
     int i = len > 4 ? len - 4 : 0;
 
     for (; i < len; i++)
-      hash = (hash << 8) | (addr[i] & 0xFF);
+      hash = (hash << 8) | (addr[i] & 0xff);
 
     return hash;
   }


More information about the Java-patches mailing list