Search in sources :

Example 16 with UidRange

use of android.net.UidRange in project android_frameworks_base by AOSPA.

the class Vpn method agentConnect.

private void agentConnect() {
    LinkProperties lp = makeLinkProperties();
    if (lp.hasIPv4DefaultRoute() || lp.hasIPv6DefaultRoute()) {
        mNetworkCapabilities.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET);
    } else {
        mNetworkCapabilities.removeCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET);
    }
    mNetworkInfo.setDetailedState(DetailedState.CONNECTING, null, null);
    NetworkMisc networkMisc = new NetworkMisc();
    networkMisc.allowBypass = mConfig.allowBypass && !mLockdown;
    long token = Binder.clearCallingIdentity();
    try {
        mNetworkAgent = new NetworkAgent(mLooper, mContext, NETWORKTYPE, mNetworkInfo, mNetworkCapabilities, lp, 0, networkMisc) {

            @Override
            public void unwanted() {
            // We are user controlled, not driven by NetworkRequest.
            }
        };
    } finally {
        Binder.restoreCallingIdentity(token);
    }
    mVpnUsers = createUserAndRestrictedProfilesRanges(mUserHandle, mConfig.allowedApplications, mConfig.disallowedApplications);
    mNetworkAgent.addUidRanges(mVpnUsers.toArray(new UidRange[mVpnUsers.size()]));
    mNetworkInfo.setIsAvailable(true);
    updateState(DetailedState.CONNECTED, "agentConnect");
}
Also used : NetworkMisc(android.net.NetworkMisc) NetworkAgent(android.net.NetworkAgent) UidRange(android.net.UidRange) LinkProperties(android.net.LinkProperties)

Example 17 with UidRange

use of android.net.UidRange in project android_frameworks_base by AOSPA.

the class Vpn method onUserAdded.

public void onUserAdded(int userHandle) {
    // If the user is restricted tie them to the parent user's VPN
    UserInfo user = UserManager.get(mContext).getUserInfo(userHandle);
    if (user.isRestricted() && user.restrictedProfileParentId == mUserHandle) {
        synchronized (Vpn.this) {
            if (mVpnUsers != null) {
                try {
                    addUserToRanges(mVpnUsers, userHandle, mConfig.allowedApplications, mConfig.disallowedApplications);
                    if (mNetworkAgent != null) {
                        final List<UidRange> ranges = uidRangesForUser(userHandle);
                        mNetworkAgent.addUidRanges(ranges.toArray(new UidRange[ranges.size()]));
                    }
                } catch (Exception e) {
                    Log.wtf(TAG, "Failed to add restricted user to owner", e);
                }
            }
            if (mAlwaysOn) {
                setVpnForcedLocked(mLockdown);
            }
        }
    }
}
Also used : UidRange(android.net.UidRange) UserInfo(android.content.pm.UserInfo) NameNotFoundException(android.content.pm.PackageManager.NameNotFoundException) RemoteException(android.os.RemoteException) IOException(java.io.IOException)

Example 18 with UidRange

use of android.net.UidRange in project platform_frameworks_base by android.

the class NetworkManagementService method closeSocketsForFirewallChainLocked.

private void closeSocketsForFirewallChainLocked(int chain, String chainName) {
    // UID ranges to close sockets on.
    UidRange[] ranges;
    // UID ranges whose sockets we won't touch.
    int[] exemptUids;
    final SparseIntArray rules = getUidFirewallRules(chain);
    int numUids = 0;
    if (getFirewallType(chain) == FIREWALL_TYPE_WHITELIST) {
        // Close all sockets on all non-system UIDs...
        ranges = new UidRange[] { // specify their ranges here.
        new UidRange(Process.FIRST_APPLICATION_UID, Integer.MAX_VALUE) };
        // ... except for the UIDs that have allow rules.
        exemptUids = new int[rules.size()];
        for (int i = 0; i < exemptUids.length; i++) {
            if (rules.valueAt(i) == NetworkPolicyManager.FIREWALL_RULE_ALLOW) {
                exemptUids[numUids] = rules.keyAt(i);
                numUids++;
            }
        }
        // fix setFirewallEnabled to grab mQuotaLock and clear rules.
        if (numUids != exemptUids.length) {
            exemptUids = Arrays.copyOf(exemptUids, numUids);
        }
    } else {
        // Close sockets for every UID that has a deny rule...
        ranges = new UidRange[rules.size()];
        for (int i = 0; i < ranges.length; i++) {
            if (rules.valueAt(i) == NetworkPolicyManager.FIREWALL_RULE_DENY) {
                int uid = rules.keyAt(i);
                ranges[numUids] = new UidRange(uid, uid);
                numUids++;
            }
        }
        // As above; usually numUids == ranges.length, but not always.
        if (numUids != ranges.length) {
            ranges = Arrays.copyOf(ranges, numUids);
        }
        // ... with no exceptions.
        exemptUids = new int[0];
    }
    try {
        mNetdService.socketDestroy(ranges, exemptUids);
    } catch (RemoteException | ServiceSpecificException e) {
        Slog.e(TAG, "Error closing sockets after enabling chain " + chainName + ": " + e);
    }
}
Also used : ServiceSpecificException(android.os.ServiceSpecificException) UidRange(android.net.UidRange) SparseIntArray(android.util.SparseIntArray) RemoteException(android.os.RemoteException)

