continue to migrate service and VPN code
This commit is contained in:
		
							parent
							
								
									d5f2c063b5
								
							
						
					
					
						commit
						1db567698d
					
				|  | @ -42,6 +42,8 @@ import org.torproject.android.service.util.Prefs; | |||
| import org.torproject.android.service.util.TorResourceInstaller; | ||||
| import org.torproject.android.service.util.TorServiceUtils; | ||||
| import org.torproject.android.service.util.Utils; | ||||
| import org.torproject.android.service.vpn.OrbotVpnManager; | ||||
| import org.torproject.android.service.vpn.TorVpnService; | ||||
| 
 | ||||
| import java.io.BufferedReader; | ||||
| import java.io.ByteArrayOutputStream; | ||||
|  | @ -314,7 +316,6 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon | |||
|                 if (action.equals(ACTION_START)) { | ||||
|                     replyWithStatus(mIntent); | ||||
|                     startTor(); | ||||
|                     // stopTor() is called when the Service is destroyed | ||||
|                 } | ||||
|                 else if (action.equals(ACTION_STATUS)) { | ||||
|                     replyWithStatus(mIntent);                     | ||||
|  | @ -328,7 +329,7 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon | |||
|                 } else if (action.equals(CMD_UPDATE_TRANS_PROXY)) { | ||||
|                     processTransparentProxying(); | ||||
|                 } else if (action.equals(CMD_VPN)) { | ||||
|                     enableVpnProxy(); | ||||
|                     startVPNService(); | ||||
|                 } else if (action.equals(CMD_VPN_CLEAR)) { | ||||
|                     clearVpnProxy(); | ||||
|                 } else if (action.equals(CMD_SET_EXIT)) { | ||||
|  | @ -745,7 +746,7 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon | |||
| 	        if (Prefs.bridgesEnabled()) | ||||
| 	        	if (Prefs.useVpn() && !mIsLollipop) | ||||
| 	        	{ | ||||
| 	        		//TODO customEnv.add("TOR_PT_PROXY=socks5://" + OrbotVpnManager.sSocksProxyLocalhost + ":" + OrbotVpnManager.sSocksProxyServerPort); | ||||
| 	        		customEnv.add("TOR_PT_PROXY=socks5://" + OrbotVpnManager.sSocksProxyLocalhost + ":" + OrbotVpnManager.sSocksProxyServerPort); | ||||
| 	        	} | ||||
| 	         | ||||
| 	      //  String baseDirectory = fileTor.getParent(); | ||||
|  | @ -1179,23 +1180,6 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon | |||
|         } | ||||
| 
 | ||||
| 
 | ||||
|     @TargetApi(14) | ||||
|         public void clearVpnProxy () | ||||
|         {    | ||||
|         	debug ("clearing VPN Proxy"); | ||||
|             Prefs.putUseVpn(false); | ||||
|             processTransparentProxying(); | ||||
| 
 | ||||
|             /** | ||||
|             if (mVpnManager != null) | ||||
|             { | ||||
|             	Intent intent = new Intent(); | ||||
|                 intent.setAction("stop"); | ||||
|             	mVpnManager.handleIntent(new Builder(), intent); | ||||
|             	mVpnManager = null; | ||||
|             }  **/ | ||||
|                               | ||||
|         } | ||||
| 
 | ||||
| 
 | ||||
|      | ||||
|  | @ -1565,7 +1549,7 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon | |||
| 	        	if (!mIsLollipop) | ||||
| 	        	{ | ||||
| 		        	String proxyType = "socks5"; | ||||
| 		        	//TODO VPN extraLines.append(proxyType + "Proxy" + ' ' + OrbotVpnManager.sSocksProxyLocalhost + ':' + OrbotVpnManager.sSocksProxyServerPort).append('\n'); | ||||
| 		        	extraLines.append(proxyType + "Proxy" + ' ' + OrbotVpnManager.sSocksProxyLocalhost + ':' + OrbotVpnManager.sSocksProxyServerPort).append('\n'); | ||||
| 	        	}; | ||||
| 			 | ||||
| 	        } | ||||
|  | @ -1978,4 +1962,26 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon | |||
|         return NOTIFY_ID; | ||||
|     } | ||||
| 
 | ||||
|     private void startVPNService () | ||||
|     { | ||||
|         Intent intentVpn = new Intent(this,TorVpnService.class); | ||||
|         intentVpn.setAction("start"); | ||||
|         intentVpn.putExtra("torSocks",mPortSOCKS); | ||||
|         startService(intentVpn); | ||||
|     } | ||||
| 
 | ||||
| 
 | ||||
|     @TargetApi(14) | ||||
|     public void clearVpnProxy () | ||||
|     { | ||||
|         debug ("clearing VPN Proxy"); | ||||
|         Prefs.putUseVpn(false); | ||||
|         processTransparentProxying(); | ||||
| 
 | ||||
|         Intent intentVpn = new Intent(this,TorVpnService.class); | ||||
|         intentVpn.setAction("stop"); | ||||
|         startService(intentVpn); | ||||
| 
 | ||||
|     } | ||||
| 
 | ||||
