[tor-commits] [orbot/master] multiple fixes for tor start including "auto" control port

n8fr8 at torproject.org n8fr8 at torproject.org
Mon Jun 9 22:50:39 UTC 2014


commit 22938c9ed9613115f3ceddcd92e68c24d4463511
Author: Nathan Freitas <nathan at freitas.net>
Date:   Mon Jun 9 18:35:08 2014 -0400

    multiple fixes for tor start including "auto" control port
    also try to kill hung tor process
---
 res/raw/torrc                                      |    4 +-
 src/org/torproject/android/Orbot.java              |    6 +-
 src/org/torproject/android/service/TorService.java |  146 +++++++++++++-------
 .../android/service/TorServiceConstants.java       |    3 +-
 4 files changed, 97 insertions(+), 62 deletions(-)

diff --git a/res/raw/torrc b/res/raw/torrc
index e68d169..aade84c 100644
--- a/res/raw/torrc
+++ b/res/raw/torrc
@@ -1,6 +1,6 @@
 Log notice stdout
-ControlListenAddress 127.0.0.1
-ControlPort 9051
+ControlPortWriteToFile /data/data/org.torproject.android/app_bin/control.txt
+ControlPort auto
 CookieAuthentication 1
 TransPort 9040
 TransListenAddress 127.0.0.1
diff --git a/src/org/torproject/android/Orbot.java b/src/org/torproject/android/Orbot.java
index 2f80ea1..48deae5 100644
--- a/src/org/torproject/android/Orbot.java
+++ b/src/org/torproject/android/Orbot.java
@@ -652,15 +652,11 @@ public class Orbot extends ActionBarActivity implements TorConstants, OnLongClic
 			
 			if (showWizard)
 			{
-			
-				
 				Editor pEdit = mPrefs.edit();
 				pEdit.putBoolean("show_wizard",false);
 				pEdit.commit();
-	
-				startWizard();
 				
-
+				startWizard();
 			}
 			
 		}
diff --git a/src/org/torproject/android/service/TorService.java b/src/org/torproject/android/service/TorService.java
index f1b80ed..0e44545 100644
--- a/src/org/torproject/android/service/TorService.java
+++ b/src/org/torproject/android/service/TorService.java
@@ -8,10 +8,12 @@
 package org.torproject.android.service;
 
 
+import java.io.BufferedReader;
 import java.io.DataInputStream;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
+import java.io.FileReader;
 import java.io.FileWriter;
 import java.io.IOException;
 import java.io.PrintWriter;
@@ -491,7 +493,7 @@ public class TorService extends Service implements TorServiceConstants, TorConst
 			conn = null;
 		}
     	
-
+    	killProcess(fileTor);
 		killProcess(filePolipo);
 		killProcess(fileObfsclient);
 		
@@ -551,27 +553,27 @@ public class TorService extends Service implements TorServiceConstants, TorConst
 		String version = prefs.getString(PREF_BINARY_TOR_VERSION_INSTALLED,null);
 
 		logNotice("checking binary version: " + version);
+
+		stopTor();
+		
+    	TorResourceInstaller installer = new TorResourceInstaller(this, appBinHome); 
+		boolean success = installer.installTorrc();
 		
