Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4ea54f44 authored by Robert Greenwalt's avatar Robert Greenwalt Committed by Android (Google) Code Review
Browse files

Merge "resolved conflicts for merge of b998f311 to gingerbread-plus-aosp" into...

Merge "resolved conflicts for merge of b998f311 to gingerbread-plus-aosp" into gingerbread-plus-aosp
parents 15edaceb b21b6232
Loading
Loading
Loading
Loading
+25 −1
Original line number Original line Diff line number Diff line
@@ -21,6 +21,9 @@ import android.annotation.SdkConstant.SdkConstantType;
import android.os.Binder;
import android.os.Binder;
import android.os.RemoteException;
import android.os.RemoteException;


import java.net.InetAddress;
import java.net.UnknownHostException;

/**
/**
 * Class that answers queries about the state of network connectivity. It also
 * Class that answers queries about the state of network connectivity. It also
 * notifies applications when network connectivity changes. Get an instance
 * notifies applications when network connectivity changes. Get an instance
@@ -309,8 +312,29 @@ public class ConnectivityManager
     * @return {@code true} on success, {@code false} on failure
     * @return {@code true} on success, {@code false} on failure
     */
     */
    public boolean requestRouteToHost(int networkType, int hostAddress) {
    public boolean requestRouteToHost(int networkType, int hostAddress) {
        InetAddress inetAddress = NetworkUtils.intToInetAddress(hostAddress);

        if (inetAddress == null) {
            return false;
        }

        return requestRouteToHostAddress(networkType, inetAddress);
    }

    /**
     * Ensure that a network route exists to deliver traffic to the specified
     * host via the specified network interface. An attempt to add a route that
     * already exists is ignored, but treated as successful.
     * @param networkType the type of the network over which traffic to the specified
     * host is to be routed
     * @param hostAddress the IP address of the host to which the route is desired
     * @return {@code true} on success, {@code false} on failure
     * @hide
     */
    public boolean requestRouteToHostAddress(int networkType, InetAddress hostAddress) {
        byte[] address = hostAddress.getAddress();
        try {
        try {
            return mService.requestRouteToHost(networkType, hostAddress);
            return mService.requestRouteToHostAddress(networkType, address);
        } catch (RemoteException e) {
        } catch (RemoteException e) {
            return false;
            return false;
        }
        }
+2 −0
Original line number Original line Diff line number Diff line
@@ -47,6 +47,8 @@ interface IConnectivityManager


    boolean requestRouteToHost(int networkType, int hostAddress);
    boolean requestRouteToHost(int networkType, int hostAddress);


    boolean requestRouteToHostAddress(int networkType, in byte[] hostAddress);

    boolean getBackgroundDataSetting();
    boolean getBackgroundDataSetting();


    void setBackgroundDataSetting(boolean allowBackgroundData);
    void setBackgroundDataSetting(boolean allowBackgroundData);
+6 −6
Original line number Original line Diff line number Diff line
@@ -16,6 +16,8 @@


package android.net;
package android.net;


import java.net.InetAddress;

import android.content.BroadcastReceiver;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Context;
import android.content.Intent;
import android.content.Intent;
@@ -23,7 +25,6 @@ import android.content.IntentFilter;
import android.os.RemoteException;
import android.os.RemoteException;
import android.os.Handler;
import android.os.Handler;
import android.os.ServiceManager;
import android.os.ServiceManager;
import android.os.SystemProperties;
import com.android.internal.telephony.ITelephony;
import com.android.internal.telephony.ITelephony;
import com.android.internal.telephony.Phone;
import com.android.internal.telephony.Phone;
import com.android.internal.telephony.TelephonyIntents;
import com.android.internal.telephony.TelephonyIntents;
@@ -489,17 +490,16 @@ public class MobileDataStateTracker extends NetworkStateTracker {
     * Ensure that a network route exists to deliver traffic to the specified
     * Ensure that a network route exists to deliver traffic to the specified
     * host via the mobile data network.
     * host via the mobile data network.
     * @param hostAddress the IP address of the host to which the route is desired,
     * @param hostAddress the IP address of the host to which the route is desired,
     * in network byte order.
     * @return {@code true} on success, {@code false} on failure
     * @return {@code true} on success, {@code false} on failure
     */
     */
    @Override
    @Override
    public boolean requestRouteToHost(int hostAddress) {
    public boolean requestRouteToHost(InetAddress hostAddress) {
        if (DBG) {
        if (DBG) {
            Log.d(TAG, "Requested host route to " + Integer.toHexString(hostAddress) +
            Log.d(TAG, "Requested host route to " + hostAddress.getHostAddress() +
                    " for " + mApnType + "(" + mInterfaceName + ")");
                    " for " + mApnType + "(" + mInterfaceName + ")");
        }
        }
        if (mInterfaceName != null && hostAddress != -1) {
        if (mInterfaceName != null) {
            return NetworkUtils.addHostRoute(mInterfaceName, hostAddress) == 0;
            return NetworkUtils.addHostRoute(mInterfaceName, hostAddress, null);
        } else {
        } else {
            return false;
            return false;
        }
        }
+21 −8
Original line number Original line Diff line number Diff line
@@ -18,13 +18,14 @@ package android.net;


import java.io.FileWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;


import android.os.Handler;
import android.os.Handler;
import android.os.Message;
import android.os.Message;
import android.os.SystemProperties;
import android.os.SystemProperties;
import android.content.Context;
import android.content.Context;
import android.text.TextUtils;
import android.text.TextUtils;
import android.util.Config;
import android.util.Log;
import android.util.Log;




@@ -128,13 +129,18 @@ public abstract class NetworkStateTracker extends Handler {
        }
        }
        if (mInterfaceName != null && !mPrivateDnsRouteSet) {
        if (mInterfaceName != null && !mPrivateDnsRouteSet) {
            for (String addrString : getNameServers()) {
            for (String addrString : getNameServers()) {
                int addr = NetworkUtils.lookupHost(addrString);
                if (addrString != null) {
                if (addr != -1 && addr != 0) {
                    try {
                    if (DBG) Log.d(TAG, "  adding "+addrString+" ("+addr+")");
                        InetAddress inetAddress = InetAddress.getByName(addrString);
                    NetworkUtils.addHostRoute(mInterfaceName, addr);
                        if (DBG) Log.d(TAG, "  adding " + addrString);
                        if (NetworkUtils.addHostRoute(mInterfaceName, inetAddress, null)) {
                            mPrivateDnsRouteSet = true;
                        }
                    } catch (UnknownHostException e) {
                        if (DBG) Log.d(TAG, " DNS address " + addrString + " : Exception " + e);
                    }
                }
                }
            }
            }
            mPrivateDnsRouteSet = true;
        }
        }
    }
    }


@@ -157,7 +163,14 @@ public abstract class NetworkStateTracker extends Handler {
                Log.d(TAG, "addDefaultRoute for " + mNetworkInfo.getTypeName() +
                Log.d(TAG, "addDefaultRoute for " + mNetworkInfo.getTypeName() +
                        " (" + mInterfaceName + "), GatewayAddr=" + mDefaultGatewayAddr);
                        " (" + mInterfaceName + "), GatewayAddr=" + mDefaultGatewayAddr);
            }
            }
            NetworkUtils.setDefaultRoute(mInterfaceName, mDefaultGatewayAddr);
            InetAddress inetAddress = NetworkUtils.intToInetAddress(mDefaultGatewayAddr);
            if (inetAddress == null) {
                if (DBG) Log.d(TAG, " Unable to add default route. mDefaultGatewayAddr Error");
            } else {
                if (!NetworkUtils.addDefaultRoute(mInterfaceName, inetAddress) && DBG) {
                    Log.d(TAG, "  Unable to add default route.");
                }
            }
        }
        }
    }
    }


