[tor-commits] [orbot/master] enable local DNS listen on 10.0.0.1 for VPN service

n8fr8 at torproject.org n8fr8 at torproject.org
Fri Apr 3 17:04:05 UTC 2015


commit 1852cde041851b0529ef50a110a74a029bd97b02
Author: Nathan Freitas <nathan at freitas.net>
Date:   Wed Feb 4 14:55:57 2015 -0500

    enable local DNS listen on 10.0.0.1 for VPN service
    also add support for stopping VPNBuilder instance
---
 src/org/torproject/android/service/TorService.java |   27 ++++++++--
 .../torproject/android/vpn/OrbotVpnService.java    |   55 ++++++++++++++------
 2 files changed, 62 insertions(+), 20 deletions(-)

diff --git a/src/org/torproject/android/service/TorService.java b/src/org/torproject/android/service/TorService.java
index a20a227..b287975 100644
--- a/src/org/torproject/android/service/TorService.java
+++ b/src/org/torproject/android/service/TorService.java
@@ -141,6 +141,8 @@ public class TorService extends Service implements TorServiceConstants, TorConst
     private boolean mTransProxyTethering = false;
     private boolean mTransProxyNetworkRefresh = false;
     
+    private boolean mUseVPN = false;
+    
     private ExecutorService mExecutor = Executors.newFixedThreadPool(1);
 
     public void debug(String msg)