-		if (version == null || (!version.equals(BINARY_TOR_VERSION)))
+		if (version == null || (!version.equals(BINARY_TOR_VERSION)) || (!fileTor.exists()))
 		{
-			stopTor();
-			
 			logNotice("upgrading binaries to latest version: " + BINARY_TOR_VERSION);
 			
-			TorResourceInstaller installer = new TorResourceInstaller(this, appBinHome); 
-			boolean success = installer.installResources();
+			success = installer.installResources();
 			
 			if (success)
 				prefs.edit().putString(PREF_BINARY_TOR_VERSION_INSTALLED,BINARY_TOR_VERSION).commit();	
 		}
 		else if (!fileTorRc.exists())
 		{
-			stopTor();
 
 			logNotice("upgrading binaries to latest version: " + BINARY_TOR_VERSION);
 			
-			TorResourceInstaller installer = new TorResourceInstaller(this, appBinHome); 
-			boolean success = installer.installResources();
+			success = installer.installResources();
 
 			if (success)
 				prefs.edit().putString(PREF_BINARY_TOR_VERSION_INSTALLED,BINARY_TOR_VERSION).commit();
@@ -763,7 +765,6 @@ public class TorService extends Service implements TorServiceConstants, TorConst
 		
 		shell.add(cmdTor);
 		
-		
 		Thread.sleep(torRetryWaitTimeMS);
 		
 		//now try to connect
@@ -785,11 +786,13 @@ public class TorService extends Service implements TorServiceConstants, TorConst
 			logNotice("Tor started; process id=" + mLastProcessId);
 			
 			processSettingsImpl();
+			
+			startTorMinder ();
+
 	    }
 		
 		shell.close();
 		
-		startTorMinder ();
     }
     
     private void runPolipoShellCmd () throws Exception
@@ -869,63 +872,69 @@ public class TorService extends Service implements TorServiceConstants, TorConst
 			}
 			else
 			{
-			
 				while (conn == null && i++ < maxAttempts)
 				{
 					try
 					{
-						logNotice( "Connecting to control port: " + TOR_CONTROL_PORT);
 						
-						torConnSocket = new Socket(IP_LOCALHOST, TOR_CONTROL_PORT);
-						torConnSocket.setSoTimeout(CONTROL_SOCKET_TIMEOUT);
+						int controlPort = getControlPort();
+						logNotice( "Connecting to control port: " + controlPort);
 						
-				        conn = TorControlConnection.getConnection(torConnSocket);
-				        
-				        if (ENABLE_DEBUG_LOG)
-				        {
-				        	conn.setDebugging(System.out);
-				        	
-				        }
-				        
-						logNotice( "SUCCESS connected to Tor control port");
-				        
-				        File fileCookie = new File(appCacheHome, TOR_CONTROL_COOKIE);
-				        
-				        if (fileCookie.exists())
-				        {
-					        byte[] cookie = new byte[(int)fileCookie.length()];
-					        DataInputStream fis = new DataInputStream(new FileInputStream(fileCookie));
-					        fis.read(cookie);
-					        fis.close();
-					        conn.authenticate(cookie);
-					        		
-					        logNotice( "SUCCESS - authenticated to control port");
+						if (controlPort != -1)
+						{
+							torConnSocket = new Socket(IP_LOCALHOST, controlPort);
+							torConnSocket.setSoTimeout(CONTROL_SOCKET_TIMEOUT);
+							
+					        conn = TorControlConnection.getConnection(torConnSocket);
 					        
-							sendCallbackStatusMessage(getString(R.string.tor_process_starting) + ' ' + getString(R.string.tor_process_complete));
-		
-					        addEventHandler();
-					    
-					        String torProcId = conn.getInfo("process/pid");
+					        if (ENABLE_DEBUG_LOG)
+					        {
+					        	conn.setDebugging(System.out);
+					        	
+					        }
 					        
-					        return Integer.parseInt(torProcId);
+							logNotice( "SUCCESS connected to Tor control port");
+					        
+					        File fileCookie = new File(appCacheHome, TOR_CONTROL_COOKIE);
+					        
+					        if (fileCookie.exists())
+					        {
+						        byte[] cookie = new byte[(int)fileCookie.length()];
+						        DataInputStream fis = new DataInputStream(new FileInputStream(fileCookie));
+						        fis.read(cookie);
+						        fis.close();
+						        conn.authenticate(cookie);
+						        		
+						        logNotice( "SUCCESS - authenticated to control port");
+						        
+								sendCallbackStatusMessage(getString(R.string.tor_process_starting) + ' ' + getString(R.string.tor_process_complete));
+			
+						        addEventHandler();
+						    
+						        String torProcId = conn.getInfo("process/pid");
+						        
+						        return Integer.parseInt(torProcId);
+						        
+					        }
+					        else
+					        {
+					        	logNotice ("Tor authentication cookie does not exist yet");
+					        	conn = null;
+					        			
+					        }
+						}
 					        
-				        }
-				        else
-				        {
-				        	logNotice ("Tor authentication cookie does not exist yet; trying again...");
-				        	conn = null;
-				        			
-				        }
 					}
 					catch (Exception ce)
 					{
 						conn = null;
-						logNotice( "Error connecting to Tor local control port");
-						 
-						//Log.d(TAG,"Attempt: Error connecting to control port: " + ce.getLocalizedMessage(),ce);
+						logException( "Error connecting to Tor local control port",ce);
 					}
 					
-					
+					try {
+						logNotice("waiting...");
+						Thread.sleep(5000); }
+					catch (Exception e){}
 					
 				}
 			}		
