Loading core/java/android/net/ConnectivityManager.java +3 −17 Original line number Diff line number Diff line Loading @@ -2708,18 +2708,12 @@ public class ConnectivityManager { public static final int CALLBACK_CAP_CHANGED = BASE + 6; /** @hide */ public static final int CALLBACK_IP_CHANGED = BASE + 7; // TODO: consider deleting CALLBACK_RELEASED and shifting following enum codes down by 1. /** @hide */ public static final int CALLBACK_RELEASED = BASE + 8; // TODO: consider deleting CALLBACK_EXIT and shifting following enum codes down by 1. /** @hide */ public static final int CALLBACK_EXIT = BASE + 9; /** @hide obj = NetworkCapabilities, arg1 = seq number */ private static final int EXPIRE_LEGACY_REQUEST = BASE + 10; private static final int EXPIRE_LEGACY_REQUEST = BASE + 8; /** @hide */ public static final int CALLBACK_SUSPENDED = BASE + 11; public static final int CALLBACK_SUSPENDED = BASE + 9; /** @hide */ public static final int CALLBACK_RESUMED = BASE + 12; public static final int CALLBACK_RESUMED = BASE + 10; /** @hide */ public static String getCallbackName(int whichCallback) { Loading @@ -2731,8 +2725,6 @@ public class ConnectivityManager { case CALLBACK_UNAVAIL: return "CALLBACK_UNAVAIL"; case CALLBACK_CAP_CHANGED: return "CALLBACK_CAP_CHANGED"; case CALLBACK_IP_CHANGED: return "CALLBACK_IP_CHANGED"; case CALLBACK_RELEASED: return "CALLBACK_RELEASED"; case CALLBACK_EXIT: return "CALLBACK_EXIT"; case EXPIRE_LEGACY_REQUEST: return "EXPIRE_LEGACY_REQUEST"; case CALLBACK_SUSPENDED: return "CALLBACK_SUSPENDED"; case CALLBACK_RESUMED: return "CALLBACK_RESUMED"; Loading Loading @@ -2826,12 +2818,6 @@ public class ConnectivityManager { } break; } case CALLBACK_RELEASED: { break; } case CALLBACK_EXIT: { break; } case EXPIRE_LEGACY_REQUEST: { expireRequest((NetworkCapabilities)message.obj, message.arg1); break; Loading services/core/java/com/android/server/ConnectivityService.java +34 −24 Original line number Diff line number Diff line Loading @@ -93,6 +93,7 @@ import android.os.Looper; import android.os.Message; import android.os.Messenger; import android.os.ParcelFileDescriptor; import android.os.Parcelable; import android.os.PowerManager; import android.os.Process; import android.os.RemoteException; Loading Loading @@ -2550,25 +2551,32 @@ public class ConnectivityService extends IConnectivityManager.Stub } private void handleTimedOutNetworkRequest(final NetworkRequestInfo nri) { if (mNetworkRequests.get(nri.request) != null && mNetworkForRequestId.get( nri.request.requestId) == null) { handleRemoveNetworkRequest(nri, ConnectivityManager.CALLBACK_UNAVAIL); if (mNetworkRequests.get(nri.request) == null) { return; } if (mNetworkForRequestId.get(nri.request.requestId) != null) { return; } private void handleReleaseNetworkRequest(NetworkRequest request, int callingUid) { final NetworkRequestInfo nri = getNriForAppRequest( request, callingUid, "release NetworkRequest"); if (nri != null) { handleRemoveNetworkRequest(nri, ConnectivityManager.CALLBACK_RELEASED); if (VDBG || (DBG && nri.request.isRequest())) { log("releasing " + nri.request + " (timeout)"); } handleRemoveNetworkRequest(nri); callCallbackForRequest(nri, null, ConnectivityManager.CALLBACK_UNAVAIL, 0); } private void handleRemoveNetworkRequest(final NetworkRequestInfo nri, final int whichCallback) { final String logCallbackType = ConnectivityManager.getCallbackName(whichCallback); private void handleReleaseNetworkRequest(NetworkRequest request, int callingUid) { final NetworkRequestInfo nri = getNriForAppRequest(request, callingUid, "release NetworkRequest"); if (nri == null) { return; } if (VDBG || (DBG && nri.request.isRequest())) { log("releasing " + nri.request + " (" + logCallbackType + ")"); log("releasing " + nri.request + " (release request)"); } handleRemoveNetworkRequest(nri); } private void handleRemoveNetworkRequest(final NetworkRequestInfo nri) { nri.unlinkDeathRecipient(); mNetworkRequests.remove(nri.request); synchronized (mUidToNetworkRequestCount) { Loading Loading @@ -2664,7 +2672,6 @@ public class ConnectivityService extends IConnectivityManager.Stub } } } callCallbackForRequest(nri, null, whichCallback, 0); } @Override Loading Loading @@ -4723,16 +4730,17 @@ public class ConnectivityService extends IConnectivityManager.Stub releasePendingNetworkRequestWithDelay(pendingIntent); } private void callCallbackForRequest(NetworkRequestInfo nri, private static void callCallbackForRequest(NetworkRequestInfo nri, NetworkAgentInfo networkAgent, int notificationType, int arg1) { if (nri.messenger == null) return; // Default request has no msgr if (nri.messenger == null) { return; // Default request has no msgr } Bundle bundle = new Bundle(); bundle.putParcelable(NetworkRequest.class.getSimpleName(), new NetworkRequest(nri.request)); // TODO: check if defensive copies of data is needed. putParcelable(bundle, new NetworkRequest(nri.request)); Message msg = Message.obtain(); if (notificationType != ConnectivityManager.CALLBACK_UNAVAIL && notificationType != ConnectivityManager.CALLBACK_RELEASED) { bundle.putParcelable(Network.class.getSimpleName(), networkAgent.network); if (notificationType != ConnectivityManager.CALLBACK_UNAVAIL) { putParcelable(bundle, networkAgent.network); } switch (notificationType) { case ConnectivityManager.CALLBACK_LOSING: { Loading @@ -4740,13 +4748,11 @@ public class ConnectivityService extends IConnectivityManager.Stub break; } case ConnectivityManager.CALLBACK_CAP_CHANGED: { bundle.putParcelable(NetworkCapabilities.class.getSimpleName(), new NetworkCapabilities(networkAgent.networkCapabilities)); putParcelable(bundle, new NetworkCapabilities(networkAgent.networkCapabilities)); break; } case ConnectivityManager.CALLBACK_IP_CHANGED: { bundle.putParcelable(LinkProperties.class.getSimpleName(), new LinkProperties(networkAgent.linkProperties)); putParcelable(bundle, new LinkProperties(networkAgent.linkProperties)); break; } } Loading @@ -4764,6 +4770,10 @@ public class ConnectivityService extends IConnectivityManager.Stub } } private static <T extends Parcelable> void putParcelable(Bundle bundle, T t) { bundle.putParcelable(t.getClass().getSimpleName(), t); } private void teardownUnneededNetwork(NetworkAgentInfo nai) { if (nai.numRequestNetworkRequests() != 0) { for (int i = 0; i < nai.numNetworkRequests(); i++) { Loading Loading
core/java/android/net/ConnectivityManager.java +3 −17 Original line number Diff line number Diff line Loading @@ -2708,18 +2708,12 @@ public class ConnectivityManager { public static final int CALLBACK_CAP_CHANGED = BASE + 6; /** @hide */ public static final int CALLBACK_IP_CHANGED = BASE + 7; // TODO: consider deleting CALLBACK_RELEASED and shifting following enum codes down by 1. /** @hide */ public static final int CALLBACK_RELEASED = BASE + 8; // TODO: consider deleting CALLBACK_EXIT and shifting following enum codes down by 1. /** @hide */ public static final int CALLBACK_EXIT = BASE + 9; /** @hide obj = NetworkCapabilities, arg1 = seq number */ private static final int EXPIRE_LEGACY_REQUEST = BASE + 10; private static final int EXPIRE_LEGACY_REQUEST = BASE + 8; /** @hide */ public static final int CALLBACK_SUSPENDED = BASE + 11; public static final int CALLBACK_SUSPENDED = BASE + 9; /** @hide */ public static final int CALLBACK_RESUMED = BASE + 12; public static final int CALLBACK_RESUMED = BASE + 10; /** @hide */ public static String getCallbackName(int whichCallback) { Loading @@ -2731,8 +2725,6 @@ public class ConnectivityManager { case CALLBACK_UNAVAIL: return "CALLBACK_UNAVAIL"; case CALLBACK_CAP_CHANGED: return "CALLBACK_CAP_CHANGED"; case CALLBACK_IP_CHANGED: return "CALLBACK_IP_CHANGED"; case CALLBACK_RELEASED: return "CALLBACK_RELEASED"; case CALLBACK_EXIT: return "CALLBACK_EXIT"; case EXPIRE_LEGACY_REQUEST: return "EXPIRE_LEGACY_REQUEST"; case CALLBACK_SUSPENDED: return "CALLBACK_SUSPENDED"; case CALLBACK_RESUMED: return "CALLBACK_RESUMED"; Loading Loading @@ -2826,12 +2818,6 @@ public class ConnectivityManager { } break; } case CALLBACK_RELEASED: { break; } case CALLBACK_EXIT: { break; } case EXPIRE_LEGACY_REQUEST: { expireRequest((NetworkCapabilities)message.obj, message.arg1); break; Loading
services/core/java/com/android/server/ConnectivityService.java +34 −24 Original line number Diff line number Diff line Loading @@ -93,6 +93,7 @@ import android.os.Looper; import android.os.Message; import android.os.Messenger; import android.os.ParcelFileDescriptor; import android.os.Parcelable; import android.os.PowerManager; import android.os.Process; import android.os.RemoteException; Loading Loading @@ -2550,25 +2551,32 @@ public class ConnectivityService extends IConnectivityManager.Stub } private void handleTimedOutNetworkRequest(final NetworkRequestInfo nri) { if (mNetworkRequests.get(nri.request) != null && mNetworkForRequestId.get( nri.request.requestId) == null) { handleRemoveNetworkRequest(nri, ConnectivityManager.CALLBACK_UNAVAIL); if (mNetworkRequests.get(nri.request) == null) { return; } if (mNetworkForRequestId.get(nri.request.requestId) != null) { return; } private void handleReleaseNetworkRequest(NetworkRequest request, int callingUid) { final NetworkRequestInfo nri = getNriForAppRequest( request, callingUid, "release NetworkRequest"); if (nri != null) { handleRemoveNetworkRequest(nri, ConnectivityManager.CALLBACK_RELEASED); if (VDBG || (DBG && nri.request.isRequest())) { log("releasing " + nri.request + " (timeout)"); } handleRemoveNetworkRequest(nri); callCallbackForRequest(nri, null, ConnectivityManager.CALLBACK_UNAVAIL, 0); } private void handleRemoveNetworkRequest(final NetworkRequestInfo nri, final int whichCallback) { final String logCallbackType = ConnectivityManager.getCallbackName(whichCallback); private void handleReleaseNetworkRequest(NetworkRequest request, int callingUid) { final NetworkRequestInfo nri = getNriForAppRequest(request, callingUid, "release NetworkRequest"); if (nri == null) { return; } if (VDBG || (DBG && nri.request.isRequest())) { log("releasing " + nri.request + " (" + logCallbackType + ")"); log("releasing " + nri.request + " (release request)"); } handleRemoveNetworkRequest(nri); } private void handleRemoveNetworkRequest(final NetworkRequestInfo nri) { nri.unlinkDeathRecipient(); mNetworkRequests.remove(nri.request); synchronized (mUidToNetworkRequestCount) { Loading Loading @@ -2664,7 +2672,6 @@ public class ConnectivityService extends IConnectivityManager.Stub } } } callCallbackForRequest(nri, null, whichCallback, 0); } @Override Loading Loading @@ -4723,16 +4730,17 @@ public class ConnectivityService extends IConnectivityManager.Stub releasePendingNetworkRequestWithDelay(pendingIntent); } private void callCallbackForRequest(NetworkRequestInfo nri, private static void callCallbackForRequest(NetworkRequestInfo nri, NetworkAgentInfo networkAgent, int notificationType, int arg1) { if (nri.messenger == null) return; // Default request has no msgr if (nri.messenger == null) { return; // Default request has no msgr } Bundle bundle = new Bundle(); bundle.putParcelable(NetworkRequest.class.getSimpleName(), new NetworkRequest(nri.request)); // TODO: check if defensive copies of data is needed. putParcelable(bundle, new NetworkRequest(nri.request)); Message msg = Message.obtain(); if (notificationType != ConnectivityManager.CALLBACK_UNAVAIL && notificationType != ConnectivityManager.CALLBACK_RELEASED) { bundle.putParcelable(Network.class.getSimpleName(), networkAgent.network); if (notificationType != ConnectivityManager.CALLBACK_UNAVAIL) { putParcelable(bundle, networkAgent.network); } switch (notificationType) { case ConnectivityManager.CALLBACK_LOSING: { Loading @@ -4740,13 +4748,11 @@ public class ConnectivityService extends IConnectivityManager.Stub break; } case ConnectivityManager.CALLBACK_CAP_CHANGED: { bundle.putParcelable(NetworkCapabilities.class.getSimpleName(), new NetworkCapabilities(networkAgent.networkCapabilities)); putParcelable(bundle, new NetworkCapabilities(networkAgent.networkCapabilities)); break; } case ConnectivityManager.CALLBACK_IP_CHANGED: { bundle.putParcelable(LinkProperties.class.getSimpleName(), new LinkProperties(networkAgent.linkProperties)); putParcelable(bundle, new LinkProperties(networkAgent.linkProperties)); break; } } Loading @@ -4764,6 +4770,10 @@ public class ConnectivityService extends IConnectivityManager.Stub } } private static <T extends Parcelable> void putParcelable(Bundle bundle, T t) { bundle.putParcelable(t.getClass().getSimpleName(), t); } private void teardownUnneededNetwork(NetworkAgentInfo nai) { if (nai.numRequestNetworkRequests() != 0) { for (int i = 0; i < nai.numNetworkRequests(); i++) { Loading