@@ -394,7 +407,7 @@ public abstract class NetworkStateTracker extends Handler {
     * @param hostAddress the IP address of the host to which the route is desired
     * @param hostAddress the IP address of the host to which the route is desired
     * @return {@code true} on success, {@code false} on failure
     * @return {@code true} on success, {@code false} on failure
     */
     */
    public boolean requestRouteToHost(int hostAddress) {
    public boolean requestRouteToHost(InetAddress hostAddress) {
        return false;
        return false;
    }
    }


+88 −22
Original line number Original line Diff line number Diff line
@@ -17,25 +17,39 @@
package android.net;
package android.net;


import java.net.InetAddress;
import java.net.InetAddress;
import java.net.Inet4Address;
import java.net.Inet6Address;
import java.net.UnknownHostException;
import java.net.UnknownHostException;


import android.util.Log;

/**
/**
 * Native methods for managing network interfaces.
 * Native methods for managing network interfaces.
 *
 *
 * {@hide}
 * {@hide}
 */
 */
public class NetworkUtils {
public class NetworkUtils {

    private static final String TAG = "NetworkUtils";

    /** Bring the named network interface up. */
    /** Bring the named network interface up. */
    public native static int enableInterface(String interfaceName);
    public native static int enableInterface(String interfaceName);


    /** Bring the named network interface down. */
    /** Bring the named network interface down. */
    public native static int disableInterface(String interfaceName);
    public native static int disableInterface(String interfaceName);


    /** Add a route to the specified host via the named interface. */
    /**
    public native static int addHostRoute(String interfaceName, int hostaddr);
     * Add a route to the routing table.

     *
    /** Add a default route for the named interface. */
     * @param interfaceName the interface to route through.
    public native static int setDefaultRoute(String interfaceName, int gwayAddr);
     * @param dst the network or host to route to. May be IPv4 or IPv6, e.g.
     * "0.0.0.0" or "2001:4860::".
     * @param prefixLength the prefix length of the route.
     * @param gw the gateway to use, e.g., "192.168.251.1". If null,
     * indicates a directly-connected route.
     */
    public native static int addRoute(String interfaceName, String dst,
          int prefixLength, String gw);


    /** Return the gateway address for the default route for the named interface. */
    /** Return the gateway address for the default route for the named interface. */
    public native static int getDefaultRoute(String interfaceName);
    public native static int getDefaultRoute(String interfaceName);
@@ -106,27 +120,79 @@ public class NetworkUtils {
        String interfaceName, int ipAddress, int netmask, int gateway, int dns1, int dns2);
        String interfaceName, int ipAddress, int netmask, int gateway, int dns1, int dns2);


    /**
    /**
     * Look up a host name and return the result as an int. Works if the argument
     * Convert a IPv4 address from an integer to an InetAddress.
     * is an IP address in dot notation. Obviously, this can only be used for IPv4
     * @param hostAddr is an Int corresponding to the IPv4 address in network byte order
     * addresses.
     * @return the IP address as an {@code InetAddress}, returns null if
     * @param hostname the name of the host (or the IP address)
     * unable to convert or if the int is an invalid address.
     * @return the IP address as an {@code int} in network byte order
     */
     */
    public static int lookupHost(String hostname) {
    public static InetAddress intToInetAddress(int hostAddress) {
        InetAddress inetAddress;
        InetAddress inetAddress;
        byte[] addressBytes = { (byte)(0xff & hostAddress),
                                (byte)(0xff & (hostAddress >> 8)),
                                (byte)(0xff & (hostAddress >> 16)),
                                (byte)(0xff & (hostAddress >> 24)) };

        try {
        try {
            inetAddress = InetAddress.getByName(hostname);
           inetAddress = InetAddress.getByAddress(addressBytes);
        } catch(UnknownHostException e) {
        } catch(UnknownHostException e) {
            return -1;
           return null;
        }

        return inetAddress;
    }

    /**
     * Add a default route through the specified gateway.
     * @param interfaceName interface on which the route should be added
     * @param gw the IP address of the gateway to which the route is desired,
     * @return {@code true} on success, {@code false} on failure
     */
    public static boolean addDefaultRoute(String interfaceName, InetAddress gw) {
        String dstStr;
        String gwStr = gw.getHostAddress();

        if (gw instanceof Inet4Address) {
            dstStr = "0.0.0.0";
        } else if (gw instanceof Inet6Address) {
            dstStr = "::";
        } else {
            Log.w(TAG, "addDefaultRoute failure: address is neither IPv4 nor IPv6" +
                       "(" + gwStr + ")");
            return false;
        }
        return addRoute(interfaceName, dstStr, 0, gwStr) == 0;
    }

    /**
     * Add a host route.
     * @param interfaceName interface on which the route should be added
     * @param dst the IP address of the host to which the route is desired,
     * this should not be null.
     * @param gw the IP address of the gateway to which the route is desired,
     * if null, indicates a directly-connected route.
     * @return {@code true} on success, {@code false} on failure
     */
    public static boolean addHostRoute(String interfaceName, InetAddress dst,
          InetAddress gw) {
        if (dst == null) {
            Log.w(TAG, "addHostRoute: dst should not be null");
            return false;
        }

        int prefixLength;
        String dstStr = dst.getHostAddress();
        String gwStr = (gw != null) ? gw.getHostAddress() : null;

        if (dst instanceof Inet4Address) {
            prefixLength = 32;
        } else if (dst instanceof Inet6Address) {
            prefixLength = 128;
        } else {
            Log.w(TAG, "addHostRoute failure: address is neither IPv4 nor IPv6" +
                       "(" + dst + ")");
            return false;
        }
        }
        byte[] addrBytes;
        return addRoute(interfaceName, dstStr, prefixLength, gwStr) == 0;
        int addr;
        addrBytes = inetAddress.getAddress();
        addr = ((addrBytes[3] & 0xff) << 24)
                | ((addrBytes[2] & 0xff) << 16)
                | ((addrBytes[1] & 0xff) << 8)
                |  (addrBytes[0] & 0xff);
        return addr;
    }
    }


    public static int v4StringToInt(String str) {
    public static int v4StringToInt(String str) {
Loading