[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[tor-commits] [orbot/master] improve error handling of tor startup sequence
commit b8912adbfbe7aef86801509d825f638d15a8c571
Author: Nathan Freitas <nathan@xxxxxxxxxxx>
Date: Thu Aug 28 23:23:55 2014 -0400
improve error handling of tor startup sequence
don't use executor thread pool for time critical commands
---
src/org/torproject/android/service/TorService.java | 97 +++++++++++++-------
1 file changed, 66 insertions(+), 31 deletions(-)
diff --git a/src/org/torproject/android/service/TorService.java b/src/org/torproject/android/service/TorService.java
index 8a43dba..9d91883 100644
--- a/src/org/torproject/android/service/TorService.java
+++ b/src/org/torproject/android/service/TorService.java
@@ -177,7 +177,7 @@ public class TorService extends Service implements TorServiceConstants, TorConst
try
{
- mLastProcessId = initControlConnection(1);
+ mLastProcessId = initControlConnection(3);
if (mLastProcessId != -1 && conn != null)
{
@@ -346,7 +346,7 @@ public class TorService extends Service implements TorServiceConstants, TorConst
updateSettings ();
- mExecutor.execute (new TorStarter(intent));
+ new Thread (new TorStarter(intent)).start();
return Service.START_STICKY;
@@ -380,12 +380,14 @@ public class TorService extends Service implements TorServiceConstants, TorConst
registerReceiver(mNetworkStateReceiver , mNetworkStateFilter);
mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
-
- if (mIntent != null && mIntent.getAction()!=null && mIntent.getAction().equals(Intent.ACTION_BOOT_COMPLETED))
- {
- setTorProfile(PROFILE_ON);
- }
+
}
+
+ //if this is a start on boot launch turn tor on
+ if (mIntent != null && mIntent.getAction()!=null && mIntent.getAction().equals(Intent.ACTION_BOOT_COMPLETED))
+ {
+ setTorProfile(PROFILE_ON);
+ }
}
catch (Exception e)
{
@@ -405,9 +407,7 @@ public class TorService extends Service implements TorServiceConstants, TorConst
super.onDestroy();
logNotice("TorService is being destroyed... shutting down!");
-
- //stopTor();
-
+
unregisterReceiver(mNetworkStateReceiver);
}
@@ -587,6 +587,7 @@ public class TorService extends Service implements TorServiceConstants, TorConst
catch (Exception e)
{
Log.e(TAG,"error onBind",e);
+ logNotice("error finding exiting process: " + e.toString());
}
}
@@ -738,7 +739,6 @@ public class TorService extends Service implements TorServiceConstants, TorConst
prefPersistNotifications = prefs.getBoolean(TorConstants.PREF_PERSIST_NOTIFICATIONS, true);
- updateTorConfigFile();
}
public void initTor () throws Exception
@@ -759,17 +759,25 @@ public class TorService extends Service implements TorServiceConstants, TorConst
logNotice(getString(R.string.status_starting_up));
sendCallbackStatusMessage(getString(R.string.status_starting_up));
- runTorShellCmd();
- runPolipoShellCmd();
+ boolean success = runTorShellCmd();
- if (mHasRoot && mEnableTransparentProxy)
+ if (success)
{
- disableTransparentProxy();
- enableTransparentProxy();
+ runPolipoShellCmd();
+
+ if (mHasRoot && mEnableTransparentProxy)
+ {
+ disableTransparentProxy();
+ enableTransparentProxy();
+ }
+
+ getHiddenServiceHostname ();
+ }
+ else
+ {
+ showToolbarNotification(getString(R.string.unable_to_start_tor), ERROR_NOTIFY_ID, R.drawable.ic_stat_notifyerr);
+
}
-
- getHiddenServiceHostname ();
-
}
private boolean flushTransparentProxyRules () throws Exception
@@ -908,11 +916,13 @@ public class TorService extends Service implements TorServiceConstants, TorConst
Shell mShellTor;
- private void runTorShellCmd() throws Exception
+ private boolean runTorShellCmd() throws Exception
{
String torrcPath = new File(appBinHome, TORRC_ASSET_KEY).getCanonicalPath();
+ updateTorConfigFile();
+
sendCallbackStatusMessage(getString(R.string.status_starting_up));
if (mShellTor != null)
@@ -921,13 +931,41 @@ public class TorService extends Service implements TorServiceConstants, TorConst
//start Tor in the background
mShellTor = Shell.startShell();
- SimpleCommand shellTorCommand = new SimpleCommand(fileTor.getCanonicalPath()
+ String torCmdString = fileTor.getCanonicalPath()
+ " DataDirectory " + appCacheHome.getCanonicalPath()
+ " --defaults-torrc " + torrcPath
- + " -f " + torrcPath + ".custom");
+ + " -f " + torrcPath + ".custom";
+
+ debug(torCmdString);
+
+ SimpleCommand shellTorCommand = new SimpleCommand(torCmdString + " --verify-config");
+ mShellTor.add(shellTorCommand).waitForFinish();
+
+ int exitCode = shellTorCommand.getExitCode();
+ String output = shellTorCommand.getOutput();
+
+ if (exitCode != 0 && output != null && output.length() > 0)
+ {
+ logNotice("Tor (" + exitCode + "): " + output);
+ throw new Exception ("Torrc config did not verify");
+
+ }
+
+ shellTorCommand = new SimpleCommand(torCmdString);
+ mShellTor.add(shellTorCommand).waitForFinish();
- mShellTor.add(shellTorCommand);
+ exitCode = shellTorCommand.getExitCode();
+ output = shellTorCommand.getOutput();
+
+ if (exitCode != 0 && output != null && output.length() > 0)
+ {
+ logNotice("Tor (" + exitCode + "): " + output);
+ //throw new Exception ("unable to start");
+ return false;
+ }
+
+
//now try to connect
mLastProcessId = initControlConnection (100);
@@ -948,7 +986,7 @@ public class TorService extends Service implements TorServiceConstants, TorConst
}
-
+ return true;
}
private void updatePolipoConfig () throws FileNotFoundException, IOException
@@ -1014,7 +1052,7 @@ public class TorService extends Service implements TorServiceConstants, TorConst
}
- private synchronized int initControlConnection (int maxTries) throws Exception, RuntimeException
+ private int initControlConnection (int maxTries) throws Exception, RuntimeException
{
int i = 0;
int controlPort = -1;
@@ -1275,10 +1313,10 @@ 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);
+ stopTor();
}
}
else
@@ -1573,11 +1611,8 @@ public class TorService extends Service implements TorServiceConstants, TorConst
public IBinder onBind(Intent intent) {
-
return mBinder;
}
-
-
/**
* The IRemoteInterface is defined through IDL
@@ -1592,7 +1627,7 @@ public class TorService extends Service implements TorServiceConstants, TorConst
public void setProfile (final int profileNew)
{
- mExecutor.execute(new Runnable()
+ new Thread(new Runnable()
{
@Override
@@ -1600,7 +1635,7 @@ public class TorService extends Service implements TorServiceConstants, TorConst
setTorProfile(profileNew);
}
- });
+ }).start();
}
_______________________________________________
tor-commits mailing list
tor-commits@xxxxxxxxxxxxxxxxxxxx
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits