summaryrefslogtreecommitdiff
path: root/services/java/com/android/server/ConnectivityService.java
diff options
context:
space:
mode:
authorRobert Greenwalt <rgreenwalt@google.com>2011-06-24 16:10:06 -0700
committerRobert Greenwalt <rgreenwalt@google.com>2011-06-24 16:10:06 -0700
commit86994c1fc16f87658c2fd88537a7374777ecc67d (patch)
treecd9c9515bc80fda2deb0c41f3f3d569b22e6fcb9 /services/java/com/android/server/ConnectivityService.java
parentf4db8d566c6f9b58c16923e6206218469f19613f (diff)
parent0e0a7597343b4f030be17788006006c93c85759c (diff)
resolved conflicts for merge of 40717996 to master
Change-Id: Ie5c0f1f20c313d6c568b3b06f778f75223914ada
Diffstat (limited to 'services/java/com/android/server/ConnectivityService.java')
-rw-r--r--services/java/com/android/server/ConnectivityService.java26
1 files changed, 25 insertions, 1 deletions
diff --git a/services/java/com/android/server/ConnectivityService.java b/services/java/com/android/server/ConnectivityService.java
index e6f443a54bcd..9ba90027d708 100644
--- a/services/java/com/android/server/ConnectivityService.java
+++ b/services/java/com/android/server/ConnectivityService.java
@@ -278,6 +278,9 @@ public class ConnectivityService extends IConnectivityManager.Stub {
}
RadioAttributes[] mRadioAttributes;
+ // the set of network types that can only be enabled by system/sig apps
+ List mProtectedNetworks;
+
public ConnectivityService(
Context context, INetworkManagementService netd, INetworkPolicyManager policyManager) {
if (DBG) log("ConnectivityService starting up");
@@ -381,6 +384,17 @@ public class ConnectivityService extends IConnectivityManager.Stub {
}
}
+ mProtectedNetworks = new ArrayList<Integer>();
+ int[] protectedNetworks = context.getResources().getIntArray(
+ com.android.internal.R.array.config_protectedNetworks);
+ for (int p : protectedNetworks) {
+ if ((mNetConfigs[p] != null) && (mProtectedNetworks.contains(p) == false)) {
+ mProtectedNetworks.add(p);
+ } else {
+ if (DBG) loge("Ignoring protectedNetwork " + p);
+ }
+ }
+
// high priority first
mPriorityList = new int[mNetworksDefined];
{
@@ -802,6 +816,11 @@ public class ConnectivityService extends IConnectivityManager.Stub {
usedNetworkType = networkType;
}
}
+
+ if (mProtectedNetworks.contains(usedNetworkType)) {
+ enforceConnectivityInternalPermission();
+ }
+
NetworkStateTracker network = mNetTrackers[usedNetworkType];
if (network != null) {
Integer currentPid = new Integer(getCallingPid());
@@ -1012,6 +1031,10 @@ public class ConnectivityService extends IConnectivityManager.Stub {
*/
public boolean requestRouteToHostAddress(int networkType, byte[] hostAddress) {
enforceChangePermission();
+ if (mProtectedNetworks.contains(networkType)) {
+ enforceConnectivityInternalPermission();
+ }
+
if (!ConnectivityManager.isNetworkTypeValid(networkType)) {
return false;
}
@@ -1129,7 +1152,8 @@ public class ConnectivityService extends IConnectivityManager.Stub {
}
public void setDataDependency(int networkType, boolean met) {
- enforceChangePermission();
+ enforceConnectivityInternalPermission();
+
if (DBG) {
log("setDataDependency(" + networkType + ", " + met + ")");
}