[tor-commits] [orbot/master] fixes for network switching with VPN enabled

n8fr8 at torproject.org n8fr8 at torproject.org
Sat Apr 4 04:41:26 UTC 2015


commit d6eb1dca5727c57f2b14650ef846d2f8fe22a856
Author: Nathan Freitas <nathan at freitas.net>
Date:   Sat Apr 4 00:36:24 2015 -0400

    fixes for network switching with VPN enabled
---
 src/org/torproject/android/OrbotMainActivity.java  |   10 +++----
 src/org/torproject/android/service/TorService.java |   31 ++++++++++++--------
 .../torproject/android/vpn/OrbotVpnService.java    |   30 +++++++++++--------
 3 files changed, 41 insertions(+), 30 deletions(-)

diff --git a/src/org/torproject/android/OrbotMainActivity.java b/src/org/torproject/android/OrbotMainActivity.java
index 7e211e5..405e930 100644
--- a/src/org/torproject/android/OrbotMainActivity.java
+++ b/src/org/torproject/android/OrbotMainActivity.java
@@ -688,11 +688,7 @@ public class OrbotMainActivity extends Activity implements OrbotConstants, OnLon
 		boolean isTransProxy =  mPrefs.getBoolean("pref_transparent", false);
 		
 		
-		if (isOrwebInstalled)
-		{
-			startIntent("info.guardianproject.browser",Intent.ACTION_VIEW,Uri.parse(browserLaunchUrl));						
-		}
-		else if (mBtnVPN.isChecked())
+		if (mBtnVPN.isChecked())
 		{
 			//use the system browser since VPN is on
 			Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(browserLaunchUrl));
@@ -705,6 +701,10 @@ public class OrbotMainActivity extends Activity implements OrbotConstants, OnLon
 			intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP|Intent.FLAG_ACTIVITY_NEW_TASK);
 			startActivity(intent);
 		}
+		else if (isOrwebInstalled)
+		{
+			startIntent("info.guardianproject.browser",Intent.ACTION_VIEW,Uri.parse(browserLaunchUrl));						
+		}
 		else
 		{
 			AlertDialog aDialog = new AlertDialog.Builder(OrbotMainActivity.this)
diff --git a/src/org/torproject/android/service/TorService.java b/src/org/torproject/android/service/TorService.java
index cae1697..03c7ebb 100644
--- a/src/org/torproject/android/service/TorService.java
+++ b/src/org/torproject/android/service/TorService.java
@@ -128,6 +128,7 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
     private long mTotalTrafficWritten = 0;
     private long mTotalTrafficRead = 0;
     private boolean mConnectivity = true; 
+    private int mNetworkType = -1;
 
     private long lastRead = -1;
     private long lastWritten = -1;
@@ -2086,6 +2087,9 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
             final NetworkInfo netInfo = cm.getActiveNetworkInfo();
 
             boolean newConnectivityState = false;
+            int newNetType = -1;
+            
+            boolean isChanged = false;
             
             if(netInfo != null && netInfo.isConnected()) {
                 // WE ARE CONNECTED: DO SOMETHING
@@ -2096,10 +2100,17 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
             	newConnectivityState = false;
             }
             
+            if (netInfo!=null)
+            	newNetType = netInfo.getType();
+            
+            isChanged = ((mNetworkType != newNetType)||(mConnectivity != newConnectivityState));
+            
             //is this a change in state?
-            if (mConnectivity != newConnectivityState)
+            if (isChanged)
             {
-            
+            	mNetworkType = newNetType;
+            	mConnectivity = newConnectivityState;
+            	
 	            if (doNetworKSleep)
 	            {
 	                try {
@@ -2130,6 +2141,10 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
 	                                shell.close();
 	                            }
 	                            
+	                            if (mUseVPN) //we need to turn on VPN here so the proxy is running
+	                            	refreshVpnProxy();
+	            	            
+	                            
 	                        }
 	                    }
 	                    
@@ -2140,18 +2155,8 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
 	                }
 	            }
 	            