@@ -934,6 +943,35 @@ public class TorService extends Service implements TorServiceConstants, TorConst
 
 	}
 	
+	private int getControlPort ()
+	{
+		try
+		{
+			File fileControl = new File(appBinHome,"control.txt");
+			
+			logNotice("Reading control port config file: " + fileControl.getAbsolutePath());
+			BufferedReader bufferedReader = new BufferedReader(new FileReader(fileControl));
+			String line = bufferedReader.readLine();
+			
+			//PORT=127.0.0.1:45051
+			
+			if (line != null)
+			{
+				String[] lineParts = line.split(":");
+				return Integer.parseInt(lineParts[1]);
+			}
+			
+			
+		}
+		catch (Exception e)
+		{	
+			logException("unable to get control port",e);
+		}
+		
+
+		return -1;
+	}
+	
 	private void checkAddressAndCountry () throws IOException
 	{
 
@@ -1046,6 +1084,7 @@ public class TorService extends Service implements TorServiceConstants, TorConst
 	   		     catch (Exception e)
 	   		     {				
 	   		    	
+	   		    	 stopTor();
 	   		    	logException("Unable to start Tor: " + e.toString(),e);	
 	   		    	 currentStatus = STATUS_OFF;
 	   		    	 showToolbarNotification(getString(R.string.unable_to_start_tor) + ": " + e.getMessage(), ERROR_NOTIFY_ID, R.drawable.ic_stat_notifyerr, false);
@@ -2103,6 +2142,7 @@ public class TorService extends Service implements TorServiceConstants, TorConst
 							
 						} catch (Exception e1) {
 							logException("Error in Tor heartbeat checker",e1);
+
 						} 
 					}
 				
diff --git a/src/org/torproject/android/service/TorServiceConstants.java b/src/org/torproject/android/service/TorServiceConstants.java
index da67936..e50c416 100644
--- a/src/org/torproject/android/service/TorServiceConstants.java
+++ b/src/org/torproject/android/service/TorServiceConstants.java
@@ -53,7 +53,6 @@ public interface TorServiceConstants {
 	
 	//what is says!
 	public final static String IP_LOCALHOST = "127.0.0.1";
-	public final static int TOR_CONTROL_PORT = 9051;
 	public final static int UPDATE_TIMEOUT = 1000;
 	public final static int TOR_TRANSPROXY_PORT = 9040;
 	public final static int STANDARD_DNS_PORT = 53;
@@ -77,7 +76,7 @@ public interface TorServiceConstants {
     public static final int DISABLE_TOR_MSG = 3;
     public static final int LOG_MSG = 4;
     
-    public static final String BINARY_TOR_VERSION = "0.2.4.22-openssl1.0.1h";
+    public static final String BINARY_TOR_VERSION = "0.2.4.22-openssl1.0.1h.2";
     public static final String PREF_BINARY_TOR_VERSION_INSTALLED = "BINARY_TOR_VERSION_INSTALLED";
     
     //obfsproxy 





More information about the tor-commits mailing list