@@ -368,7 +370,6 @@ public class TorService extends Service implements TorServiceConstants, TorConst
                     
                     if (action!=null){
                         if(action.equals(Intent.ACTION_BOOT_COMPLETED)||action.equals(CMD_START)){
-                            clearVpnProxy();
                             setTorProfile(STATUS_ON);
                         }else if (action.equals(CMD_STOP)){
                             setTorProfile(STATUS_OFF);
@@ -381,7 +382,7 @@ public class TorService extends Service implements TorServiceConstants, TorConst
                             flushTransparentProxyRules();
                         }else if (action.equals(CMD_UPDATE)){
                             processSettings();
-                        }else if (action.equals(CMD_VPN)){
+                        }else if (action.equals(CMD_VPN)){                        	
                             enableVpnProxy();
                         }
                         else if (action.equals(CMD_VPN_CLEAR)){
@@ -1422,6 +1423,10 @@ public class TorService extends Service implements TorServiceConstants, TorConst
         
         public void enableVpnProxy () {
             
+        	debug ("enabling VPN Proxy");
+        	
+        	mUseVPN = true;
+
             SharedPreferences prefs = TorServiceUtils.getSharedPrefs(getApplicationContext());
             Editor ePrefs = prefs.edit();
             
@@ -1434,12 +1439,18 @@ public class TorService extends Service implements TorServiceConstants, TorConst
             processSettings();
             
             Intent intent = new Intent(TorService.this, OrbotVpnService.class);
+            intent.setAction("start");
             startService(intent);
+            
            
         }
         
         public void clearVpnProxy ()
-        {
+        {   
+        	debug ("clearing VPN Proxy");
+        	
+            mUseVPN = false;
+
             SharedPreferences prefs = TorServiceUtils.getSharedPrefs(getApplicationContext());
             Editor ePrefs = prefs.edit();            
             ePrefs.remove("pref_proxy_type");
@@ -1449,6 +1460,10 @@ public class TorService extends Service implements TorServiceConstants, TorConst
             ePrefs.remove("pref_proxy_password");
             ePrefs.commit();
             processSettings();
+            
+            Intent intent = new Intent(TorService.this, OrbotVpnService.class);
+            intent.setAction("stop");
+            startService(intent);                                              
         }
 
         
@@ -2314,6 +2329,12 @@ public class TorService extends Service implements TorServiceConstants, TorConst
             updateConfiguration("HiddenServiceDir","", false);
             
         }
+        
+        if (mUseVPN)
+        {
+        	updateConfiguration("DNSListenAddress","10.0.0.1:" + TorServiceConstants.TOR_DNS_PORT_DEFAULT,false);
+        }
+        
 
         saveConfiguration();
     
diff --git a/src/org/torproject/android/vpn/OrbotVpnService.java b/src/org/torproject/android/vpn/OrbotVpnService.java
index 315ace8..c53d288 100644
--- a/src/org/torproject/android/vpn/OrbotVpnService.java
+++ b/src/org/torproject/android/vpn/OrbotVpnService.java
@@ -41,7 +41,7 @@ import com.runjva.sourceforge.jsocks.server.ServerAuthenticatorNone;
 
 @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
 public class OrbotVpnService extends VpnService implements Handler.Callback {
-    private static final String TAG = "DrobotVpnService";
+    private static final String TAG = "OrbotVpnService";
 
     private PendingIntent mConfigureIntent;
 
@@ -60,20 +60,32 @@ public class OrbotVpnService extends VpnService implements Handler.Callback {
     @Override
     public int onStartCommand(Intent intent, int flags, int startId) {
 
-        // The handler is only used to show messages.
-        if (mHandler == null) {
-            mHandler = new Handler(this);
-        }
-
-        // Stop the previous session by interrupting the thread.
-        if (mThreadVPN == null || (!mThreadVPN.isAlive()))
-        {
-       	    enableAppRouting ();
-            setupTun2Socks();               
-        }
+    	String action = intent.getAction();
+    	
+    	if (action.equals("start"))
+    	{
+	    	Log.d(TAG,"starting OrbotVPNService service!");
+	
+	        // The handler is only used to show messages.
+	        if (mHandler == null) {
+	            mHandler = new Handler(this);
+	        }
+	
+	        // Stop the previous session by interrupting the thread.
+	        if (mThreadVPN == null || (!mThreadVPN.isAlive()))
+	        {
+	       	    enableAppRouting ();
+	            setupTun2Socks();               
+	        }
+    	}
+    	else if (action.equals("stop"))
+    	{
+    		stopVPN();    		
+    		mHandler.postDelayed(new Runnable () { public void run () { stopSelf(); }}, 1000);
+    	}
      
         
-        return START_STICKY;
+        return START_NOT_STICKY;
     }
     
     private void enableAppRouting ()
@@ -113,12 +125,21 @@ public class OrbotVpnService extends VpnService implements Handler.Callback {
 
     @Override
     public void onDestroy() {
+    	stopVPN();
+    	
+    }
+    
+    private void stopVPN ()
+    {
         if (mProxyServer != null){
             mProxyServer.stop();
+            mProxyServer = null;
         }
         if (mInterface != null){
             try {
+            	Log.d(TAG,"closing interface, destroying VPN interface");
                 mInterface.close();
+                mInterface = null;
             } catch (IOException e) {
                 // TODO Auto-generated catch block
                 e.printStackTrace();
@@ -154,14 +175,14 @@ 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 = localhost + ':' + TorServiceConstants.PORT_SOCKS_DEFAULT;
-			        	String localDNS = localhost + ':' + TorServiceConstants.TOR_DNS_PORT_DEFAULT;
+			        	String localSocks = "127.0.0.1" + ':' + TorServiceConstants.PORT_SOCKS_DEFAULT;
+			        	String localDNS = "10.0.0.1" + ':' + TorServiceConstants.TOR_DNS_PORT_DEFAULT;
 			        	
 			        	
 				        Builder builder = new Builder();
@@ -170,7 +191,7 @@ public class OrbotVpnService extends VpnService implements Handler.Callback {
 				        builder.addAddress(virtualGateway,28);
 				        builder.setSession(vpnName);	 
 				        builder.addRoute("0.0.0.0",0);	 
-				        builder.addDnsServer("8.8.8.8");
+				      //  builder.addDnsServer("8.8.8.8");
 				        
 				         // Create a new interface using the builder and save the parameters.
 				        mInterface = builder.setSession(mSessionName)





More information about the tor-commits mailing list