mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-12 10:49:06 +01:00
Use a shutdown hook to kill the Tor process if the plugin isn't stopped.
This commit is contained in:
@@ -62,7 +62,7 @@ public class AndroidModule extends AbstractModule {
|
||||
pluginExecutor, androidExecutor, appContext,
|
||||
crypto.getSecureRandom());
|
||||
DuplexPluginFactory tor = new TorPluginFactory(pluginExecutor,
|
||||
appContext);
|
||||
appContext, shutdownManager);
|
||||
DuplexPluginFactory lan = new LanTcpPluginFactory(pluginExecutor);
|
||||
DuplexPluginFactory wan = new WanTcpPluginFactory(pluginExecutor,
|
||||
shutdownManager);
|
||||
|
||||
@@ -33,6 +33,7 @@ import net.sf.briar.api.TransportConfig;
|
||||
import net.sf.briar.api.TransportId;
|
||||
import net.sf.briar.api.TransportProperties;
|
||||
import net.sf.briar.api.crypto.PseudoRandom;
|
||||
import net.sf.briar.api.lifecycle.ShutdownManager;
|
||||
import net.sf.briar.api.plugins.duplex.DuplexPlugin;
|
||||
import net.sf.briar.api.plugins.duplex.DuplexPluginCallback;
|
||||
import net.sf.briar.api.plugins.duplex.DuplexTransportConnection;
|
||||
@@ -61,6 +62,7 @@ class TorPlugin implements DuplexPlugin, EventHandler {
|
||||
|
||||
private final Executor pluginExecutor;
|
||||
private final Context appContext;
|
||||
private final ShutdownManager shutdownManager;
|
||||
private final DuplexPluginCallback callback;
|
||||
private final long maxLatency, pollingInterval;
|
||||
private final File torDirectory, torFile, geoIpFile, configFile, doneFile;
|
||||
@@ -71,10 +73,11 @@ class TorPlugin implements DuplexPlugin, EventHandler {
|
||||
private volatile ServerSocket socket = null;
|
||||
|
||||
TorPlugin(Executor pluginExecutor, Context appContext,
|
||||
DuplexPluginCallback callback, long maxLatency,
|
||||
long pollingInterval) {
|
||||
ShutdownManager shutdownManager, DuplexPluginCallback callback,
|
||||
long maxLatency, long pollingInterval) {
|
||||
this.pluginExecutor = pluginExecutor;
|
||||
this.appContext = appContext;
|
||||
this.shutdownManager = shutdownManager;
|
||||
this.callback = callback;
|
||||
this.maxLatency = maxLatency;
|
||||
this.pollingInterval = pollingInterval;
|
||||
@@ -135,6 +138,13 @@ class TorPlugin implements DuplexPlugin, EventHandler {
|
||||
if(LOG.isLoggable(WARNING)) LOG.log(WARNING, e1.toString(), e1);
|
||||
return false;
|
||||
}
|
||||
// Create a shutdown hook to ensure the Tor process is destroyed
|
||||
shutdownManager.addShutdownHook(new Runnable() {
|
||||
public void run() {
|
||||
if(LOG.isLoggable(INFO)) LOG.info("Killing Tor");
|
||||
tor.destroy();
|
||||
}
|
||||
});
|
||||
// Log the process's standard output until it detaches
|
||||
if(LOG.isLoggable(INFO)) {
|
||||
Scanner stdout = new Scanner(tor.getInputStream());
|
||||
|
||||
@@ -3,6 +3,7 @@ package net.sf.briar.plugins.tor;
|
||||
import java.util.concurrent.Executor;
|
||||
|
||||
import net.sf.briar.api.TransportId;
|
||||
import net.sf.briar.api.lifecycle.ShutdownManager;
|
||||
import net.sf.briar.api.plugins.duplex.DuplexPlugin;
|
||||
import net.sf.briar.api.plugins.duplex.DuplexPluginCallback;
|
||||
import net.sf.briar.api.plugins.duplex.DuplexPluginFactory;
|
||||
@@ -15,10 +16,13 @@ public class TorPluginFactory implements DuplexPluginFactory {
|
||||
|
||||
private final Executor pluginExecutor;
|
||||
private final Context appContext;
|
||||
private final ShutdownManager shutdownManager;
|
||||
|
||||
public TorPluginFactory(Executor pluginExecutor, Context appContext) {
|
||||
public TorPluginFactory(Executor pluginExecutor, Context appContext,
|
||||
ShutdownManager shutdownManager) {
|
||||
this.pluginExecutor = pluginExecutor;
|
||||
this.appContext = appContext;
|
||||
this.shutdownManager = shutdownManager;
|
||||
}
|
||||
|
||||
public TransportId getId() {
|
||||
@@ -26,7 +30,7 @@ public class TorPluginFactory implements DuplexPluginFactory {
|
||||
}
|
||||
|
||||
public DuplexPlugin createPlugin(DuplexPluginCallback callback) {
|
||||
return new TorPlugin(pluginExecutor,appContext, callback, MAX_LATENCY,
|
||||
POLLING_INTERVAL);
|
||||
return new TorPlugin(pluginExecutor,appContext, shutdownManager,
|
||||
callback, MAX_LATENCY, POLLING_INTERVAL);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user