16bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt/* 26bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt * Copyright (C) 2008 The Android Open Source Project 36bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt * 46bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt * Licensed under the Apache License, Version 2.0 (the "License"); 56bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt * you may not use this file except in compliance with the License. 66bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt * You may obtain a copy of the License at 76bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt * 86bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt * http://www.apache.org/licenses/LICENSE-2.0 96bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt * 106bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt * Unless required by applicable law or agreed to in writing, software 116bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt * distributed under the License is distributed on an "AS IS" BASIS, 126bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 136bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt * See the License for the specific language governing permissions and 146bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt * limitations under the License. 156bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt */ 166bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 176bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltpackage com.android.internal.telephony.mocks; 186bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 196bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport static android.Manifest.permission.RECEIVE_DATA_ACTIVITY_CHANGE; 206bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport static android.net.ConnectivityManager.CONNECTIVITY_ACTION; 216bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport static android.net.ConnectivityManager.NETID_UNSET; 226bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport static android.net.ConnectivityManager.TYPE_NONE; 236bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport static android.net.ConnectivityManager.TYPE_VPN; 246bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport static android.net.ConnectivityManager.getNetworkTypeName; 256bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport static android.net.ConnectivityManager.isNetworkTypeValid; 266bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport static android.net.NetworkCapabilities.NET_CAPABILITY_CAPTIVE_PORTAL; 276bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport static android.net.NetworkCapabilities.NET_CAPABILITY_INTERNET; 286bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport static android.net.NetworkCapabilities.NET_CAPABILITY_NOT_METERED; 296bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport static android.net.NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED; 306bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport static android.net.NetworkCapabilities.NET_CAPABILITY_VALIDATED; 316bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport static android.net.NetworkPolicyManager.RULE_ALLOW_ALL; 326bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport static android.net.NetworkPolicyManager.RULE_REJECT_ALL; 336bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport static android.net.NetworkPolicyManager.RULE_REJECT_METERED; 346bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 356bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport android.annotation.Nullable; 366bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport android.app.AlarmManager; 376bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport android.app.BroadcastOptions; 386bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport android.app.Notification; 396bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport android.app.NotificationManager; 406bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport android.app.PendingIntent; 416bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport android.content.BroadcastReceiver; 426bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport android.content.ContentResolver; 436bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport android.content.Context; 446bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport android.content.Intent; 456bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport android.content.IntentFilter; 466bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport android.content.pm.PackageManager; 476bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport android.content.res.Configuration; 486bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport android.content.res.Resources; 496bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport android.database.ContentObserver; 506bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport android.net.ConnectivityManager; 516bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport android.net.ConnectivityManager.PacketKeepalive; 526bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport android.net.IConnectivityManager; 536bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport android.net.INetworkManagementEventObserver; 546bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport android.net.INetworkPolicyListener; 556bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport android.net.INetworkPolicyManager; 566bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport android.net.INetworkStatsService; 576bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport android.net.LinkProperties; 586bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport android.net.LinkProperties.CompareResult; 596bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport android.net.Network; 606bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport android.net.NetworkAgent; 616bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport android.net.NetworkCapabilities; 626bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport android.net.NetworkConfig; 636bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport android.net.NetworkInfo; 646bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport android.net.NetworkInfo.DetailedState; 656bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport android.net.NetworkMisc; 666bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport android.net.NetworkQuotaInfo; 676bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport android.net.NetworkRequest; 686bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport android.net.NetworkState; 696bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport android.net.NetworkUtils; 706bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport android.net.Proxy; 716bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport android.net.ProxyInfo; 726bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport android.net.RouteInfo; 736bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport android.net.UidRange; 746bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport android.net.Uri; 756bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport android.os.Binder; 766bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport android.os.Build; 776bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport android.os.Bundle; 786bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport android.os.FileUtils; 796bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport android.os.Handler; 806bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport android.os.HandlerThread; 816bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport android.os.IBinder; 826bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport android.os.INetworkManagementService; 836bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport android.os.Looper; 846bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport android.os.Message; 856bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport android.os.Messenger; 866bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport android.os.ParcelFileDescriptor; 876bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport android.os.PowerManager; 886bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport android.os.Process; 896bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport android.os.RemoteException; 906bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport android.os.ResultReceiver; 916bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport android.os.SystemClock; 926bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport android.os.SystemProperties; 936bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport android.os.UserHandle; 946bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport android.os.UserManager; 956bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport android.provider.Settings; 966bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport android.security.Credentials; 976bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport android.security.KeyStore; 986bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport android.telephony.TelephonyManager; 996bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport android.text.TextUtils; 1006bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport android.util.LocalLog; 1016bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport android.util.LocalLog.ReadOnlyLocalLog; 1026bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport android.util.Pair; 1036bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport android.util.Slog; 1046bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport android.util.SparseArray; 1056bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport android.util.SparseBooleanArray; 1066bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport android.util.SparseIntArray; 1076bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport android.util.Xml; 1086bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 1096bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport com.android.internal.R; 1106bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport com.android.internal.annotations.GuardedBy; 1116bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport com.android.internal.annotations.VisibleForTesting; 1126bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport com.android.internal.net.LegacyVpnInfo; 1136bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport com.android.internal.net.VpnConfig; 1146bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport com.android.internal.net.VpnInfo; 1156bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport com.android.internal.net.VpnProfile; 1166bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport com.android.internal.util.AsyncChannel; 1176bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport com.android.server.connectivity.NetworkAgentInfo; 1186bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport com.android.server.connectivity.NetworkMonitor; 1196bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 1206bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport java.io.File; 1216bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport java.io.FileDescriptor; 1226bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport java.io.FileNotFoundException; 1236bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport java.io.FileReader; 1246bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport java.io.IOException; 1256bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport java.io.PrintWriter; 1266bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport java.net.Inet4Address; 1276bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport java.net.InetAddress; 1286bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport java.net.UnknownHostException; 1296bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport java.util.ArrayDeque; 1306bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport java.util.ArrayList; 1316bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport java.util.Arrays; 1326bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport java.util.Collection; 1336bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport java.util.HashMap; 1346bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport java.util.HashSet; 1356bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport java.util.SortedSet; 1366bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport java.util.TreeSet; 1376bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport java.util.Iterator; 1386bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport java.util.List; 1396bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport java.util.Map; 1406bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport java.util.Objects; 1416bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport java.util.concurrent.atomic.AtomicInteger; 1426bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 1436bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt/** 1446bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt * @hide 1456bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt */ 1466bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltpublic class ConnectivityServiceMock extends IConnectivityManager.Stub 1476bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt implements PendingIntent.OnFinished { 1486bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt private static final String TAG = "ConnectivityServiceMock"; 1496bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt private static final boolean DBG = true; 1506bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt private static final boolean VDBG = true; 1516bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 1526bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt /** 1536bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt * used internally when registering NetworkFactories 1546bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt * obj = NetworkFactoryInfo 1556bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt */ 1566bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt private static final int EVENT_REGISTER_NETWORK_FACTORY = 17; 1576bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 1586bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt /** 1596bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt * used internally when registering NetworkAgents 1606bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt * obj = Messenger 1616bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt */ 1626bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt private static final int EVENT_REGISTER_NETWORK_AGENT = 18; 1636bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 1646bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt /** 1656bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt * used to add a network request 1666bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt * includes a NetworkRequestInfo 1676bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt */ 1686bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt private static final int EVENT_REGISTER_NETWORK_REQUEST = 19; 1696bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 1706bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt /** 1716bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt * used to add a network listener - no request 1726bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt * includes a NetworkRequestInfo 1736bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt */ 1746bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt private static final int EVENT_REGISTER_NETWORK_LISTENER = 21; 1756bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 1766bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt /** 1776bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt * used to remove a network request, either a listener or a real request 1786bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt * arg1 = UID of caller 1796bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt * obj = NetworkRequest 1806bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt */ 1816bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt private static final int EVENT_RELEASE_NETWORK_REQUEST = 22; 1826bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 1836bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt /** 1846bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt * used internally when registering NetworkFactories 1856bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt * obj = Messenger 1866bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt */ 1876bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt private static final int EVENT_UNREGISTER_NETWORK_FACTORY = 23; 1886bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 1896bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 1906bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt private final HandlerThread mHandlerThread; 1916bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt /** Handler used for internal events. */ 1926bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt final private InternalHandler mHandler; 1936bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt /** Handler used for incoming {@link NetworkStateTracker} events. */ 1946bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt final private NetworkStateTrackerHandler mTrackerHandler; 1956bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 1966bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt final private Context mContext; 1976bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 1986bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt public ConnectivityServiceMock(Context context) { 1996bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt if (DBG) log("starting up"); 2006bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 2016bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt mContext = context; 2026bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt mHandlerThread = new HandlerThread("ConnectivityServiceMock"); 2036bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt mHandlerThread.start(); 2046bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt mHandler = new InternalHandler(mHandlerThread.getLooper()); 2056bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt mTrackerHandler = new NetworkStateTrackerHandler(mHandlerThread.getLooper()); 2066bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 2076bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 2086bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt public void die() { 2096bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // clean up threads/handlers 2106bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 2116bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 2126bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt private class InternalHandler extends Handler { 2136bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt public InternalHandler(Looper looper) { 2146bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt super(looper); 2156bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 2166bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 2176bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt @Override 2186bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt public void handleMessage(Message msg) { 2196bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt switch (msg.what) { 2206bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt case EVENT_REGISTER_NETWORK_FACTORY: { 2216bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt handleRegisterNetworkFactory((NetworkFactoryInfo)msg.obj); 2226bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt break; 2236bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 2246bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt case EVENT_UNREGISTER_NETWORK_FACTORY: { 2256bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt handleUnregisterNetworkFactory((Messenger)msg.obj); 2266bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt break; 2276bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 2286bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt case EVENT_REGISTER_NETWORK_AGENT: { 2296bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt handleRegisterNetworkAgent((NetworkAgentInfo)msg.obj); 2306bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt break; 2316bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 2326bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt case EVENT_REGISTER_NETWORK_REQUEST: 2336bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt case EVENT_REGISTER_NETWORK_LISTENER: { 2346bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt handleRegisterNetworkRequest((NetworkRequestInfo) msg.obj); 2356bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt break; 2366bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 2376bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt case EVENT_RELEASE_NETWORK_REQUEST: { 2386bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt handleReleaseNetworkRequest((NetworkRequest) msg.obj, msg.arg1); 2396bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt break; 2406bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 2416bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 2426bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 2436bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 2446bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 2456bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt private class NetworkStateTrackerHandler extends Handler { 2466bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt public NetworkStateTrackerHandler(Looper looper) { 2476bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt super(looper); 2486bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 2496bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 2506bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt @Override 2516bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt public void handleMessage(Message msg) { 2526bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt NetworkInfo info; 2536bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt switch (msg.what) { 2546bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt case AsyncChannel.CMD_CHANNEL_HALF_CONNECTED: { 2556bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt handleAsyncChannelHalfConnect(msg); 2566bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt break; 2576bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 2586bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt case AsyncChannel.CMD_CHANNEL_DISCONNECT: { 2596bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt NetworkAgentInfo nai = mNetworkAgentInfos.get(msg.replyTo); 2606bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt if (nai != null) nai.asyncChannel.disconnect(); 2616bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt break; 2626bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 2636bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt case AsyncChannel.CMD_CHANNEL_DISCONNECTED: { 2646bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt handleAsyncChannelDisconnected(msg); 2656bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt break; 2666bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 2676bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 2686bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 2696bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 2706bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 2716bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt private boolean isRequest(NetworkRequest request) { 2726bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt return mNetworkRequests.get(request).isRequest; 2736bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 2746bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 2756bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt private void handleAsyncChannelHalfConnect(Message msg) { 2766bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt AsyncChannel ac = (AsyncChannel) msg.obj; 2776bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt if (mNetworkFactoryInfos.containsKey(msg.replyTo)) { 2786bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt if (msg.arg1 == AsyncChannel.STATUS_SUCCESSFUL) { 2796bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt if (VDBG) log("NetworkFactory connected"); 2806bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // A network factory has connected. Send it all current NetworkRequests. 2816bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt for (NetworkRequestInfo nri : mNetworkRequests.values()) { 2826bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt if (nri.isRequest == false) continue; 2836bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt //NetworkAgentInfo nai = mNetworkForRequestId.get(nri.request.requestId); 2846bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt NetworkAgentInfo nai = null; 2856bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt ac.sendMessage(android.net.NetworkFactory.CMD_REQUEST_NETWORK, 2866bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt (nai != null ? nai.getCurrentScore() : 0), 0, nri.request); 2876bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 2886bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } else { 2896bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt loge("Error connecting NetworkFactory"); 2906bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt mNetworkFactoryInfos.remove(msg.obj); 2916bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 2926bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } else if (mNetworkAgentInfos.containsKey(msg.replyTo)) { 2936bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt if (msg.arg1 == AsyncChannel.STATUS_SUCCESSFUL) { 2946bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt if (VDBG) log("NetworkAgent connected"); 2956bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // A network agent has requested a connection. Establish the connection. 2966bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt mNetworkAgentInfos.get(msg.replyTo).asyncChannel. 2976bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt sendMessage(AsyncChannel.CMD_CHANNEL_FULL_CONNECTION); 2986bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } else { 2996bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt loge("Error connecting NetworkAgent"); 3006bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt NetworkAgentInfo nai = mNetworkAgentInfos.remove(msg.replyTo); 3016bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt //if (nai != null) { 3026bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // final boolean wasDefault = isDefaultNetwork(nai); 3036bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // synchronized (mNetworkForNetId) { 3046bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // mNetworkForNetId.remove(nai.network.netId); 3056bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // mNetIdInUse.delete(nai.network.netId); 3066bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // } 3076bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // // Just in case. 3086bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // mLegacyTypeTracker.remove(nai, wasDefault); 3096bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt //} 3106bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 3116bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 3126bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 3136bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 3146bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt private void handleAsyncChannelDisconnected(Message msg) { 3156bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt NetworkAgentInfo nai = mNetworkAgentInfos.get(msg.replyTo); 3166bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt if (nai != null) { 3176bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt if (DBG) { 3184be10a245ce355d84d70e61cb63d29ed525b478aLorenzo Colitti log(nai.name() + " got DISCONNECTED, was satisfying " + nai.numNetworkRequests()); 3196bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 3206bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // A network agent has disconnected. 3216bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // TODO - if we move the logic to the network agent (have them disconnect 3226bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // because they lost all their requests or because their score isn't good) 3236bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // then they would disconnect organically, report their new state and then 3246bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // disconnect the channel. 3256bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt //if (nai.networkInfo.isConnected()) { 3266bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // nai.networkInfo.setDetailedState(NetworkInfo.DetailedState.DISCONNECTED, 3276bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // null, null); 3286bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt //} 3296bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt //final boolean wasDefault = isDefaultNetwork(nai); 3306bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt //if (wasDefault) { 3316bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // mDefaultInetConditionPublished = 0; 3326bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt //} 3336bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt //notifyIfacesChanged(); 3346bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // TODO - we shouldn't send CALLBACK_LOST to requests that can be satisfied 3356bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // by other networks that are already connected. Perhaps that can be done by 3366bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // sending all CALLBACK_LOST messages (for requests, not listens) at the end 3376bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // of rematchAllNetworksAndRequests 3386bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt //notifyNetworkCallbacks(nai, ConnectivityManager.CALLBACK_LOST); 3396bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt //mKeepaliveTracker.handleStopAllKeepalives(nai, 3406bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // ConnectivityManager.PacketKeepalive.ERROR_INVALID_NETWORK); 3416bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt nai.networkMonitor.sendMessage(NetworkMonitor.CMD_NETWORK_DISCONNECTED); 3426bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt mNetworkAgentInfos.remove(msg.replyTo); 3436bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt //updateClat(null, nai.linkProperties, nai); 3446bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt //synchronized (mNetworkForNetId) { 3456bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // // Remove the NetworkAgent, but don't mark the netId as 3466bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // // available until we've told netd to delete it below. 3476bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // mNetworkForNetId.remove(nai.network.netId); 3486bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt //} 3496bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // Remove all previously satisfied requests. 3506bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt //for (int i = 0; i < nai.networkRequests.size(); i++) { 3516bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // NetworkRequest request = nai.networkRequests.valueAt(i); 3526bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // NetworkAgentInfo currentNetwork = mNetworkForRequestId.get(request.requestId); 3536bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // if (currentNetwork != null && currentNetwork.network.netId == nai.network.netId) { 3546bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // mNetworkForRequestId.remove(request.requestId); 3556bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // sendUpdatedScoreToFactories(request, 0); 3566bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // } 3576bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt //} 3586bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt //if (nai.networkRequests.get(mDefaultRequest.requestId) != null) { 3596bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // removeDataActivityTracking(nai); 3606bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // notifyLockdownVpn(nai); 3616bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // requestNetworkTransitionWakelock(nai.name()); 3626bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt //} 3636bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt //mLegacyTypeTracker.remove(nai, wasDefault); 3646bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt //rematchAllNetworksAndRequests(null, 0); 3656bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt //if (nai.created) { 3666bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // // Tell netd to clean up the configuration for this network 3676bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // // (routing rules, DNS, etc). 3686bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // // This may be slow as it requires a lot of netd shelling out to ip and 3696bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // // ip[6]tables to flush routes and remove the incoming packet mark rule, so do it 3706bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // // after we've rematched networks with requests which should make a potential 3716bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // // fallback network the default or requested a new network from the 3726bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // // NetworkFactories, so network traffic isn't interrupted for an unnecessarily 3736bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // // long time. 3746bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // try { 3756bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // mNetd.removeNetwork(nai.network.netId); 3766bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // } catch (Exception e) { 3776bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // loge("Exception removing network: " + e); 3786bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // } 3796bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt //} 3806bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt //synchronized (mNetworkForNetId) { 3816bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // mNetIdInUse.delete(nai.network.netId); 3826bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt //} 3836bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } else { 3846bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt NetworkFactoryInfo nfi = mNetworkFactoryInfos.remove(msg.replyTo); 3856bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt if (DBG && nfi != null) log("unregisterNetworkFactory for " + nfi.name); 3866bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 3876bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 3886bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 3896bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt private void log(String str) { 3906bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt Slog.d(TAG, str); 3916bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 3926bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt private void loge(String str) { 3936bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt Slog.e(TAG, str); 3946bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 3956bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 3966bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // NetworkAgentInfo keyed off its connecting messenger 3976bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // TODO - eval if we can reduce the number of lists/hashmaps/sparsearrays 3986bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // NOTE: Only should be accessed on ConnectivityServiceThread, except dump(). 3996bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt private final HashMap<Messenger, NetworkAgentInfo> mNetworkAgentInfos = 4006bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt new HashMap<Messenger, NetworkAgentInfo>(); 4016bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt private final HashMap<Messenger, NetworkFactoryInfo> mNetworkFactoryInfos = 4026bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt new HashMap<Messenger, NetworkFactoryInfo>(); 4036bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt private final HashMap<NetworkRequest, NetworkRequestInfo> mNetworkRequests = 4046bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt new HashMap<NetworkRequest, NetworkRequestInfo>(); 4056bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 4066bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt private static class NetworkFactoryInfo { 4076bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt public final String name; 4086bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt public final Messenger messenger; 4096bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt public final AsyncChannel asyncChannel; 4106bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 4116bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt public NetworkFactoryInfo(String name, Messenger messenger, AsyncChannel asyncChannel) { 4126bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt this.name = name; 4136bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt this.messenger = messenger; 4146bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt this.asyncChannel = asyncChannel; 4156bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 4166bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 4176bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 4186bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt private class NetworkRequestInfo implements IBinder.DeathRecipient { 4196bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt static final boolean REQUEST = true; 4206bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt static final boolean LISTEN = false; 4216bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 4226bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt final NetworkRequest request; 4236bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt final PendingIntent mPendingIntent; 4246bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt boolean mPendingIntentSent; 4256bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt private final IBinder mBinder; 4266bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt final int mPid; 4276bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt final int mUid; 4286bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt final Messenger messenger; 4296bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt final boolean isRequest; 4306bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 4316bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt NetworkRequestInfo(NetworkRequest r, PendingIntent pi, boolean isRequest) { 4326bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt request = r; 4336bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt mPendingIntent = pi; 4346bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt messenger = null; 4356bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt mBinder = null; 4366bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt mPid = getCallingPid(); 4376bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt mUid = getCallingUid(); 4386bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt this.isRequest = isRequest; 4396bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 4406bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 4416bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt NetworkRequestInfo(Messenger m, NetworkRequest r, IBinder binder, boolean isRequest) { 4426bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt super(); 4436bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt messenger = m; 4446bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt request = r; 4456bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt mBinder = binder; 4466bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt mPid = getCallingPid(); 4476bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt mUid = getCallingUid(); 4486bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt this.isRequest = isRequest; 4496bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt mPendingIntent = null; 4506bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 4516bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt try { 4526bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt mBinder.linkToDeath(this, 0); 4536bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } catch (RemoteException e) { 4546bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt binderDied(); 4556bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 4566bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 4576bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 4586bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt void unlinkDeathRecipient() { 4596bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt if (mBinder != null) { 4606bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt mBinder.unlinkToDeath(this, 0); 4616bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 4626bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 4636bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 4646bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt public void binderDied() { 4656bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt log("ConnectivityService NetworkRequestInfo binderDied(" + 4666bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt request + ", " + mBinder + ")"); 4676bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt releaseNetworkRequest(request); 4686bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 4696bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 4706bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt public String toString() { 4716bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt return (isRequest ? "Request" : "Listen") + 4726bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt " from uid/pid:" + mUid + "/" + mPid + 4736bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt " for " + request + 4746bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt (mPendingIntent == null ? "" : " to trigger " + mPendingIntent); 4756bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 4766bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 4776bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 4786bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 4796bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // sequence number of NetworkRequests 4806bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt private int mNextNetworkRequestId = 1; 4816bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt private synchronized int nextNetworkRequestId() { 4826bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt return mNextNetworkRequestId++; 4836bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 4846bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 4856bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt @Override 4866bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt public NetworkInfo getActiveNetworkInfo() { 4876bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt throw new RuntimeException("not implemented"); 4886bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 4896bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 4906bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt @Override 4916bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt public Network getActiveNetwork() { 4926bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt throw new RuntimeException("not implemented"); 4936bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 4946bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 495511b719a26518314300725337f84bdd511e224f2Robin Lee @Override 4968ca2e656bd1143d671e893191b08ff93a4bd2692Jeff Sharkey public Network getActiveNetworkForUid(int uid, boolean ignoreBlocked) { 497511b719a26518314300725337f84bdd511e224f2Robin Lee throw new RuntimeException("not implemented"); 498511b719a26518314300725337f84bdd511e224f2Robin Lee } 499511b719a26518314300725337f84bdd511e224f2Robin Lee 5006bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt public NetworkInfo getActiveNetworkInfoUnfiltered() { 5016bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt throw new RuntimeException("not implemented"); 5026bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 5036bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 5046bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt @Override 5058ca2e656bd1143d671e893191b08ff93a4bd2692Jeff Sharkey public NetworkInfo getActiveNetworkInfoForUid(int uid, boolean ignoreBlocked) { 5066bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt throw new RuntimeException("not implemented"); 5076bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 5086bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 5096bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt @Override 5106bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt public NetworkInfo getNetworkInfo(int networkType) { 5116bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt throw new RuntimeException("not implemented"); 5126bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 5136bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 5146bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt @Override 5158ca2e656bd1143d671e893191b08ff93a4bd2692Jeff Sharkey public NetworkInfo getNetworkInfoForUid(Network network, int uid, boolean ignoreBlocked) { 5166bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt throw new RuntimeException("not implemented"); 5176bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 5186bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 5196bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt @Override 5206bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt public NetworkInfo[] getAllNetworkInfo() { 5216bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt throw new RuntimeException("not implemented"); 5226bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 5236bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 5246bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt @Override 5256bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt public Network getNetworkForType(int networkType) { 5266bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt throw new RuntimeException("not implemented"); 5276bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 5286bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 5296bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt @Override 5306bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt public Network[] getAllNetworks() { 5316bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt throw new RuntimeException("not implemented"); 5326bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 5336bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 5346bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt @Override 5356bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt public NetworkCapabilities[] getDefaultNetworkCapabilitiesForUser(int userId) { 5366bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt throw new RuntimeException("not implemented"); 5376bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 5386bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 5396bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt @Override 5406bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt public boolean isNetworkSupported(int networkType) { 5416bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt throw new RuntimeException("not implemented"); 5426bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 5436bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 5446bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt @Override 5456bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt public LinkProperties getActiveLinkProperties() { 5466bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt throw new RuntimeException("not implemented"); 5476bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 5486bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 5496bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt @Override 5506bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt public LinkProperties getLinkPropertiesForType(int networkType) { 5516bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt throw new RuntimeException("not implemented"); 5526bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 5536bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 5546bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt @Override 5556bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt public LinkProperties getLinkProperties(Network network) { 5566bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt throw new RuntimeException("not implemented"); 5576bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 5586bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 5596bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt @Override 560f0bf1d1994dca3e60635cd342ed56d7b018cece4Erik Kline public void requestLinkProperties(NetworkRequest networkRequest) { 561f0bf1d1994dca3e60635cd342ed56d7b018cece4Erik Kline throw new RuntimeException("not implemented"); 562f0bf1d1994dca3e60635cd342ed56d7b018cece4Erik Kline } 563f0bf1d1994dca3e60635cd342ed56d7b018cece4Erik Kline 564f0bf1d1994dca3e60635cd342ed56d7b018cece4Erik Kline @Override 5656bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt public NetworkCapabilities getNetworkCapabilities(Network network) { 5666bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt throw new RuntimeException("not implemented"); 5676bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 5686bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 5696bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt @Override 570f0bf1d1994dca3e60635cd342ed56d7b018cece4Erik Kline public void requestNetworkCapabilities(NetworkRequest networkRequest) { 571f0bf1d1994dca3e60635cd342ed56d7b018cece4Erik Kline throw new RuntimeException("not implemented"); 572f0bf1d1994dca3e60635cd342ed56d7b018cece4Erik Kline } 573f0bf1d1994dca3e60635cd342ed56d7b018cece4Erik Kline 574f0bf1d1994dca3e60635cd342ed56d7b018cece4Erik Kline @Override 5756bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt public NetworkState[] getAllNetworkState() { 5766bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt throw new RuntimeException("not implemented"); 5776bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 5786bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 5796bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt @Override 5806bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt public NetworkQuotaInfo getActiveNetworkQuotaInfo() { 5816bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt throw new RuntimeException("not implemented"); 5826bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 5836bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 5846bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt @Override 5856bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt public boolean isActiveNetworkMetered() { 5866bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt throw new RuntimeException("not implemented"); 5876bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 5886bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 5896bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt public boolean requestRouteToHostAddress(int networkType, byte[] hostAddress) { 5906bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt throw new RuntimeException("not implemented"); 5916bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 5926bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 5936bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt @Override 5946bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt public int getRestoreDefaultNetworkDelay(int networkType) { 5956bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt throw new RuntimeException("not implemented"); 5966bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 5976bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 5986bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt @Override 5996bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt protected void dump(FileDescriptor fd, PrintWriter writer, String[] args) { 6006bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt throw new RuntimeException("not implemented"); 6016bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 6026bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 6036bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt public void setAcceptUnvalidated(Network network, boolean accept, boolean always) { 6046bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt throw new RuntimeException("not implemented"); 6056bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 6066bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 607c39c5bf3b6b73b5e812d7761af5b5656f55be1f1Lorenzo Colitti public void setAvoidUnvalidated(Network network) { 608c39c5bf3b6b73b5e812d7761af5b5656f55be1f1Lorenzo Colitti throw new RuntimeException("not implemented"); 609c39c5bf3b6b73b5e812d7761af5b5656f55be1f1Lorenzo Colitti } 610c39c5bf3b6b73b5e812d7761af5b5656f55be1f1Lorenzo Colitti 6116bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt public int tether(String iface) { 6126bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt throw new RuntimeException("not implemented"); 6136bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 6146bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 6156bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt public int untether(String iface) { 6166bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt throw new RuntimeException("not implemented"); 6176bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 6186bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 6196bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt public int getLastTetherError(String iface) { 6206bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt throw new RuntimeException("not implemented"); 6216bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 6226bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 6236bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt public String[] getTetherableUsbRegexs() { 6246bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt throw new RuntimeException("not implemented"); 6256bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 6266bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 6276bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt public String[] getTetherableWifiRegexs() { 6286bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt throw new RuntimeException("not implemented"); 6296bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 6306bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 6316bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt public String[] getTetherableBluetoothRegexs() { 6326bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt throw new RuntimeException("not implemented"); 6336bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 6346bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 6356bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt public int setUsbTethering(boolean enable) { 6366bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt throw new RuntimeException("not implemented"); 6376bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 6386bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 6396bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt public String[] getTetherableIfaces() { 6406bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt throw new RuntimeException("not implemented"); 6416bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 6426bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 6436bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt public String[] getTetheredIfaces() { 6446bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt throw new RuntimeException("not implemented"); 6456bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 6466bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 6476bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt public String[] getTetheringErroredIfaces() { 6486bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt throw new RuntimeException("not implemented"); 6496bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 6506bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 6516bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt public String[] getTetheredDhcpRanges() { 6526bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt throw new RuntimeException("not implemented"); 6536bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 6546bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 6556bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt @Override 6566bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt public boolean isTetheringSupported() { 6576bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt throw new RuntimeException("not implemented"); 6586bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 6596bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 6606bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt @Override 6616bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt public void startTethering(int type, ResultReceiver receiver, boolean showProvisioningUi) { 6626bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt throw new RuntimeException("not implemented"); 6636bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 6646bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 6656bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt @Override 6666bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt public void stopTethering(int type) { 6676bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt throw new RuntimeException("not implemented"); 6686bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 6696bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 6706bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 6716bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt public void reportInetCondition(int networkType, int percentage) { 6726bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt throw new RuntimeException("not implemented"); 6736bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 6746bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 6756bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt public void reportNetworkConnectivity(Network network, boolean hasConnectivity) { 6766bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt throw new RuntimeException("not implemented"); 6776bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 6786bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 6796bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt public ProxyInfo getProxyForNetwork(Network network) { 6806bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt throw new RuntimeException("not implemented"); 6816bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 6826bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 6836bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt public void setGlobalProxy(ProxyInfo proxyProperties) { 6846bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt throw new RuntimeException("not implemented"); 6856bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 6866bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 6876bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt public ProxyInfo getGlobalProxy() { 6886bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt throw new RuntimeException("not implemented"); 6896bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 6906bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 6916bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt @Override 6926bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt public boolean prepareVpn(@Nullable String oldPackage, @Nullable String newPackage, 6936bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt int userId) { 6946bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt throw new RuntimeException("not implemented"); 6956bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 6966bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 6976bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt public void setVpnPackageAuthorization(String packageName, int userId, boolean authorized) { 6986bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt throw new RuntimeException("not implemented"); 6996bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 7006bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 7016bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt @Override 7026bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt public ParcelFileDescriptor establishVpn(VpnConfig config) { 7036bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt throw new RuntimeException("not implemented"); 7046bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 7056bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 7066bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt @Override 7076bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt public void startLegacyVpn(VpnProfile profile) { 7086bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt throw new RuntimeException("not implemented"); 7096bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 7106bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 7116bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt @Override 7126bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt public LegacyVpnInfo getLegacyVpnInfo(int userId) { 7136bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt throw new RuntimeException("not implemented"); 7146bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 7156bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 7166bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt @Override 7176bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt public VpnInfo[] getAllVpnInfo() { 7186bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt throw new RuntimeException("not implemented"); 7196bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 7206bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 7216bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt @Override 7226bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt public VpnConfig getVpnConfig(int userId) { 7236bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt throw new RuntimeException("not implemented"); 7246bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 7256bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 7266bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt @Override 7276bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt public boolean updateLockdownVpn() { 7286bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt throw new RuntimeException("not implemented"); 7296bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 7306bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 7316bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt @Override 73292867f07cf5873b840256c52dc9c2ab5d3455416Robin Lee public boolean setAlwaysOnVpnPackage(int userId, String packageName, boolean lockdownEnabled) { 7336bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt throw new RuntimeException("not implemented"); 7346bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 7356bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 7366bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt @Override 7376bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt public String getAlwaysOnVpnPackage(int userId) { 7386bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt throw new RuntimeException("not implemented"); 7396bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 7406bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 7416bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt @Override 7426bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt public int checkMobileProvisioning(int suggestedTimeOutMs) { 7436bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt throw new RuntimeException("not implemented"); 7446bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 7456bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 7466bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt @Override 7476bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt public String getMobileProvisioningUrl() { 7486bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt throw new RuntimeException("not implemented"); 7496bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 7506bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 7516bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt @Override 7526bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt public void setProvisioningNotificationVisible(boolean visible, int networkType, 7536bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt String action) { 7546bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt throw new RuntimeException("not implemented"); 7556bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 7566bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 7576bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt @Override 7586bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt public void setAirplaneMode(boolean enable) { 7596bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt throw new RuntimeException("not implemented"); 7606bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 7616bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 7626bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt @Override 7636bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt public NetworkRequest requestNetwork(NetworkCapabilities networkCapabilities, 7646bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt Messenger messenger, int timeoutMs, IBinder binder, int legacyType) { 7656bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt networkCapabilities = new NetworkCapabilities(networkCapabilities); 7666bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 7676bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt if (timeoutMs < 0 || timeoutMs > ConnectivityManager.MAX_NETWORK_REQUEST_TIMEOUT_MS) { 7686bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt throw new IllegalArgumentException("Bad timeout specified"); 7696bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 7706bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 7716bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt NetworkRequest networkRequest = new NetworkRequest(networkCapabilities, legacyType, 77264fbcce906012e4b429c354ba3a200a6ee410010Lorenzo Colitti nextNetworkRequestId(), NetworkRequest.Type.REQUEST); 77364fbcce906012e4b429c354ba3a200a6ee410010Lorenzo Colitti NetworkRequestInfo nri = new NetworkRequestInfo(messenger, networkRequest, binder, true); 7746bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt if (DBG) log("requestNetwork for " + nri); 7756bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 7766bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt mHandler.sendMessage(mHandler.obtainMessage(EVENT_REGISTER_NETWORK_REQUEST, nri)); 7776bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 7786bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt return networkRequest; 7796bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 7806bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 7816bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt @Override 7826bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt public boolean requestBandwidthUpdate(Network network) { 7836bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt throw new RuntimeException("not implemented"); 7846bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 7856bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 7866bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 7876bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt @Override 7886bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt public NetworkRequest pendingRequestForNetwork(NetworkCapabilities networkCapabilities, 7896bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt PendingIntent operation) { 7906bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt throw new RuntimeException("not implemented"); 7916bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 7926bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 7936bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt @Override 7946bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt public void releasePendingNetworkRequest(PendingIntent operation) { 7956bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt throw new RuntimeException("not implemented"); 7966bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 7976bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 7986bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt @Override 7996bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt public NetworkRequest listenForNetwork(NetworkCapabilities networkCapabilities, 8006bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt Messenger messenger, IBinder binder) { 8016bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt throw new RuntimeException("not implemented"); 8026bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 8036bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 8046bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt @Override 8056bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt public void pendingListenForNetwork(NetworkCapabilities networkCapabilities, 8066bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt PendingIntent operation) { 8076bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt throw new RuntimeException("not implemented"); 8086bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 8096bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 8106bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt @Override 8116bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt public void releaseNetworkRequest(NetworkRequest networkRequest) { 8126bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt mHandler.sendMessage(mHandler.obtainMessage(EVENT_RELEASE_NETWORK_REQUEST, getCallingUid(), 8136bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 0, networkRequest)); 8146bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 8156bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 8166bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt @Override 8176bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt public void registerNetworkFactory(Messenger messenger, String name) { 8186bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt NetworkFactoryInfo nfi = new NetworkFactoryInfo(name, messenger, new AsyncChannel()); 8196bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt mHandler.sendMessage(mHandler.obtainMessage(EVENT_REGISTER_NETWORK_FACTORY, nfi)); 8206bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 8216bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 8226bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt private void handleRegisterNetworkFactory(NetworkFactoryInfo nfi) { 8236bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt if (DBG) log("Got NetworkFactory Messenger for " + nfi.name); 8246bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt mNetworkFactoryInfos.put(nfi.messenger, nfi); 8256bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt nfi.asyncChannel.connect(mContext, mTrackerHandler, nfi.messenger); 8266bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 8276bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 8286bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt @Override 8296bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt public void unregisterNetworkFactory(Messenger messenger) { 8306bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt mHandler.sendMessage(mHandler.obtainMessage(EVENT_UNREGISTER_NETWORK_FACTORY, messenger)); 8316bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 8326bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 8336bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt private void handleUnregisterNetworkFactory(Messenger messenger) { 8346bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt NetworkFactoryInfo nfi = mNetworkFactoryInfos.remove(messenger); 8356bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt if (nfi == null) { 8366bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt loge("Failed to find Messenger in unregisterNetworkFactory"); 8376bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt return; 8386bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 8396bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt if (DBG) log("unregisterNetworkFactory for " + nfi.name); 8406bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 8416bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 8426bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt public int registerNetworkAgent(Messenger messenger, NetworkInfo networkInfo, 8436bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt LinkProperties linkProperties, NetworkCapabilities networkCapabilities, 8446bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt int currentScore, NetworkMisc networkMisc) { 8456bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt// final NetworkAgentInfo nai = new NetworkAgentInfo(messenger, new AsyncChannel(), 8466bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt// new Network(reserveNetId()), new NetworkInfo(networkInfo), new LinkProperties( 8476bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt// linkProperties), new NetworkCapabilities(networkCapabilities), currentScore, 8486bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt// mContext, mTrackerHandler, new NetworkMisc(networkMisc), mDefaultRequest, this); 8496bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt// synchronized (this) { 8506bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt// nai.networkMonitor.systemReady = mSystemReady; 8516bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt// } 8526bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt// mHandler.sendMessage(mHandler.obtainMessage(EVENT_REGISTER_NETWORK_AGENT, nai)); 8536bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt// return nai.network.netId; 8546bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt throw new RuntimeException("not implemented"); 8556bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 8566bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 8576bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt private void handleRegisterNetworkAgent(NetworkAgentInfo na) { 8586bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt if (VDBG) log("Got NetworkAgent Messenger"); 8596bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt// mNetworkAgentInfos.put(na.messenger, na); 8606bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt// synchronized (mNetworkForNetId) { 8616bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt// mNetworkForNetId.put(na.network.netId, na); 8626bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt// } 8636bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt// na.asyncChannel.connect(mContext, mTrackerHandler, na.messenger); 8646bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt// NetworkInfo networkInfo = na.networkInfo; 8656bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt// na.networkInfo = null; 8666bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt// updateNetworkInfo(na, networkInfo); 8676bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 8686bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 8696bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 8706bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt private void handleRegisterNetworkRequest(NetworkRequestInfo nri) { 8716bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt mNetworkRequests.put(nri.request, nri); 8726bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt if (!nri.isRequest) { 8736bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt for (NetworkAgentInfo network : mNetworkAgentInfos.values()) { 8746bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt if (nri.request.networkCapabilities.hasSignalStrength() && 8756bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt network.satisfiesImmutableCapabilitiesOf(nri.request)) { 8766bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 8776bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 8786bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 8796bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt rematchAllNetworksAndRequests(null, 0); 8806bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt if (nri.isRequest) { 8816bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt sendUpdatedScoreToFactories(nri.request, 0); 8826bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 8836bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 8846bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 8856bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt private void handleReleaseNetworkRequest(NetworkRequest request, int callingUid) { 8866bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt NetworkRequestInfo nri = mNetworkRequests.get(request); 8876bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt if (nri != null) { 8886bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt if (DBG) log("releasing NetworkRequest " + request); 8896bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt nri.unlinkDeathRecipient(); 8906bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt mNetworkRequests.remove(request); 8916bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt if (nri.isRequest) { 8926bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // Find all networks that are satisfying this request and remove the request 8936bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // from their request lists. 8946bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // TODO - it's my understanding that for a request there is only a single 8956bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // network satisfying it, so this loop is wasteful 8966bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt //boolean wasKept = false; 8976bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt //for (NetworkAgentInfo nai : mNetworkAgentInfos.values()) { 8986bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // if (nai.networkRequests.get(nri.request.requestId) != null) { 8996bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // nai.networkRequests.remove(nri.request.requestId); 9006bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // if (DBG) { 9016bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // log(" Removing from current network " + nai.name() + 9026bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // ", leaving " + nai.networkRequests.size() + 9036bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // " requests."); 9046bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // } 9056bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // if (unneeded(nai)) { 9066bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // if (DBG) log("no live requests for " + nai.name() + "; disconnecting"); 9076bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // teardownUnneededNetwork(nai); 9086bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // } else { 9096bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // // suspect there should only be one pass through here 9106bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // // but if any were kept do the check below 9116bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // wasKept |= true; 9126bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // } 9136bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // } 9146bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt //} 9156bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 9166bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt //NetworkAgentInfo nai = mNetworkForRequestId.get(nri.request.requestId); 9176bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt //if (nai != null) { 9186bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // mNetworkForRequestId.remove(nri.request.requestId); 9196bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt //} 9206bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // Maintain the illusion. When this request arrived, we might have pretended 9216bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // that a network connected to serve it, even though the network was already 9226bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // connected. Now that this request has gone away, we might have to pretend 9236bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // that the network disconnected. LegacyTypeTracker will generate that 9246bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // phantom disconnect for this type. 9256bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt //if (nri.request.legacyType != TYPE_NONE && nai != null) { 9266bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // boolean doRemove = true; 9276bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // if (wasKept) { 9286bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // // check if any of the remaining requests for this network are for the 9296bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // // same legacy type - if so, don't remove the nai 9306bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // for (int i = 0; i < nai.networkRequests.size(); i++) { 9316bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // NetworkRequest otherRequest = nai.networkRequests.valueAt(i); 9326bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // if (otherRequest.legacyType == nri.request.legacyType && 9336bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // isRequest(otherRequest)) { 9346bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // if (DBG) log(" still have other legacy request - leaving"); 9356bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // doRemove = false; 9366bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // } 9376bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // } 9386bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // } 9396bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // 9406bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // if (doRemove) { 9416bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // mLegacyTypeTracker.remove(nri.request.legacyType, nai, false); 9426bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // } 9436bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt //} 9446bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 9456bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt for (NetworkFactoryInfo nfi : mNetworkFactoryInfos.values()) { 9466bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt nfi.asyncChannel.sendMessage(android.net.NetworkFactory.CMD_CANCEL_REQUEST, 9476bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt nri.request); 9486bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 9496bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } else { 9506bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // listens don't have a singular affectedNetwork. Check all networks to see 9516bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // if this listen request applies and remove it. 9526bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt //for (NetworkAgentInfo nai : mNetworkAgentInfos.values()) { 9536bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // nai.networkRequests.remove(nri.request.requestId); 9546bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // if (nri.request.networkCapabilities.hasSignalStrength() && 9556bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // nai.satisfiesImmutableCapabilitiesOf(nri.request)) { 9566bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // updateSignalStrengthThresholds(nai, "RELEASE", nri.request); 9576bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // } 9586bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt //} 9596bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 9606bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt //callCallbackForRequest(nri, null, ConnectivityManager.CALLBACK_RELEASED); 9616bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 9626bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 9636bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 9646bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt private void sendUpdatedScoreToFactories(NetworkAgentInfo nai) { 9654be10a245ce355d84d70e61cb63d29ed525b478aLorenzo Colitti for (int i = 0; i < nai.numNetworkRequests(); i++) { 9664be10a245ce355d84d70e61cb63d29ed525b478aLorenzo Colitti NetworkRequest nr = nai.requestAt(i); 9676bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // Don't send listening requests to factories. b/17393458 9686bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt if (!isRequest(nr)) continue; 9696bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt sendUpdatedScoreToFactories(nr, nai.getCurrentScore()); 9706bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 9716bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 9726bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 9736bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt private void sendUpdatedScoreToFactories(NetworkRequest networkRequest, int score) { 9746bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt if (VDBG) log("sending new Min Network Score(" + score + "): " + networkRequest.toString()); 9756bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt for (NetworkFactoryInfo nfi : mNetworkFactoryInfos.values()) { 9766bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt nfi.asyncChannel.sendMessage(android.net.NetworkFactory.CMD_REQUEST_NETWORK, score, 0, 9776bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt networkRequest); 9786bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 9796bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 9806bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 9816bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt private void rematchAllNetworksAndRequests(NetworkAgentInfo changed, int oldScore) { 9826bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 9836bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 9846bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt @Override 9856bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt public void onSendFinished(PendingIntent pendingIntent, Intent intent, int resultCode, 9866bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt String resultData, Bundle resultExtras) { 9876bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt throw new RuntimeException("not implemented"); 9886bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 9896bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 9906bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt @Override 9916bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt public boolean addVpnAddress(String address, int prefixLength) { 9926bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt throw new RuntimeException("not implemented"); 9936bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 9946bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 9956bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt @Override 9966bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt public boolean removeVpnAddress(String address, int prefixLength) { 9976bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt throw new RuntimeException("not implemented"); 9986bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 9996bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 10006bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt @Override 10016bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt public boolean setUnderlyingNetworksForVpn(Network[] networks) { 10026bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt throw new RuntimeException("not implemented"); 10036bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 10046bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 10056bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt @Override 10066bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt public String getCaptivePortalServerUrl() { 10076bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt throw new RuntimeException("not implemented"); 10086bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 10096bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 10106bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt @Override 10116bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt public void startNattKeepalive(Network network, int intervalSeconds, Messenger messenger, 10126bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt IBinder binder, String srcAddr, int srcPort, String dstAddr) { 10136bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt throw new RuntimeException("not implemented"); 10146bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 10156bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 10166bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt @Override 10176bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt public void stopKeepalive(Network network, int slot) { 10186bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt throw new RuntimeException("not implemented"); 10196bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 10206bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 10216bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt @Override 10226bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt public void factoryReset() { 10236bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt throw new RuntimeException("not implemented"); 10246bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 10256bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 10266bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt @VisibleForTesting 10276bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt public NetworkMonitor createNetworkMonitor(Context context, Handler handler, 10286bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt NetworkAgentInfo nai, NetworkRequest defaultRequest) { 10296bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt throw new RuntimeException("not implemented"); 10306bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 10316bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 10323baedf2ead743a2c67dcac03733cec52bcef5636Robert Greenwalt @VisibleForTesting 10333baedf2ead743a2c67dcac03733cec52bcef5636Robert Greenwalt public NetworkRequest defaultRequest = null; 10346bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt @VisibleForTesting 10356bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt public synchronized void addDefaultRequest() { 10363baedf2ead743a2c67dcac03733cec52bcef5636Robert Greenwalt if (defaultRequest != null) return; 10376bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt NetworkCapabilities netCap = new NetworkCapabilities(); 10386bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt netCap.addCapability(NET_CAPABILITY_INTERNET); 10396bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt netCap.addCapability(NET_CAPABILITY_NOT_RESTRICTED); 10403baedf2ead743a2c67dcac03733cec52bcef5636Robert Greenwalt defaultRequest = requestNetwork(netCap, null, 0, new Binder(), 10416bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt ConnectivityManager.TYPE_NONE); 10426bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 10436bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 10446bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt @VisibleForTesting 10453baedf2ead743a2c67dcac03733cec52bcef5636Robert Greenwalt public synchronized void setCurrentScoreForRequest(NetworkRequest nr, int score) { 10463baedf2ead743a2c67dcac03733cec52bcef5636Robert Greenwalt sendUpdatedScoreToFactories(nr, score); 10473baedf2ead743a2c67dcac03733cec52bcef5636Robert Greenwalt } 10483baedf2ead743a2c67dcac03733cec52bcef5636Robert Greenwalt 10493baedf2ead743a2c67dcac03733cec52bcef5636Robert Greenwalt @VisibleForTesting 10506bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt public synchronized void removeDefaultRequest() { 10513baedf2ead743a2c67dcac03733cec52bcef5636Robert Greenwalt if (defaultRequest == null) return; 10523baedf2ead743a2c67dcac03733cec52bcef5636Robert Greenwalt releaseNetworkRequest(defaultRequest); 10533baedf2ead743a2c67dcac03733cec52bcef5636Robert Greenwalt defaultRequest = null; 10546bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt } 10556bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 10566bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 10576bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt} 1058