Example 19 with UidRange

use of android.net.UidRange in project platform_frameworks_base by android.

the class Vpn method uidRangesForUser.

// Returns the subset of the full list of active UID ranges the VPN applies to (mVpnUsers) that
// apply to userHandle.
private List<UidRange> uidRangesForUser(int userHandle) {
    final UidRange userRange = UidRange.createForUser(userHandle);
    final List<UidRange> ranges = new ArrayList<UidRange>();
    for (UidRange range : mVpnUsers) {
        if (userRange.containsRange(range)) {
            ranges.add(range);
        }
    }
    return ranges;
}
Also used : UidRange(android.net.UidRange) ArrayList(java.util.ArrayList)

Example 20 with UidRange

use of android.net.UidRange in project platform_frameworks_base by android.

the class Vpn method agentConnect.

private void agentConnect() {
    LinkProperties lp = makeLinkProperties();
    if (lp.hasIPv4DefaultRoute() || lp.hasIPv6DefaultRoute()) {
        mNetworkCapabilities.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET);
    } else {
        mNetworkCapabilities.removeCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET);
    }
    mNetworkInfo.setDetailedState(DetailedState.CONNECTING, null, null);
    NetworkMisc networkMisc = new NetworkMisc();
    networkMisc.allowBypass = mConfig.allowBypass && !mLockdown;
    long token = Binder.clearCallingIdentity();
    try {
        mNetworkAgent = new NetworkAgent(mLooper, mContext, NETWORKTYPE, mNetworkInfo, mNetworkCapabilities, lp, 0, networkMisc) {

            @Override
            public void unwanted() {
            // We are user controlled, not driven by NetworkRequest.
            }
        };
    } finally {
        Binder.restoreCallingIdentity(token);
    }
    mVpnUsers = createUserAndRestrictedProfilesRanges(mUserHandle, mConfig.allowedApplications, mConfig.disallowedApplications);
    mNetworkAgent.addUidRanges(mVpnUsers.toArray(new UidRange[mVpnUsers.size()]));
    mNetworkInfo.setIsAvailable(true);
    updateState(DetailedState.CONNECTED, "agentConnect");
}
Also used : NetworkMisc(android.net.NetworkMisc) NetworkAgent(android.net.NetworkAgent) UidRange(android.net.UidRange) LinkProperties(android.net.LinkProperties)

Aggregations

UidRange (android.net.UidRange)42 UserInfo (android.content.pm.UserInfo)19 RemoteException (android.os.RemoteException)15 SmallTest (android.test.suitebuilder.annotation.SmallTest)12 NetworkAgent (android.net.NetworkAgent)10 IOException (java.io.IOException)10 PendingIntent (android.app.PendingIntent)5 Intent (android.content.Intent)5 ServiceConnection (android.content.ServiceConnection)5 NameNotFoundException (android.content.pm.PackageManager.NameNotFoundException)5 ResolveInfo (android.content.pm.ResolveInfo)5 LinkAddress (android.net.LinkAddress)5 LinkProperties (android.net.LinkProperties)5 NetworkMisc (android.net.NetworkMisc)5 ParcelFileDescriptor (android.os.ParcelFileDescriptor)5 ServiceSpecificException (android.os.ServiceSpecificException)5 UserHandle (android.os.UserHandle)5 UserManager (android.os.UserManager)5 ArraySet (android.util.ArraySet)5 SparseIntArray (android.util.SparseIntArray)5