commit 1852cde041851b0529ef50a110a74a029bd97b02
Author: Nathan Freitas <[email protected]>
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)



_______________________________________________
tor-commits mailing list
[email protected]
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits

Reply via email to