-	            if (mUseVPN && mConnectivity &&  (mCurrentStatus != STATUS_OFF)) //we need to turn on VPN here so the proxy is running
-	            {
-	            	setTorNetworkEnabled (false);
-	            	refreshVpnProxy();
-	            	setTorNetworkEnabled (true);
-	            	
-	            	
-	            }
+	            
             }
-            
-            mConnectivity = newConnectivityState;
-            
 
             
         }
diff --git a/src/org/torproject/android/vpn/OrbotVpnService.java b/src/org/torproject/android/vpn/OrbotVpnService.java
index b495937..f2a0e96 100644
--- a/src/org/torproject/android/vpn/OrbotVpnService.java
+++ b/src/org/torproject/android/vpn/OrbotVpnService.java
@@ -89,14 +89,18 @@ public class OrbotVpnService extends VpnService implements Handler.Callback {
     	}
     	else if (action.equals("stop"))
     	{
+    		Log.d(TAG,"stop OrbotVPNService service!");
+    		
     		stopVPN();    		
     		if (mHandler != null)
     			mHandler.postDelayed(new Runnable () { public void run () { stopSelf(); }}, 1000);
     	}
     	else if (action.equals("refresh"))
     	{
-    		if (!isLollipop)
-    			startSocksBypass();
+    		Log.d(TAG,"refresh OrbotVPNService service!");
+    		
+    	//	if (!isLollipop)
+    		//	startSocksBypass();
     		
     		setupTun2Socks();
     	}
@@ -201,13 +205,13 @@ public class OrbotVpnService extends VpnService implements Handler.Callback {
 		            // (i.e., Farsi and Arabic).^M
 		    		Locale.setDefault(new Locale("en"));
 		    		
-		    		//String localhost = InetAddress.getLocalHost().getHostAddress();
+		    		String localhost = InetAddress.getLocalHost().getHostAddress();
 		    		
 		    		String vpnName = "OrbotVPN";
 		    		String virtualGateway = "10.0.0.1";
 		        	String virtualIP = "10.0.0.2";
 		        	String virtualNetMask = "255.255.255.0";
-		        	String localSocks = "127.0.0.1" + ':' + TorServiceConstants.PORT_SOCKS_DEFAULT;
+		        	String localSocks = localhost + ':' + TorServiceConstants.PORT_SOCKS_DEFAULT;//+ "127.0.0.1" 
 		        	String localDNS = "10.0.0.1" + ':' + TorServiceConstants.TOR_DNS_PORT_DEFAULT;
 		        	
 		        	
@@ -224,21 +228,23 @@ public class OrbotVpnService extends VpnService implements Handler.Callback {
 			        	doLollipopAppRouting(builder);
 			        }
 			        
-			         // Create a new interface using the builder and save the parameters.
-			        ParcelFileDescriptor newInterface = builder.setSession(mSessionName)
-			                .setConfigureIntent(mConfigureIntent)
-			                .establish();
-			        	    
 			        if (mInterface != null)
 			        {
+			        	Log.d(TAG,"Stopping existing VPN interface");
 			        	isRestart = true;
-			        	
-			        	Tun2Socks.Stop();
 			        	mInterface.close();
-			        	
+			        	mInterface = null;
+
+			        	Tun2Socks.Stop();
 			        }
 			        
 
+			         // Create a new interface using the builder and save the parameters.
+			        ParcelFileDescriptor newInterface = builder.setSession(mSessionName)
+			                .setConfigureIntent(mConfigureIntent)
+			                .establish();
+			        	    
+
 		        	mInterface = newInterface;
 			        
 		        	Tun2Socks.Start(mInterface, VPN_MTU, virtualIP, virtualNetMask, localSocks , localDNS , true);





More information about the tor-commits mailing list