summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/net/RouteInfo.java60
-rw-r--r--core/tests/coretests/src/android/net/RouteInfoTest.java32
2 files changed, 58 insertions, 34 deletions
diff --git a/core/java/android/net/RouteInfo.java b/core/java/android/net/RouteInfo.java
index 63d6cd3d96e7..129248c7e05e 100644
--- a/core/java/android/net/RouteInfo.java
+++ b/core/java/android/net/RouteInfo.java
@@ -63,7 +63,6 @@ public final class RouteInfo implements Parcelable {
*/
private final String mInterface;
- private final boolean mIsDefault;
private final boolean mIsHost;
private final boolean mHasGateway;
@@ -128,7 +127,6 @@ public final class RouteInfo implements Parcelable {
}
mGateway = gateway;
mInterface = iface;
- mIsDefault = isDefault();
mIsHost = isHost();
}
@@ -215,18 +213,6 @@ public final class RouteInfo implements Parcelable {
mDestination.getPrefixLength() == 128);
}
- private boolean isDefault() {
- boolean val = false;
- if (mGateway != null) {
- if (mGateway instanceof Inet4Address) {
- val = (mDestination == null || mDestination.getPrefixLength() == 0);
- } else {
- val = (mDestination == null || mDestination.getPrefixLength() == 0);
- }
- }
- return val;
- }
-
/**
* Retrieves the destination address and prefix length in the form of an {@link IpPrefix}.
*
@@ -269,7 +255,23 @@ public final class RouteInfo implements Parcelable {
* @return {@code true} if the destination has a prefix length of 0.
*/
public boolean isDefaultRoute() {
- return mIsDefault;
+ return mDestination.getPrefixLength() == 0;
+ }
+
+ /**
+ * Indicates if this route is an IPv4 default route.
+ * @hide
+ */
+ public boolean isIPv4Default() {
+ return isDefaultRoute() && mDestination.getAddress() instanceof Inet4Address;
+ }
+
+ /**
+ * Indicates if this route is an IPv6 default route.
+ * @hide
+ */
+ public boolean isIPv6Default() {
+ return isDefaultRoute() && mDestination.getAddress() instanceof Inet6Address;
}
/**
@@ -370,10 +372,9 @@ public final class RouteInfo implements Parcelable {
* Returns a hashcode for this <code>RouteInfo</code> object.
*/
public int hashCode() {
- return (mDestination == null ? 0 : mDestination.hashCode() * 41)
+ return (mDestination.hashCode() * 41)
+ (mGateway == null ? 0 :mGateway.hashCode() * 47)
- + (mInterface == null ? 0 :mInterface.hashCode() * 67)
- + (mIsDefault ? 3 : 7);
+ + (mInterface == null ? 0 :mInterface.hashCode() * 67);
}
/**
@@ -387,13 +388,8 @@ public final class RouteInfo implements Parcelable {
* Implement the Parcelable interface
*/
public void writeToParcel(Parcel dest, int flags) {
- if (mDestination == null) {
- dest.writeByte((byte) 0);
- } else {
- dest.writeByte((byte) 1);
- dest.writeByteArray(mDestination.getAddress().getAddress());
- dest.writeInt(mDestination.getPrefixLength());
- }
+ dest.writeByteArray(mDestination.getAddress().getAddress());
+ dest.writeInt(mDestination.getPrefixLength());
if (mGateway == null) {
dest.writeByte((byte) 0);
@@ -415,17 +411,15 @@ public final class RouteInfo implements Parcelable {
int prefix = 0;
InetAddress gateway = null;
- if (in.readByte() == 1) {
- byte[] addr = in.createByteArray();
- prefix = in.readInt();
+ byte[] addr = in.createByteArray();
+ prefix = in.readInt();
- try {
- destAddr = InetAddress.getByAddress(addr);
- } catch (UnknownHostException e) {}
- }
+ try {
+ destAddr = InetAddress.getByAddress(addr);
+ } catch (UnknownHostException e) {}
if (in.readByte() == 1) {
- byte[] addr = in.createByteArray();
+ addr = in.createByteArray();
try {
gateway = InetAddress.getByAddress(addr);
diff --git a/core/tests/coretests/src/android/net/RouteInfoTest.java b/core/tests/coretests/src/android/net/RouteInfoTest.java
index af6a32be88b3..dcacd11776ca 100644
--- a/core/tests/coretests/src/android/net/RouteInfoTest.java
+++ b/core/tests/coretests/src/android/net/RouteInfoTest.java
@@ -150,38 +150,68 @@ public class RouteInfoTest extends TestCase {
assertAreNotEqual(r1, r3);
}
- public void testHostRoute() {
+ public void testHostAndDefaultRoutes() {
RouteInfo r;
r = new RouteInfo(Prefix("0.0.0.0/0"), Address("0.0.0.0"), "wlan0");
assertFalse(r.isHostRoute());
+ assertTrue(r.isDefaultRoute());
+ assertTrue(r.isIPv4Default());
+ assertFalse(r.isIPv6Default());
r = new RouteInfo(Prefix("::/0"), Address("::"), "wlan0");
assertFalse(r.isHostRoute());
+ assertTrue(r.isDefaultRoute());
+ assertFalse(r.isIPv4Default());
+ assertTrue(r.isIPv6Default());
r = new RouteInfo(Prefix("192.0.2.0/24"), null, "wlan0");
assertFalse(r.isHostRoute());
+ assertFalse(r.isDefaultRoute());
+ assertFalse(r.isIPv4Default());
+ assertFalse(r.isIPv6Default());
r = new RouteInfo(Prefix("2001:db8::/48"), null, "wlan0");
assertFalse(r.isHostRoute());
+ assertFalse(r.isDefaultRoute());
+ assertFalse(r.isIPv4Default());
+ assertFalse(r.isIPv6Default());
r = new RouteInfo(Prefix("192.0.2.0/32"), Address("0.0.0.0"), "wlan0");
assertTrue(r.isHostRoute());
+ assertFalse(r.isDefaultRoute());
+ assertFalse(r.isIPv4Default());
+ assertFalse(r.isIPv6Default());
r = new RouteInfo(Prefix("2001:db8::/128"), Address("::"), "wlan0");
assertTrue(r.isHostRoute());
+ assertFalse(r.isDefaultRoute());
+ assertFalse(r.isIPv4Default());
+ assertFalse(r.isIPv6Default());
r = new RouteInfo(Prefix("192.0.2.0/32"), null, "wlan0");
assertTrue(r.isHostRoute());
+ assertFalse(r.isDefaultRoute());
+ assertFalse(r.isIPv4Default());
+ assertFalse(r.isIPv6Default());
r = new RouteInfo(Prefix("2001:db8::/128"), null, "wlan0");
assertTrue(r.isHostRoute());
+ assertFalse(r.isDefaultRoute());
+ assertFalse(r.isIPv4Default());
+ assertFalse(r.isIPv6Default());
r = new RouteInfo(Prefix("::/128"), Address("fe80::"), "wlan0");
assertTrue(r.isHostRoute());
+ assertFalse(r.isDefaultRoute());
+ assertFalse(r.isIPv4Default());
+ assertFalse(r.isIPv6Default());
r = new RouteInfo(Prefix("0.0.0.0/32"), Address("192.0.2.1"), "wlan0");
assertTrue(r.isHostRoute());
+ assertFalse(r.isDefaultRoute());
+ assertFalse(r.isIPv4Default());
+ assertFalse(r.isIPv6Default());
}
public RouteInfo passThroughParcel(RouteInfo r) {