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) {
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";
}
break;
}
- case CALLBACK_RELEASED: {
- break;
- }
- case CALLBACK_EXIT: {
- break;
- }
case EXPIRE_LEGACY_REQUEST: {
expireRequest((NetworkCapabilities)message.obj, message.arg1);
break;
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;
}
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;
}
+ if (VDBG || (DBG && nri.request.isRequest())) {
+ log("releasing " + nri.request + " (timeout)");
+ }
+ handleRemoveNetworkRequest(nri);
+ callCallbackForRequest(nri, null, ConnectivityManager.CALLBACK_UNAVAIL, 0);
}
private void handleReleaseNetworkRequest(NetworkRequest request, int callingUid) {
- final NetworkRequestInfo nri = getNriForAppRequest(
- request, callingUid, "release NetworkRequest");
- if (nri != null) {
- handleRemoveNetworkRequest(nri, ConnectivityManager.CALLBACK_RELEASED);
+ final NetworkRequestInfo nri =
+ getNriForAppRequest(request, callingUid, "release NetworkRequest");
+ if (nri == null) {
+ return;
}
- }
-
- private void handleRemoveNetworkRequest(final NetworkRequestInfo nri, final int whichCallback) {
- final String logCallbackType = ConnectivityManager.getCallbackName(whichCallback);
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) {
}
}
}
- callCallbackForRequest(nri, null, whichCallback, 0);
}
@Override
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: {
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;
}
}
}
}
+ 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++) {