| } | ||||
|  |  | |||
|  | @ -1,7 +1,21 @@ | |||
| package org.torproject.android.service.transproxy; | ||||
| 
 | ||||
| import android.content.Context; | ||||
| import android.content.SharedPreferences; | ||||
| import android.content.pm.ApplicationInfo; | ||||
| import android.content.pm.PackageInfo; | ||||
| import android.content.pm.PackageManager; | ||||
| import android.graphics.drawable.Drawable; | ||||
| 
 | ||||
| import org.torproject.android.service.OrbotConstants; | ||||
| 
 | ||||
| import java.util.ArrayList; | ||||
| import java.util.Arrays; | ||||
| import java.util.Collections; | ||||
| import java.util.Iterator; | ||||
| import java.util.List; | ||||
| import java.util.StringTokenizer; | ||||
| 
 | ||||
| public class TorifiedApp implements Comparable { | ||||
| 
 | ||||
| 	private boolean enabled; | ||||
|  | @ -136,4 +150,112 @@ public class TorifiedApp implements Comparable { | |||
| 	public void setPackageName(String packageName) { | ||||
| 		this.packageName = packageName; | ||||
| 	} | ||||
| 
 | ||||
| 	public static ArrayList<TorifiedApp> getApps (Context context, SharedPreferences prefs) | ||||
| 	{ | ||||
| 
 | ||||
| 		String tordAppString = prefs.getString(OrbotConstants.PREFS_KEY_TORIFIED, ""); | ||||
| 		String[] tordApps; | ||||
| 
 | ||||
| 		StringTokenizer st = new StringTokenizer(tordAppString,"|"); | ||||
| 		tordApps = new String[st.countTokens()]; | ||||
| 		int tordIdx = 0; | ||||
| 		while (st.hasMoreTokens()) | ||||
| 		{ | ||||
| 			tordApps[tordIdx++] = st.nextToken(); | ||||
| 		} | ||||
| 
 | ||||
| 		Arrays.sort(tordApps); | ||||
| 
 | ||||
| 		//else load the apps up | ||||
| 		PackageManager pMgr = context.getPackageManager(); | ||||
| 
 | ||||
| 		List<ApplicationInfo> lAppInfo = pMgr.getInstalledApplications(0); | ||||
| 
 | ||||
| 		Iterator<ApplicationInfo> itAppInfo = lAppInfo.iterator(); | ||||
| 
 | ||||
| 		ArrayList<TorifiedApp> apps = new ArrayList<TorifiedApp>(); | ||||
| 
 | ||||
| 		ApplicationInfo aInfo = null; | ||||
| 
 | ||||
| 		int appIdx = 0; | ||||
| 		TorifiedApp app = null; | ||||
| 
 | ||||
| 		while (itAppInfo.hasNext()) | ||||
| 		{ | ||||
| 			aInfo = itAppInfo.next(); | ||||
| 
 | ||||
| 			app = new TorifiedApp(); | ||||
| 
 | ||||
| 			try { | ||||
| 				PackageInfo pInfo = pMgr.getPackageInfo(aInfo.packageName, PackageManager.GET_PERMISSIONS); | ||||
| 
 | ||||
| 				if (pInfo != null && pInfo.requestedPermissions != null) | ||||
| 				{ | ||||
| 					for (String permInfo:pInfo.requestedPermissions) | ||||
| 					{ | ||||
| 						if (permInfo.equals("android.permission.INTERNET")) | ||||
| 						{ | ||||
| 							app.setUsesInternet(true); | ||||
| 
 | ||||
| 						} | ||||
| 					} | ||||
| 
 | ||||
| 				} | ||||
| 
 | ||||
| 
 | ||||
| 			} catch (Exception e) { | ||||
| 				// TODO Auto-generated catch block | ||||
| 				e.printStackTrace(); | ||||
| 			} | ||||
| 
 | ||||
| 			if ((aInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 1) | ||||
| 			{ | ||||
| 				//System app | ||||
| 				app.setUsesInternet(true); | ||||
| 			} | ||||
| 
 | ||||
| 
 | ||||
| 			if (!app.usesInternet()) | ||||
| 				continue; | ||||
| 			else | ||||
| 			{ | ||||
| 				apps.add(app); | ||||
| 			} | ||||
| 
 | ||||
| 
 | ||||
| 			app.setEnabled(aInfo.enabled); | ||||
| 			app.setUid(aInfo.uid); | ||||
| 			app.setUsername(pMgr.getNameForUid(app.getUid())); | ||||
| 			app.setProcname(aInfo.processName); | ||||
| 			app.setPackageName(aInfo.packageName); | ||||
| 
 | ||||
| 			try | ||||
| 			{ | ||||
| 				app.setName(pMgr.getApplicationLabel(aInfo).toString()); | ||||
| 			} | ||||
| 			catch (Exception e) | ||||
| 			{ | ||||
| 				app.setName(aInfo.packageName); | ||||
| 			} | ||||
| 
 | ||||
| 
 | ||||
| 			//app.setIcon(pMgr.getApplicationIcon(aInfo)); | ||||
| 
 | ||||
| 			// check if this application is allowed | ||||
| 			if (Arrays.binarySearch(tordApps, app.getUsername()) >= 0) { | ||||
| 				app.setTorified(true); | ||||
| 			} | ||||
| 			else | ||||
| 			{ | ||||
| 				app.setTorified(false); | ||||
| 			} | ||||
| 
 | ||||
| 			appIdx++; | ||||
| 		} | ||||
| 
 | ||||
| 		Collections.sort(apps); | ||||
| 
 | ||||
| 		return apps; | ||||
| 	} | ||||
| } | ||||
|  |  | |||
|  | @ -35,11 +35,10 @@ import android.widget.Toast; | |||
| import com.runjva.sourceforge.jsocks.protocol.ProxyServer; | ||||
| import com.runjva.sourceforge.jsocks.server.ServerAuthenticatorNone; | ||||
| 
 | ||||
| import org.torproject.android.R; | ||||
| import org.torproject.android.service.R; | ||||
| import org.torproject.android.service.TorServiceConstants; | ||||
| import org.torproject.android.service.transproxy.TorifiedApp; | ||||
| import org.torproject.android.service.util.TorServiceUtils; | ||||
| import org.torproject.android.ui.AppManager; | ||||
| 
 | ||||
| import java.io.File; | ||||
| import java.io.FileNotFoundException; | ||||
|  | @ -67,7 +66,6 @@ public class OrbotVpnManager implements Handler.Callback { | |||
|     public static String sSocksProxyLocalhost = null; | ||||
|     private ProxyServer mSocksProxyServer; | ||||
| 
 | ||||
|      | ||||
|     private final static int VPN_MTU = 1500; | ||||
|      | ||||
|     private final static boolean mIsLollipop = Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP; | ||||
|  | @ -359,7 +357,7 @@ public class OrbotVpnManager implements Handler.Callback { | |||
| 	private void doLollipopAppRouting (Builder builder) throws NameNotFoundException | ||||
|     {     | ||||
|     	    | ||||
|         ArrayList<TorifiedApp> apps = AppManager.getApps(mService, TorServiceUtils.getSharedPrefs(mService.getApplicationContext())); | ||||
|         ArrayList<TorifiedApp> apps = TorifiedApp.getApps(mService, TorServiceUtils.getSharedPrefs(mService.getApplicationContext())); | ||||
|      | ||||
|         boolean perAppEnabled = false; | ||||
|          | ||||
|  |  | |||
|  | @ -19,44 +19,24 @@ import org.torproject.android.service.util.Prefs; | |||
| public class TorVpnService extends VpnService { | ||||
| 
 | ||||
| 
 | ||||
|     OrbotVpnManager mVpnManager; | ||||
| 
 | ||||
| 
 | ||||
|     @Override | ||||
|     public void onCreate() { | ||||
|         super.onCreate(); | ||||
| 
 | ||||
|         mVpnManager = new OrbotVpnManager(this); | ||||
|     } | ||||
| 
 | ||||
|     /* (non-Javadoc) | ||||
|     * @see android.app.Service#onStart(android.content.Intent, int) | ||||
|     */ | ||||
|         * @see android.app.Service#onStart(android.content.Intent, int) | ||||
|         */ | ||||
|     public int onStartCommand(Intent intent, int flags, int startId) { | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|         if (!TextUtils.isEmpty(intent.getAction())) | ||||
|         { | ||||
|             if (intent.getAction().equals("start")) | ||||
|                 enableVpnProxy();; | ||||
|         } | ||||
|         mVpnManager.handleIntent(new Builder(),intent); | ||||
| 
 | ||||
|         return Service.START_STICKY; | ||||
|     } | ||||
| 
 | ||||
| 
 | ||||
|     public void enableVpnProxy () { | ||||
|        // debug ("enabling VPN Proxy"); | ||||
| 
 | ||||
|         OrbotVpnManager vpnManager = new OrbotVpnManager(this); | ||||
| 
 | ||||
|         int portSocks = 9050; | ||||
| 
 | ||||
|         Prefs.putUseVpn(true); | ||||
|        // processTransparentProxying(); | ||||
| 
 | ||||
|         //updateConfiguration("DNSPort",TOR_VPN_DNS_LISTEN_ADDRESS + ":" + TorServiceConstants.TOR_DNS_PORT_DEFAULT,false); | ||||
| 
 | ||||
|         //  if (mVpnManager == null) | ||||
|         //   	mVpnManager = new OrbotVpnManager (this); | ||||
| 
 | ||||
|         Intent intent = new Intent(); | ||||
|         intent.setAction("start"); | ||||
|         intent.putExtra("torSocks", portSocks); | ||||
| 
 | ||||
|         vpnManager.handleIntent(new Builder(),intent); | ||||
| 
 | ||||
|     } | ||||
| } | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue