enable local DNS listen on 10.0.0.1 for VPN service
also add support for stopping VPNBuilder instance
This commit is contained in:
		
							parent
							
								
									ec4350ee40
								
							
						
					
					
						commit
						1852cde041
					
				|  | @ -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(); | ||||
|      | ||||
|  |  | |||
|  | @ -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) | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue