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

Commit 795b460c authored by Cody Kesting's avatar Cody Kesting Committed by Automerger Merge Worker
Browse files

Use IBinder as key for ConnectivityDiagnostics storage in CS. am: 4600fa52...

Use IBinder as key for ConnectivityDiagnostics storage in CS. am: 4600fa52 am: af15704e am: 4760b8ad

Change-Id: I28b0ae30da4f071a13979ba644357631dd3c4c76
parents 652bc56e 4760b8ad
Loading
Loading
Loading
Loading
+14 −10
Original line number Original line Diff line number Diff line
@@ -653,8 +653,8 @@ public class ConnectivityService extends IConnectivityManager.Stub
    final MultipathPolicyTracker mMultipathPolicyTracker;
    final MultipathPolicyTracker mMultipathPolicyTracker;


    @VisibleForTesting
    @VisibleForTesting
    final Map<IConnectivityDiagnosticsCallback, ConnectivityDiagnosticsCallbackInfo>
    final Map<IBinder, ConnectivityDiagnosticsCallbackInfo> mConnectivityDiagnosticsCallbacks =
            mConnectivityDiagnosticsCallbacks = new HashMap<>();
            new HashMap<>();


    /**
    /**
     * Implements support for the legacy "one network per network type" model.
     * Implements support for the legacy "one network per network type" model.
@@ -7835,11 +7835,12 @@ public class ConnectivityService extends IConnectivityManager.Stub
        ensureRunningOnConnectivityServiceThread();
        ensureRunningOnConnectivityServiceThread();


        final IConnectivityDiagnosticsCallback cb = cbInfo.mCb;
        final IConnectivityDiagnosticsCallback cb = cbInfo.mCb;
        final IBinder iCb = cb.asBinder();
        final NetworkRequestInfo nri = cbInfo.mRequestInfo;
        final NetworkRequestInfo nri = cbInfo.mRequestInfo;


        // This means that the client registered the same callback multiple times. Do
        // This means that the client registered the same callback multiple times. Do
        // not override the previous entry, and exit silently.
        // not override the previous entry, and exit silently.
        if (mConnectivityDiagnosticsCallbacks.containsKey(cb)) {
        if (mConnectivityDiagnosticsCallbacks.containsKey(iCb)) {
            if (VDBG) log("Diagnostics callback is already registered");
            if (VDBG) log("Diagnostics callback is already registered");


            // Decrement the reference count for this NetworkRequestInfo. The reference count is
            // Decrement the reference count for this NetworkRequestInfo. The reference count is
@@ -7849,10 +7850,10 @@ public class ConnectivityService extends IConnectivityManager.Stub
            return;
            return;
        }
        }


        mConnectivityDiagnosticsCallbacks.put(cb, cbInfo);
        mConnectivityDiagnosticsCallbacks.put(iCb, cbInfo);


        try {
        try {
            cb.asBinder().linkToDeath(cbInfo, 0);
            iCb.linkToDeath(cbInfo, 0);
        } catch (RemoteException e) {
        } catch (RemoteException e) {
            cbInfo.binderDied();
            cbInfo.binderDied();
            return;
            return;
@@ -7889,13 +7890,14 @@ public class ConnectivityService extends IConnectivityManager.Stub
    private void handleUnregisterConnectivityDiagnosticsCallback(
    private void handleUnregisterConnectivityDiagnosticsCallback(
            @NonNull IConnectivityDiagnosticsCallback cb, int uid) {
            @NonNull IConnectivityDiagnosticsCallback cb, int uid) {
        ensureRunningOnConnectivityServiceThread();
        ensureRunningOnConnectivityServiceThread();
        final IBinder iCb = cb.asBinder();


        if (!mConnectivityDiagnosticsCallbacks.containsKey(cb)) {
        if (!mConnectivityDiagnosticsCallbacks.containsKey(iCb)) {
            if (VDBG) log("Removing diagnostics callback that is not currently registered");
            if (VDBG) log("Removing diagnostics callback that is not currently registered");
            return;
            return;
        }
        }


        final NetworkRequestInfo nri = mConnectivityDiagnosticsCallbacks.get(cb).mRequestInfo;
        final NetworkRequestInfo nri = mConnectivityDiagnosticsCallbacks.get(iCb).mRequestInfo;


        if (uid != nri.mUid) {
        if (uid != nri.mUid) {
            if (VDBG) loge("Different uid than registrant attempting to unregister cb");
            if (VDBG) loge("Different uid than registrant attempting to unregister cb");
@@ -7907,7 +7909,9 @@ public class ConnectivityService extends IConnectivityManager.Stub
        // enforceRequestCountLimit().
        // enforceRequestCountLimit().
        decrementNetworkRequestPerUidCount(nri);
        decrementNetworkRequestPerUidCount(nri);


        cb.asBinder().unlinkToDeath(mConnectivityDiagnosticsCallbacks.remove(cb), 0);
        final ConnectivityDiagnosticsCallbackInfo cbInfo =
                mConnectivityDiagnosticsCallbacks.remove(iCb);
        iCb.unlinkToDeath(cbInfo, 0);
    }
    }


    private void handleNetworkTestedWithExtras(
    private void handleNetworkTestedWithExtras(
@@ -7982,14 +7986,14 @@ public class ConnectivityService extends IConnectivityManager.Stub
    private List<IConnectivityDiagnosticsCallback> getMatchingPermissionedCallbacks(
    private List<IConnectivityDiagnosticsCallback> getMatchingPermissionedCallbacks(
            @NonNull NetworkAgentInfo nai) {
            @NonNull NetworkAgentInfo nai) {
        final List<IConnectivityDiagnosticsCallback> results = new ArrayList<>();
        final List<IConnectivityDiagnosticsCallback> results = new ArrayList<>();
        for (Entry<IConnectivityDiagnosticsCallback, ConnectivityDiagnosticsCallbackInfo> entry :
        for (Entry<IBinder, ConnectivityDiagnosticsCallbackInfo> entry :
                mConnectivityDiagnosticsCallbacks.entrySet()) {
                mConnectivityDiagnosticsCallbacks.entrySet()) {
            final ConnectivityDiagnosticsCallbackInfo cbInfo = entry.getValue();
            final ConnectivityDiagnosticsCallbackInfo cbInfo = entry.getValue();
            final NetworkRequestInfo nri = cbInfo.mRequestInfo;
            final NetworkRequestInfo nri = cbInfo.mRequestInfo;
            if (nai.satisfies(nri.request)) {
            if (nai.satisfies(nri.request)) {
                if (checkConnectivityDiagnosticsPermissions(
                if (checkConnectivityDiagnosticsPermissions(
                        nri.mPid, nri.mUid, nai, cbInfo.mCallingPackageName)) {
                        nri.mPid, nri.mUid, nai, cbInfo.mCallingPackageName)) {
                    results.add(entry.getKey());
                    results.add(entry.getValue().mCb);
                }
                }
            }
            }
        }
        }
+4 −12
Original line number Original line Diff line number Diff line
@@ -6750,16 +6750,12 @@ public class ConnectivityServiceTest {


        verify(mIBinder).linkToDeath(any(ConnectivityDiagnosticsCallbackInfo.class), anyInt());
        verify(mIBinder).linkToDeath(any(ConnectivityDiagnosticsCallbackInfo.class), anyInt());
        verify(mConnectivityDiagnosticsCallback).asBinder();
        verify(mConnectivityDiagnosticsCallback).asBinder();
        assertTrue(
        assertTrue(mService.mConnectivityDiagnosticsCallbacks.containsKey(mIBinder));
                mService.mConnectivityDiagnosticsCallbacks.containsKey(
                        mConnectivityDiagnosticsCallback));


        mService.unregisterConnectivityDiagnosticsCallback(mConnectivityDiagnosticsCallback);
        mService.unregisterConnectivityDiagnosticsCallback(mConnectivityDiagnosticsCallback);
        verify(mIBinder, timeout(TIMEOUT_MS))
        verify(mIBinder, timeout(TIMEOUT_MS))
                .unlinkToDeath(any(ConnectivityDiagnosticsCallbackInfo.class), anyInt());
                .unlinkToDeath(any(ConnectivityDiagnosticsCallbackInfo.class), anyInt());
        assertFalse(
        assertFalse(mService.mConnectivityDiagnosticsCallbacks.containsKey(mIBinder));
                mService.mConnectivityDiagnosticsCallbacks.containsKey(
                        mConnectivityDiagnosticsCallback));
        verify(mConnectivityDiagnosticsCallback, atLeastOnce()).asBinder();
        verify(mConnectivityDiagnosticsCallback, atLeastOnce()).asBinder();
    }
    }


@@ -6777,9 +6773,7 @@ public class ConnectivityServiceTest {


        verify(mIBinder).linkToDeath(any(ConnectivityDiagnosticsCallbackInfo.class), anyInt());
        verify(mIBinder).linkToDeath(any(ConnectivityDiagnosticsCallbackInfo.class), anyInt());
        verify(mConnectivityDiagnosticsCallback).asBinder();
        verify(mConnectivityDiagnosticsCallback).asBinder();
        assertTrue(
        assertTrue(mService.mConnectivityDiagnosticsCallbacks.containsKey(mIBinder));
                mService.mConnectivityDiagnosticsCallbacks.containsKey(
                        mConnectivityDiagnosticsCallback));


        // Register the same callback again
        // Register the same callback again
        mService.registerConnectivityDiagnosticsCallback(
        mService.registerConnectivityDiagnosticsCallback(
@@ -6788,9 +6782,7 @@ public class ConnectivityServiceTest {
        // Block until all other events are done processing.
        // Block until all other events are done processing.
        HandlerUtilsKt.waitForIdle(mCsHandlerThread, TIMEOUT_MS);
        HandlerUtilsKt.waitForIdle(mCsHandlerThread, TIMEOUT_MS);


        assertTrue(
        assertTrue(mService.mConnectivityDiagnosticsCallbacks.containsKey(mIBinder));
                mService.mConnectivityDiagnosticsCallbacks.containsKey(
                        mConnectivityDiagnosticsCallback));
    }
    }


    @Test
    @Test