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

Commit 017223ac authored by Lorenzo Colitti's avatar Lorenzo Colitti Committed by Android (Google) Code Review
Browse files

Merge changes from topic 'packet-keepalive-fixes' into mnc-dr-dev

* changes:
  Require the new PACKET_KEEPALIVE_OFFLOAD permission.
  Add an error code for generic hardware error.
  Fix bugs and crashes in PacketKeepalive API.
  Add tests for the PacketKeepalive API.
  Add a PACKET_KEEPALIVE_OFFLOAD permission.
  Use a CountDownLatch instead of sleep() in NetworkFactory tests.
  Get rid of shortSleep() in ConnectivityServiceTest.
  Make ConnectivityServiceTest a bit more readable.
parents 52429b4a b9884663
Loading
Loading
Loading
Loading
+2 −0
Original line number Original line Diff line number Diff line
@@ -1243,6 +1243,8 @@ public class ConnectivityManager {


        /** The hardware does not support this request. */
        /** The hardware does not support this request. */
        public static final int ERROR_HARDWARE_UNSUPPORTED = -30;
        public static final int ERROR_HARDWARE_UNSUPPORTED = -30;
        /** The hardware returned an error. */
        public static final int ERROR_HARDWARE_ERROR = -31;


        public static final int NATT_PORT = 4500;
        public static final int NATT_PORT = 4500;


+4 −2
Original line number Original line Diff line number Diff line
@@ -169,7 +169,8 @@ public class NetworkFactory extends Handler {
        }
        }
    }
    }


    private void handleAddRequest(NetworkRequest request, int score) {
    @VisibleForTesting
    protected void handleAddRequest(NetworkRequest request, int score) {
        NetworkRequestInfo n = mNetworkRequests.get(request.requestId);
        NetworkRequestInfo n = mNetworkRequests.get(request.requestId);
        if (n == null) {
        if (n == null) {
            if (DBG) log("got request " + request + " with score " + score);
            if (DBG) log("got request " + request + " with score " + score);
@@ -184,7 +185,8 @@ public class NetworkFactory extends Handler {
        evalRequest(n);
        evalRequest(n);
    }
    }


    private void handleRemoveRequest(NetworkRequest request) {
    @VisibleForTesting
    protected void handleRemoveRequest(NetworkRequest request) {
        NetworkRequestInfo n = mNetworkRequests.get(request.requestId);
        NetworkRequestInfo n = mNetworkRequests.get(request.requestId);
        if (n != null) {
        if (n != null) {
            mNetworkRequests.remove(request.requestId);
            mNetworkRequests.remove(request.requestId);
+5 −0
Original line number Original line Diff line number Diff line
@@ -1056,6 +1056,11 @@
    <permission android:name="android.permission.CONNECTIVITY_INTERNAL"
    <permission android:name="android.permission.CONNECTIVITY_INTERNAL"
        android:protectionLevel="signature|privileged" />
        android:protectionLevel="signature|privileged" />


    <!-- Allows a system application to access hardware packet offload capabilities.
         @hide -->
    <permission android:name="android.permission.PACKET_KEEPALIVE_OFFLOAD"
        android:protectionLevel="signature|privileged" />

    <!-- @SystemApi
    <!-- @SystemApi
         @hide -->
         @hide -->
    <permission android:name="android.permission.RECEIVE_DATA_ACTIVITY_CHANGE"
    <permission android:name="android.permission.RECEIVE_DATA_ACTIVITY_CHANGE"
+13 −5
Original line number Original line Diff line number Diff line
@@ -359,6 +359,9 @@ public class ConnectivityService extends IConnectivityManager.Stub
     */
     */
    private static final int EVENT_REGISTER_NETWORK_LISTENER_WITH_INTENT = 31;
    private static final int EVENT_REGISTER_NETWORK_LISTENER_WITH_INTENT = 31;


    /** Handler thread used for both of the handlers below. */
    @VisibleForTesting
    protected final HandlerThread mHandlerThread;
    /** Handler used for internal events. */
    /** Handler used for internal events. */
    final private InternalHandler mHandler;
    final private InternalHandler mHandler;
    /** Handler used for incoming {@link NetworkStateTracker} events. */
    /** Handler used for incoming {@link NetworkStateTracker} events. */
@@ -614,6 +617,11 @@ public class ConnectivityService extends IConnectivityManager.Stub
    }
    }
    private LegacyTypeTracker mLegacyTypeTracker = new LegacyTypeTracker();
    private LegacyTypeTracker mLegacyTypeTracker = new LegacyTypeTracker();


    @VisibleForTesting
    protected HandlerThread createHandlerThread() {
        return new HandlerThread("ConnectivityServiceThread");
    }

    public ConnectivityService(Context context, INetworkManagementService netManager,
    public ConnectivityService(Context context, INetworkManagementService netManager,
            INetworkStatsService statsService, INetworkPolicyManager policyManager) {
            INetworkStatsService statsService, INetworkPolicyManager policyManager) {
        if (DBG) log("ConnectivityService starting up");
        if (DBG) log("ConnectivityService starting up");
@@ -627,10 +635,10 @@ public class ConnectivityService extends IConnectivityManager.Stub
        mDefaultMobileDataRequest = createInternetRequestForTransport(
        mDefaultMobileDataRequest = createInternetRequestForTransport(
                NetworkCapabilities.TRANSPORT_CELLULAR);
                NetworkCapabilities.TRANSPORT_CELLULAR);


        HandlerThread handlerThread = new HandlerThread("ConnectivityServiceThread");
        mHandlerThread = createHandlerThread();
        handlerThread.start();
        mHandlerThread.start();
        mHandler = new InternalHandler(handlerThread.getLooper());
        mHandler = new InternalHandler(mHandlerThread.getLooper());
        mTrackerHandler = new NetworkStateTrackerHandler(handlerThread.getLooper());
        mTrackerHandler = new NetworkStateTrackerHandler(mHandlerThread.getLooper());


        // setup our unique device name
        // setup our unique device name
        if (TextUtils.isEmpty(SystemProperties.get("net.hostname"))) {
        if (TextUtils.isEmpty(SystemProperties.get("net.hostname"))) {
@@ -1458,7 +1466,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
    }
    }


    private void enforceKeepalivePermission() {
    private void enforceKeepalivePermission() {
        mContext.enforceCallingPermission(KeepaliveTracker.PERMISSION, "ConnectivityService");
        mContext.enforceCallingOrSelfPermission(KeepaliveTracker.PERMISSION, "ConnectivityService");
    }
    }


    public void sendConnectedBroadcast(NetworkInfo info) {
    public void sendConnectedBroadcast(NetworkInfo info) {
+2 −1
Original line number Original line Diff line number Diff line
@@ -71,6 +71,7 @@ public class KeepalivePacketData {
        // Check we have two IP addresses of the same family.
        // Check we have two IP addresses of the same family.
        if (srcAddress == null || dstAddress == null ||
        if (srcAddress == null || dstAddress == null ||
                !srcAddress.getClass().getName().equals(dstAddress.getClass().getName())) {
                !srcAddress.getClass().getName().equals(dstAddress.getClass().getName())) {
            throw new InvalidPacketException(ERROR_INVALID_IP_ADDRESS);
        }
        }


        // Set the protocol.
        // Set the protocol.
@@ -102,7 +103,7 @@ public class KeepalivePacketData {
            InetAddress srcAddress, int srcPort,
            InetAddress srcAddress, int srcPort,
            InetAddress dstAddress, int dstPort) throws InvalidPacketException {
            InetAddress dstAddress, int dstPort) throws InvalidPacketException {


        if (!(srcAddress instanceof Inet4Address)) {
        if (!(srcAddress instanceof Inet4Address) || !(dstAddress instanceof Inet4Address)) {
            throw new InvalidPacketException(ERROR_INVALID_IP_ADDRESS);
            throw new InvalidPacketException(ERROR_INVALID_IP_ADDRESS);
        }
        }


Loading