[or-cvs] r22685: {projects} fixed issue with force close crash on install (projects/android/trunk/Orbot/src/org/torproject/android/service)

Nathan Freitas nathan at freitas.net
Sat Jul 24 03:24:30 UTC 2010


Author: n8fr8
Date: 2010-07-24 03:24:30 +0000 (Sat, 24 Jul 2010)
New Revision: 22685

Modified:
   projects/android/trunk/Orbot/src/org/torproject/android/service/TorBinaryInstaller.java
   projects/android/trunk/Orbot/src/org/torproject/android/service/TorService.java
   projects/android/trunk/Orbot/src/org/torproject/android/service/TorServiceConstants.java
Log:
fixed issue with force close crash on install

Modified: projects/android/trunk/Orbot/src/org/torproject/android/service/TorBinaryInstaller.java
===================================================================
--- projects/android/trunk/Orbot/src/org/torproject/android/service/TorBinaryInstaller.java	2010-07-23 23:21:25 UTC (rev 22684)
+++ projects/android/trunk/Orbot/src/org/torproject/android/service/TorBinaryInstaller.java	2010-07-24 03:24:30 UTC (rev 22685)
@@ -17,8 +17,13 @@
 public class TorBinaryInstaller implements TorServiceConstants {
 
 	
-	public TorBinaryInstaller ()
+	String installPath = null;
+	String apkPath = null;
+	
+	public TorBinaryInstaller (String installPath, String apkPath)
 	{
+		this.installPath = installPath;
+		this.apkPath = apkPath;
 	}
 	
 	/*
@@ -26,10 +31,11 @@
 	 */
 	public void start (boolean force)
 	{
-		boolean torBinaryExists = new File(TOR_BINARY_INSTALL_PATH).exists();
+		
+		boolean torBinaryExists = new File(installPath + TOR_BINARY_ASSET_KEY).exists();
 		Log.i(TAG,"Tor binary exists=" + torBinaryExists);
 		
-		boolean privoxyBinaryExists = new File(PRIVOXY_INSTALL_PATH).exists();
+		boolean privoxyBinaryExists = new File(installPath + PRIVOXY_ASSET_KEY).exists();
 		Log.i(TAG,"Privoxy binary exists=" + privoxyBinaryExists);
 		
 		if (!(torBinaryExists && privoxyBinaryExists) || force)
@@ -45,7 +51,7 @@
 		
 		try
 		{
-			
+			/*
 			String apkPath = APK_PATH;
 			
 			int apkIdx = 1;
@@ -56,21 +62,23 @@
 				
 				Log.i(TAG,"Could not find APK. Trying new path: " + apkPath);
 			}
+			*/
 			
 			
+			
 			ZipFile zip = new ZipFile(apkPath);
 	
 			ZipEntry zipen = zip.getEntry(TOR_BINARY_ZIP_KEY);
-			streamToFile(zip.getInputStream(zipen),TOR_BINARY_INSTALL_PATH);
+			streamToFile(zip.getInputStream(zipen),installPath + TOR_BINARY_ASSET_KEY);
 			
 			zipen = zip.getEntry(TORRC_ZIP_KEY);
-			streamToFile(zip.getInputStream(zipen),TORRC_INSTALL_PATH);
+			streamToFile(zip.getInputStream(zipen),installPath + TORRC_ASSET_KEY);
 			
 			zipen = zip.getEntry(PRIVOXY_ZIP_KEY);
-			streamToFile(zip.getInputStream(zipen),PRIVOXY_INSTALL_PATH);
+			streamToFile(zip.getInputStream(zipen),installPath + PRIVOXY_ASSET_KEY);
 			
 			zipen = zip.getEntry(PRIVOXYCONFIG_ZIP_KEY);
-			streamToFile(zip.getInputStream(zipen),PRIVOXYCONFIG_INSTALL_PATH);
+			streamToFile(zip.getInputStream(zipen),installPath + PRIVOXYCONFIG_ASSET_KEY);
 			
 			
 			zip.close();

Modified: projects/android/trunk/Orbot/src/org/torproject/android/service/TorService.java
===================================================================
--- projects/android/trunk/Orbot/src/org/torproject/android/service/TorService.java	2010-07-23 23:21:25 UTC (rev 22684)
+++ projects/android/trunk/Orbot/src/org/torproject/android/service/TorService.java	2010-07-24 03:24:30 UTC (rev 22685)
@@ -51,25 +51,25 @@
     
     private boolean hasRoot = false;
     
+    private String appHome = null;
+    private String torBinaryPath = null;
+    private String privoxyPath = null;
+    
     /** Called when the activity is first created. */
     public void onCreate() {
     	super.onCreate();
        
     	Log.i(TAG,"TorService: onCreate");
-    	
-    	checkTorBinaries();
-    	
-    	findExistingProc ();
-    	
-    	_torInstance = this;
 
-    	hasRoot = TorServiceUtils.hasRoot();
-    	 
+    
+
+      
     }
     
+    
     private boolean findExistingProc ()
     {
-    	 int procId = TorServiceUtils.findProcessId(TorServiceConstants.TOR_BINARY_INSTALL_PATH);
+    	 int procId = TorServiceUtils.findProcessId(torBinaryPath);
 
  		if (procId != -1)
  		{
@@ -274,7 +274,7 @@
     	
     	StringBuilder log = new StringBuilder();
     	
-		int procId = TorServiceUtils.findProcessId(TorServiceConstants.TOR_BINARY_INSTALL_PATH);
+		int procId = TorServiceUtils.findProcessId(torBinaryPath);
 
 		while (procId != -1)
 		{
@@ -284,10 +284,10 @@
 			String[] cmd = { SHELL_CMD_KILL + ' ' + procId + "" };
 			TorServiceUtils.doShellCommand(cmd,log, false, false);
 
-			procId = TorServiceUtils.findProcessId(TorServiceConstants.TOR_BINARY_INSTALL_PATH);
+			procId = TorServiceUtils.findProcessId(torBinaryPath);
 		}
 		
-		procId = TorServiceUtils.findProcessId(TorServiceConstants.PRIVOXY_INSTALL_PATH);
+		procId = TorServiceUtils.findProcessId(privoxyPath);
 
 		while (procId != -1)
 		{
@@ -297,7 +297,7 @@
 
 			TorServiceUtils.doShellCommand(cmd,log, false, false);
 
-			procId = TorServiceUtils.findProcessId(TorServiceConstants.PRIVOXY_INSTALL_PATH);
+			procId = TorServiceUtils.findProcessId(privoxyPath);
 		}
 		
     }
@@ -311,22 +311,77 @@
 		
     }
     
+    private String findAPK ()
+    {
+    	
+    	String apkBase = "/data/app/";
+    	
+    	String APK_EXT = ".apk";
+    	
+    	
+    	String buildPath = apkBase + TOR_APP_USERNAME + APK_EXT;
+    	Log.i(TAG, "Checking APK location: " + buildPath);
+		
+    	File fileApk = new File(buildPath);
+    	
+    	if (fileApk.exists())
+    		return fileApk.getAbsolutePath();
+    	
+    	for (int i = 0; i < 10; i++)
+    	{
+    		buildPath = apkBase + TOR_APP_USERNAME + '-' + i + APK_EXT;
+    		fileApk = new File(buildPath);
+    	
+    		Log.i(TAG, "Checking APK location: " + buildPath);
+    		
+    		if (fileApk.exists())
+    			return fileApk.getAbsolutePath();
+    	}
+    	
+    	return null;
+    }
+    
     private boolean checkTorBinaries ()
     {
+    	//android.os.Debug.waitForDebugger();
+    	
+    	
+    	Log.i(TAG,"checking Tor binaries");
+    	
+    	//appHome = getApplicationContext().getFilesDir().getAbsolutePath();
+    	appHome = "/data/data/" + TOR_APP_USERNAME + "/";
+    	
+    	Log.i(TAG,"appHome=" + appHome);
+    	
+    	String apkPath = findAPK();
+    	
+    	Log.i(TAG,"found apk at: " + apkPath);
+    	
+    	boolean apkExists = new File(apkPath).exists();
+    	
+    	if (!apkExists)
+    	{
+    		Log.w(TAG,"APK file not found at: " + apkPath);
+    		Log.w(TAG,"Binary installation aborted");
+    		return false;
+    	}
+    	
+    	torBinaryPath = appHome + '/' + TOR_BINARY_ASSET_KEY;
+    	privoxyPath = appHome + '/' + PRIVOXY_ASSET_KEY;
+    	
+		boolean torBinaryExists = new File(torBinaryPath).exists();
+		boolean privoxyBinaryExists = new File(privoxyPath).exists();
 
-		boolean torBinaryExists = new File(TOR_BINARY_INSTALL_PATH).exists();
-		boolean privoxyBinaryExists = new File(PRIVOXY_INSTALL_PATH).exists();
-
 		if (!(torBinaryExists && privoxyBinaryExists))
 		{
 			killTorProcess ();
 			
-			TorBinaryInstaller installer = new TorBinaryInstaller(); 
+			TorBinaryInstaller installer = new TorBinaryInstaller(appHome, apkPath); 
 			installer.start(true);
-		
-			torBinaryExists = new File(TOR_BINARY_INSTALL_PATH).exists();
-			privoxyBinaryExists = new File(PRIVOXY_INSTALL_PATH).exists();
 			
+			torBinaryExists = new File(torBinaryPath).exists();
+			privoxyBinaryExists = new File(privoxyPath).exists();
+			
     		if (torBinaryExists && privoxyBinaryExists)
     		{
     			logNotice(getString(R.string.status_install_success));
@@ -339,7 +394,9 @@
     		
     			logNotice(getString(R.string.status_install_fail));
 
-    			showAlert(getString(R.string.title_error),getString(R.string.status_install_fail));
+    			sendCallbackMessage(getString(R.string.status_install_fail));
+    			
+    			//showAlert(getString(R.string.title_error),getString(R.string.status_install_fail));
     		
     			return false;
     		}
@@ -349,11 +406,11 @@
 		StringBuilder log = new StringBuilder ();
 		
 		logNotice("Setting permission on Tor binary");
-		String[] cmd1 = {SHELL_CMD_CHMOD + ' ' + CHMOD_EXE_VALUE + ' ' + TOR_BINARY_INSTALL_PATH};
+		String[] cmd1 = {SHELL_CMD_CHMOD + ' ' + CHMOD_EXE_VALUE + ' ' + torBinaryPath};
 		TorServiceUtils.doShellCommand(cmd1, log, false, true);
 		
 		logNotice("Setting permission on Privoxy binary");
-		String[] cmd2 = {SHELL_CMD_CHMOD + ' ' + CHMOD_EXE_VALUE + ' ' + PRIVOXY_INSTALL_PATH};
+		String[] cmd2 = {SHELL_CMD_CHMOD + ' ' + CHMOD_EXE_VALUE + ' ' + privoxyPath};
 		TorServiceUtils.doShellCommand(cmd2, log, false, true);
 				
 		return true;
@@ -363,6 +420,9 @@
     {
     	   // android.os.Debug.waitForDebugger();
     	
+
+	    	
+    	
     		currentStatus = STATUS_CONNECTING;
 
     		logNotice(getString(R.string.status_starting_up));
@@ -417,11 +477,13 @@
 		
 		Log.i(TAG,"Starting tor process");
 		
-		String[] torCmd = {TOR_BINARY_INSTALL_PATH + ' ' + TOR_COMMAND_LINE_ARGS};
+		String torrcPath = appHome + TORRC_ASSET_KEY;
+		
+		String[] torCmd = {torBinaryPath + " -f " + torrcPath  + " || exit\n"};
 		TorServiceUtils.doShellCommand(torCmd, log, false, false);
 	
 		Thread.sleep(1000);
-		int procId = TorServiceUtils.findProcessId(TorServiceConstants.TOR_BINARY_INSTALL_PATH);
+		int procId = TorServiceUtils.findProcessId(torBinaryPath);
 
 		int attempts = 0;
 		
@@ -432,7 +494,7 @@
 			logNotice(torCmd[0]);
 			
 			TorServiceUtils.doShellCommand(torCmd, log, false, false);
-			procId = TorServiceUtils.findProcessId(TorServiceConstants.TOR_BINARY_INSTALL_PATH);
+			procId = TorServiceUtils.findProcessId(torBinaryPath);
 			
 			if (procId == -1)
 			{
@@ -463,7 +525,7 @@
     
     private void runPrivoxyShellCmd () throws Exception
     {
-			int privoxyProcId = TorServiceUtils.findProcessId(TorServiceConstants.PRIVOXY_INSTALL_PATH);
+			int privoxyProcId = TorServiceUtils.findProcessId(privoxyPath);
 
 			StringBuilder log = null;
 			
@@ -473,8 +535,10 @@
     		{
     			log = new StringBuilder();
     			
+    			String privoxyConfigPath = appHome + PRIVOXYCONFIG_ASSET_KEY;
+    			
     			String[] cmds = 
-    			{ PRIVOXY_INSTALL_PATH + " " + PRIVOXY_COMMAND_LINE_ARGS };
+    			{ privoxyPath + " " + privoxyConfigPath };
     			
     			logNotice (cmds[0]);
     			
@@ -483,7 +547,7 @@
     			//wait one second to make sure it has started up
     			Thread.sleep(1000);
     			
-    			privoxyProcId = TorServiceUtils.findProcessId(TorServiceConstants.PRIVOXY_INSTALL_PATH);
+    			privoxyProcId = TorServiceUtils.findProcessId(privoxyPath);
     			
     			if (privoxyProcId == -1)
     			{
@@ -534,9 +598,11 @@
 
 			        Log.i(TAG,"SUCCESS connected to control port");
 			        
-			        File fileCookie = new File(TOR_CONTROL_AUTH_COOKIE);
+			        String torAuthCookie = appHome + "data/control_auth_cookie";
+			        
+			        File fileCookie = new File(torAuthCookie);
 			        byte[] cookie = new byte[(int)fileCookie.length()];
-			        new FileInputStream(new File(TOR_CONTROL_AUTH_COOKIE)).read(cookie);
+			        new FileInputStream(new File(torAuthCookie)).read(cookie);
 			        conn.authenticate(cookie);
 			        		
 			        Log.i(TAG,"SUCCESS authenticated to control port");
@@ -772,16 +838,27 @@
 		
 	}
 	
-	private Intent launchContext = null;
-	
     public IBinder onBind(Intent intent) {
         // Select the interface to return.  If your service only implements
         // a single interface, you can just return it here without checking
         // the Intent.
-        if (ITorService.class.getName().equals(intent.getAction())) {
+        
+    	if (appHome == null)
+    	{
+    	    checkTorBinaries();
+        	
+        	findExistingProc ();
+        	
+        	_torInstance = this;
+
+        	hasRoot = TorServiceUtils.hasRoot();
+    	}
+    	
+    	if (ITorService.class.getName().equals(intent.getAction())) {
             return mBinder;
         }
-      
+        
+
         return null;
     }
 	

Modified: projects/android/trunk/Orbot/src/org/torproject/android/service/TorServiceConstants.java
===================================================================
--- projects/android/trunk/Orbot/src/org/torproject/android/service/TorServiceConstants.java	2010-07-23 23:21:25 UTC (rev 22684)
+++ projects/android/trunk/Orbot/src/org/torproject/android/service/TorServiceConstants.java	2010-07-24 03:24:30 UTC (rev 22685)
@@ -9,40 +9,40 @@
 	public final static String TOR_APP_USERNAME = "org.torproject.android";
 	
 	//home directory of Android application
-	public final static String TOR_HOME = "/data/data/" + TOR_APP_USERNAME + "/";
+//	public final static String TOR_HOME = "/data/data/" + TOR_APP_USERNAME + "/";
 
-	public final static String TOR_HOME_DATA_DIR = TOR_HOME + "data/";
+	//public final static String TOR_HOME_DATA_DIR = TOR_HOME + "data/";
 	
 	//name of the tor C binary
 	public final static String TOR_BINARY_ASSET_KEY = "tor";	
-	public final static String TOR_BINARY_INSTALL_PATH = TOR_HOME + TOR_BINARY_ASSET_KEY; //path to install the Tor binary too
+//	public final static String TOR_BINARY_INSTALL_PATH = TOR_HOME + TOR_BINARY_ASSET_KEY; //path to install the Tor binary too
 	public final static String TOR_BINARY_ZIP_KEY = "assets/" + TOR_BINARY_ASSET_KEY;//key of the tor binary in the Zip file
 	
 	//torrc (tor config file)
 	public final static String TORRC_ASSET_KEY = "torrc";
-	public final static String TORRC_INSTALL_PATH = TOR_HOME + TORRC_ASSET_KEY; //path to install torrc to within the android app data folder
+//	public final static String TORRC_INSTALL_PATH = TOR_HOME + TORRC_ASSET_KEY; //path to install torrc to within the android app data folder
 	public final static String TORRC_ZIP_KEY = "assets/" + TORRC_ASSET_KEY; //key of the torrc file in the Zip file
 	//how to launch tor
-	public final static String TOR_COMMAND_LINE_ARGS = "-f " + TORRC_INSTALL_PATH  + " || exit\n";
+//	public final static String TOR_COMMAND_LINE_ARGS = "-f " + TORRC_INSTALL_PATH  + " || exit\n";
 		
 	//privoxy
 	public final static String PRIVOXY_ASSET_KEY = "privoxy";
-	public final static String PRIVOXY_INSTALL_PATH = TOR_HOME + PRIVOXY_ASSET_KEY; //path to install privoxy to within the android app data folder
+//	public final static String PRIVOXY_INSTALL_PATH = TOR_HOME + PRIVOXY_ASSET_KEY; //path to install privoxy to within the android app data folder
 	public final static String PRIVOXY_ZIP_KEY = "assets/" + PRIVOXY_ASSET_KEY; //key of the privoxy file in the Zip file
 	
 	//privoxy.config
 	public final static String PRIVOXYCONFIG_ASSET_KEY = "privoxy.config";
-	public final static String PRIVOXYCONFIG_INSTALL_PATH = TOR_HOME + PRIVOXYCONFIG_ASSET_KEY; //path to install privoxy to within the android app data folder
+//	public final static String PRIVOXYCONFIG_INSTALL_PATH = TOR_HOME + PRIVOXYCONFIG_ASSET_KEY; //path to install privoxy to within the android app data folder
 	public final static String PRIVOXYCONFIG_ZIP_KEY = "assets/" + PRIVOXYCONFIG_ASSET_KEY; //key of the privoxy file in the Zip file
 	
 	//how to launch privoxy
-	public final static String PRIVOXY_COMMAND_LINE_ARGS = ' ' + PRIVOXYCONFIG_INSTALL_PATH + " || exit\n";
+//	public final static String PRIVOXY_COMMAND_LINE_ARGS = ' ' + PRIVOXYCONFIG_INSTALL_PATH + " || exit\n";
 
 	//where to send the notices log
-	public final static String TOR_LOG_PATH = TOR_HOME + "notices.log";
+//	public final static String TOR_LOG_PATH = TOR_HOME + "notices.log";
 	
 	//control port cookie path
-	public final static String TOR_CONTROL_AUTH_COOKIE = TOR_HOME_DATA_DIR + "control_auth_cookie";
+//	public final static String TOR_CONTROL_AUTH_COOKIE = TOR_HOME_DATA_DIR + "control_auth_cookie";
 
 	
 	//various console cmds
@@ -56,7 +56,7 @@
 	
 	//path of the installed APK file
 	public final static String APK_PATH = "/data/app/org.torproject.android.apk";
-	public final static String APK_PATH_BASE = "/data/app/org.torproject.android";
+	public final static String APK_PATH_BASE = "/data/app";
 
 	
 	



More information about the tor-commits mailing list