Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0cb7903d authored by Lorenzo Colitti's avatar Lorenzo Colitti
Browse files

Propagate network state changes to the LockdownVpnTracker.

Bug: 17695048
Change-Id: I10378df0ab545729a6a315fd1bc8870cd98f47b3
parent 5873c3e8
Loading
Loading
Loading
Loading
+15 −6
Original line number Original line Diff line number Diff line
@@ -2001,9 +2001,7 @@ public class ConnectivityService extends IConnectivityManager.Stub {
                    } else if (state == NetworkInfo.State.CONNECTED) {
                    } else if (state == NetworkInfo.State.CONNECTED) {
                    //    handleConnect(info);
                    //    handleConnect(info);
                    }
                    }
                    if (mLockdownTracker != null) {
                    notifyLockdownVpn(null);
                        mLockdownTracker.onNetworkInfoChanged(info);
                    }
                    break;
                    break;
                }
                }
                case NetworkStateTracker.EVENT_CONFIGURATION_CHANGED: {
                case NetworkStateTracker.EVENT_CONFIGURATION_CHANGED: {
@@ -2126,6 +2124,7 @@ public class ConnectivityService extends IConnectivityManager.Stub {
            if (nai.networkRequests.get(mDefaultRequest.requestId) != null) {
            if (nai.networkRequests.get(mDefaultRequest.requestId) != null) {
                removeDataActivityTracking(nai);
                removeDataActivityTracking(nai);
                mActiveDefaultNetwork = ConnectivityManager.TYPE_NONE;
                mActiveDefaultNetwork = ConnectivityManager.TYPE_NONE;
                notifyLockdownVpn(nai);
                requestNetworkTransitionWakelock(nai.name());
                requestNetworkTransitionWakelock(nai.name());
            }
            }
            for (NetworkAgentInfo networkToActivate : toActivate) {
            for (NetworkAgentInfo networkToActivate : toActivate) {
@@ -3801,6 +3800,7 @@ public class ConnectivityService extends IConnectivityManager.Stub {
        } catch (Exception e) {
        } catch (Exception e) {
            loge("Exception setting default network :" + e);
            loge("Exception setting default network :" + e);
        }
        }
        notifyLockdownVpn(newNetwork);
        handleApplyDefaultProxy(newNetwork.linkProperties.getHttpProxy());
        handleApplyDefaultProxy(newNetwork.linkProperties.getHttpProxy());
        updateTcpBufferSizes(newNetwork);
        updateTcpBufferSizes(newNetwork);
    }
    }
@@ -3916,6 +3916,7 @@ public class ConnectivityService extends IConnectivityManager.Stub {
                        }
                        }
                        mDefaultInetConditionPublished = newNetwork.validated ? 100 : 0;
                        mDefaultInetConditionPublished = newNetwork.validated ? 100 : 0;
                        mLegacyTypeTracker.add(newNetwork.networkInfo.getType(), newNetwork);
                        mLegacyTypeTracker.add(newNetwork.networkInfo.getType(), newNetwork);
                        notifyLockdownVpn(newNetwork);
                    }
                    }
                }
                }
            }
            }
