[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[tor-commits] [orbot/master] use "SIGNAL HUP" to request Tor re-read its config
commit 21c3bfb3c55a26f80914c52537360a9de390f99e
Author: Hans-Christoph Steiner <hans@xxxxxxx>
Date: Tue Jun 9 14:27:39 2015 -0400
use "SIGNAL HUP" to request Tor re-read its config
The tor daemon supports both "SIGNAL HUP" via its control port or the UNIX
signal `kill -HUP` via the terminal as a way to trigger the tor daemon to
reload its config. This is needed for new bridges and hidden services. It
is not necessary to restart everything to add those.
https://stem.torproject.org/faq.html#how-do-i-reload-my-torrc
---
src/org/torproject/android/OrbotMainActivity.java | 42 ++++----------------
src/org/torproject/android/service/TorService.java | 31 +++++++++++++--
.../android/service/TorServiceConstants.java | 1 +
3 files changed, 36 insertions(+), 38 deletions(-)
diff --git a/src/org/torproject/android/OrbotMainActivity.java b/src/org/torproject/android/OrbotMainActivity.java
index 7b0bb31..e588e9c 100644
--- a/src/org/torproject/android/OrbotMainActivity.java
+++ b/src/org/torproject/android/OrbotMainActivity.java
@@ -447,7 +447,7 @@ public class OrbotMainActivity extends Activity implements OrbotConstants, OnLon
//can happen on exit/shutdown
}
}
-
+
private void doTorCheck ()
{
@@ -479,13 +479,11 @@ public class OrbotMainActivity extends Activity implements OrbotConstants, OnLon
if (onionHostname == null || onionHostname.length() == 0)
{
- stopTor();
- startTor();
-
+ requestTorRereadConfig();
+
new Thread () {
-
-
- public void run ()
+
+ public void run ()
{
String onionHostname = mPrefs.getString("pref_hs_hostname","");
@@ -945,37 +943,13 @@ public class OrbotMainActivity extends Activity implements OrbotConstants, OnLon
String bridgeList = Prefs.getBridgesList();
if (bridgeList != null && bridgeList.length() > 0)
{
- restartTor ();
+ requestTorRereadConfig ();
}
-
}
}
- private void restartTor ()
- {
- try
- {
- //do auto restart
- stopTor ();
-
- mStatusUpdateHandler.postDelayed(new Runnable () {
- public void run ()
- {
- try
- {
- startTor();
- }
- catch (Exception e)
- {
- Log.e(TAG,"can't start orbot",e);
- }
- }
- }, 2000);
- }
- catch (Exception e)
- {
- Log.e(TAG,"can't stop orbot",e);
- }
+ private void requestTorRereadConfig() {
+ sendIntentToService (TorServiceConstants.CMD_START);
}
public void promptStartVpnService ()
diff --git a/src/org/torproject/android/service/TorService.java b/src/org/torproject/android/service/TorService.java
index 5884f62..516b56e 100644
--- a/src/org/torproject/android/service/TorService.java
+++ b/src/org/torproject/android/service/TorService.java
@@ -344,6 +344,8 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
if (action.equals(CMD_START)) {
startTor();
// stopTor() is called when the Service is destroyed
+ } else if (action.equals(CMD_SIGNAL_HUP)) {
+ requestTorRereadConfig();
} else if (action.equals(CMD_NEWNYM)) {
newIdentity();
} else if (action.equals(CMD_FLUSH)) {
@@ -534,7 +536,28 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
}
}
+ private void requestTorRereadConfig() {
+ try {
+ conn.signal("HUP");
+ return;
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ // if that fails, try again using native utils
+ try {
+ killProcess(fileTor, "-1"); // this is -HUP
+ } catch (CannotKillException e) {
+ e.printStackTrace();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
private void killProcess(File fileProcBin) throws IOException, CannotKillException {
+ killProcess(fileProcBin, "-9"); // this is -KILL
+ }
+
+ private void killProcess(File fileProcBin, String signal) throws IOException, CannotKillException {
int procId = -1;
int killAttempts = 0;
@@ -554,10 +577,10 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
} else {
shell = Shell.startShell();
}
- shell.add(new SimpleCommand("busybox killall " + fileProcBin.getName()));
- shell.add(new SimpleCommand("toolbox kill -9 " + pidString));
- shell.add(new SimpleCommand("busybox kill -9 " + pidString));
- shell.add(new SimpleCommand("kill -9 " + pidString));
+ shell.add(new SimpleCommand("busybox killall " + signal + " " + fileProcBin.getName()));
+ shell.add(new SimpleCommand("toolbox kill " + signal + " " + pidString));
+ shell.add(new SimpleCommand("busybox kill " + signal + " " + pidString));
+ shell.add(new SimpleCommand("kill " + signal + " " + pidString));
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
diff --git a/src/org/torproject/android/service/TorServiceConstants.java b/src/org/torproject/android/service/TorServiceConstants.java
index 7a5a14a..745d74f 100644
--- a/src/org/torproject/android/service/TorServiceConstants.java
+++ b/src/org/torproject/android/service/TorServiceConstants.java
@@ -84,6 +84,7 @@ public interface TorServiceConstants {
public static final int LOG_MSG = 4;
public static final String CMD_START = "start";
+ public static final String CMD_SIGNAL_HUP = "signal_hup";
public static final String CMD_FLUSH = "flush";
public static final String CMD_NEWNYM = "newnym";
public static final String CMD_VPN = "vpn";
_______________________________________________
tor-commits mailing list
tor-commits@xxxxxxxxxxxxxxxxxxxx
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits