OSDN Git Service

VPN: tear down VPN when the dependent interface is down.
authorChia-chi Yeh <chiachi@android.com>
Fri, 15 Jul 2011 01:55:33 +0000 (18:55 -0700)
committerChia-chi Yeh <chiachi@android.com>
Fri, 15 Jul 2011 02:01:40 +0000 (19:01 -0700)
Change-Id: I1eaf8e39ee7aed1f4ecbd4c36c2a81a68ad2f9d1

services/java/com/android/server/connectivity/Vpn.java

index 9fb9349..05e95a7 100644 (file)
@@ -222,15 +222,21 @@ public class Vpn extends INetworkManagementEventObserver.Stub {
     }
 
     // INetworkManagementEventObserver.Stub
-    public void interfaceStatusChanged(String interfaze, boolean up) {
+    public void interfaceAdded(String interfaze) {
     }
 
     // INetworkManagementEventObserver.Stub
-    public void interfaceLinkStateChanged(String interfaze, boolean up) {
+    public synchronized void interfaceStatusChanged(String interfaze, boolean up) {
+        if (!up && mLegacyVpnRunner != null) {
+            mLegacyVpnRunner.check(interfaze);
+        }
     }
 
     // INetworkManagementEventObserver.Stub
-    public void interfaceAdded(String interfaze) {
+    public synchronized void interfaceLinkStateChanged(String interfaze, boolean up) {
+        if (!up && mLegacyVpnRunner != null) {
+            mLegacyVpnRunner.check(interfaze);
+        }
     }
 
     // INetworkManagementEventObserver.Stub
@@ -329,6 +335,7 @@ public class Vpn extends INetworkManagementEventObserver.Stub {
         private final VpnConfig mConfig;
         private final String[] mDaemons;
         private final String[][] mArguments;
+        private final String mOuterInterface;
         private final LegacyVpnInfo mInfo;
 
         private long mTimer = -1;
@@ -340,11 +347,21 @@ public class Vpn extends INetworkManagementEventObserver.Stub {
             mArguments = new String[][] {racoon, mtpd};
             mInfo = new LegacyVpnInfo();
 
+            // This is the interface which VPN is running on.
+            mOuterInterface = mConfig.interfaze;
+
             // Legacy VPN is not a real package, so we use it to carry the key.
             mInfo.key = mConfig.packagz;
             mConfig.packagz = VpnConfig.LEGACY_VPN;
         }
 
+        public void check(String interfaze) {
+            if (interfaze.equals(mOuterInterface)) {
+                Log.i(TAG, "Legacy VPN is going down with " + interfaze);
+                exit();
+            }
+        }
+
         public void exit() {
             // We assume that everything is reset after the daemons die.
             interrupt();