@@ -4035,6 +4036,16 @@ public class ConnectivityService extends IConnectivityManager.Stub {
        sendInetConditionBroadcast(nai.networkInfo);
        sendInetConditionBroadcast(nai.networkInfo);
    }
    }


    private void notifyLockdownVpn(NetworkAgentInfo nai) {
        if (mLockdownTracker != null) {
            if (nai != null && nai.isVPN()) {
                mLockdownTracker.onVpnStateChanged(nai.networkInfo);
            } else {
                mLockdownTracker.onNetworkInfoChanged();
            }
        }
    }

    private void updateNetworkInfo(NetworkAgentInfo networkAgent, NetworkInfo newInfo) {
    private void updateNetworkInfo(NetworkAgentInfo networkAgent, NetworkInfo newInfo) {
        NetworkInfo.State state = newInfo.getState();
        NetworkInfo.State state = newInfo.getState();
        NetworkInfo oldInfo = null;
        NetworkInfo oldInfo = null;
@@ -4042,9 +4053,7 @@ public class ConnectivityService extends IConnectivityManager.Stub {
            oldInfo = networkAgent.networkInfo;
            oldInfo = networkAgent.networkInfo;
            networkAgent.networkInfo = newInfo;
            networkAgent.networkInfo = newInfo;
        }
        }
        if (networkAgent.isVPN() && mLockdownTracker != null) {
        notifyLockdownVpn(networkAgent);
            mLockdownTracker.onVpnStateChanged(newInfo);
        }


        if (oldInfo != null && oldInfo.getState() == state) {
        if (oldInfo != null && oldInfo.getState() == state) {
            if (VDBG) log("ignoring duplicate network state non-change");
            if (VDBG) log("ignoring duplicate network state non-change");
+11 −2
Original line number Original line Diff line number Diff line
@@ -25,6 +25,7 @@ import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Context;
import android.content.Intent;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.IntentFilter;
import android.net.ConnectivityManager;
import android.net.LinkProperties;
import android.net.LinkProperties;
import android.net.LinkAddress;
import android.net.LinkAddress;
import android.net.NetworkInfo;
import android.net.NetworkInfo;
@@ -113,7 +114,6 @@ public class LockdownVpnTracker {
     * connection when ready, or setting firewall rules once VPN is connected.
     * connection when ready, or setting firewall rules once VPN is connected.
     */
     */
    private void handleStateChangedLocked() {
    private void handleStateChangedLocked() {
        Slog.d(TAG, "handleStateChanged()");


        final NetworkInfo egressInfo = mConnService.getActiveNetworkInfoUnfiltered();
        final NetworkInfo egressInfo = mConnService.getActiveNetworkInfoUnfiltered();
        final LinkProperties egressProp = mConnService.getActiveLinkProperties();
        final LinkProperties egressProp = mConnService.getActiveLinkProperties();
@@ -126,6 +126,14 @@ public class LockdownVpnTracker {
                || State.DISCONNECTED.equals(egressInfo.getState());
                || State.DISCONNECTED.equals(egressInfo.getState());
        final boolean egressChanged = egressProp == null
        final boolean egressChanged = egressProp == null
                || !TextUtils.equals(mAcceptedEgressIface, egressProp.getInterfaceName());
                || !TextUtils.equals(mAcceptedEgressIface, egressProp.getInterfaceName());

        final String egressTypeName = (egressInfo == null) ?
                null : ConnectivityManager.getNetworkTypeName(egressInfo.getType());
        final String egressIface = (egressProp == null) ?
                null : egressProp.getInterfaceName();
        Slog.d(TAG, "handleStateChanged: egress=" + egressTypeName +
                " " + mAcceptedEgressIface + "->" + egressIface);

        if (egressDisconnected || egressChanged) {
        if (egressDisconnected || egressChanged) {
            clearSourceRulesLocked();
            clearSourceRulesLocked();
            mAcceptedEgressIface = null;
            mAcceptedEgressIface = null;
@@ -252,6 +260,7 @@ public class LockdownVpnTracker {
    }
    }


    public void reset() {
    public void reset() {
        Slog.d(TAG, "reset()");
        synchronized (mStateLock) {
        synchronized (mStateLock) {
            // cycle tracker, reset error count, and trigger retry
            // cycle tracker, reset error count, and trigger retry
            shutdownLocked();
            shutdownLocked();
@@ -277,7 +286,7 @@ public class LockdownVpnTracker {
        }
        }
    }
    }


    public void onNetworkInfoChanged(NetworkInfo info) {
    public void onNetworkInfoChanged() {
        synchronized (mStateLock) {
        synchronized (mStateLock) {
            handleStateChangedLocked();
            handleStateChangedLocked();
        }
        }