mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-19 22:29:53 +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,
|
pluginExecutor, androidExecutor, appContext,
|
||||||
crypto.getSecureRandom());
|
crypto.getSecureRandom());
|
||||||
DuplexPluginFactory tor = new TorPluginFactory(pluginExecutor,
|
DuplexPluginFactory tor = new TorPluginFactory(pluginExecutor,
|
||||||
appContext);
|
appContext, shutdownManager);
|
||||||
DuplexPluginFactory lan = new LanTcpPluginFactory(pluginExecutor);
|
DuplexPluginFactory lan = new LanTcpPluginFactory(pluginExecutor);
|
||||||
DuplexPluginFactory wan = new WanTcpPluginFactory(pluginExecutor,
|
DuplexPluginFactory wan = new WanTcpPluginFactory(pluginExecutor,
|
||||||
shutdownManager);
|
shutdownManager);
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ import net.sf.briar.api.TransportConfig;
|
|||||||
import net.sf.briar.api.TransportId;
|
import net.sf.briar.api.TransportId;
|
||||||
import net.sf.briar.api.TransportProperties;
|
import net.sf.briar.api.TransportProperties;
|
||||||
import net.sf.briar.api.crypto.PseudoRandom;
|
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.DuplexPlugin;
|
||||||
import net.sf.briar.api.plugins.duplex.DuplexPluginCallback;
|
import net.sf.briar.api.plugins.duplex.DuplexPluginCallback;
|
||||||
import net.sf.briar.api.plugins.duplex.DuplexTransportConnection;
|
import net.sf.briar.api.plugins.duplex.DuplexTransportConnection;
|
||||||
@@ -61,6 +62,7 @@ class TorPlugin implements DuplexPlugin, EventHandler {
|
|||||||
|
|
||||||
private final Executor pluginExecutor;
|
private final Executor pluginExecutor;
|
||||||
private final Context appContext;
|
private final Context appContext;
|
||||||
|
private final ShutdownManager shutdownManager;
|
||||||
private final DuplexPluginCallback callback;
|
private final DuplexPluginCallback callback;
|
||||||
private final long maxLatency, pollingInterval;
|
private final long maxLatency, pollingInterval;
|
||||||
private final File torDirectory, torFile, geoIpFile, configFile, doneFile;
|
private final File torDirectory, torFile, geoIpFile, configFile, doneFile;
|
||||||
@@ -71,10 +73,11 @@ class TorPlugin implements DuplexPlugin, EventHandler {
|
|||||||
private volatile ServerSocket socket = null;
|
private volatile ServerSocket socket = null;
|
||||||
|
|
||||||
TorPlugin(Executor pluginExecutor, Context appContext,
|
TorPlugin(Executor pluginExecutor, Context appContext,
|
||||||
DuplexPluginCallback callback, long maxLatency,
|
ShutdownManager shutdownManager, DuplexPluginCallback callback,
|
||||||
long pollingInterval) {
|
long maxLatency, long pollingInterval) {
|
||||||
this.pluginExecutor = pluginExecutor;
|
this.pluginExecutor = pluginExecutor;
|
||||||
this.appContext = appContext;
|
this.appContext = appContext;
|
||||||
|
this.shutdownManager = shutdownManager;
|
||||||
this.callback = callback;
|
this.callback = callback;
|
||||||
this.maxLatency = maxLatency;
|
this.maxLatency = maxLatency;
|
||||||
this.pollingInterval = pollingInterval;
|
this.pollingInterval = pollingInterval;
|
||||||
@@ -135,6 +138,13 @@ class TorPlugin implements DuplexPlugin, EventHandler {
|
|||||||
if(LOG.isLoggable(WARNING)) LOG.log(WARNING, e1.toString(), e1);
|
if(LOG.isLoggable(WARNING)) LOG.log(WARNING, e1.toString(), e1);
|
||||||
return false;
|
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
|
// Log the process's standard output until it detaches
|
||||||
if(LOG.isLoggable(INFO)) {
|
if(LOG.isLoggable(INFO)) {
|
||||||
Scanner stdout = new Scanner(tor.getInputStream());
|
Scanner stdout = new Scanner(tor.getInputStream());
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package net.sf.briar.plugins.tor;
|
|||||||
import java.util.concurrent.Executor;
|
import java.util.concurrent.Executor;
|
||||||
|
|
||||||
import net.sf.briar.api.TransportId;
|
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.DuplexPlugin;
|
||||||
import net.sf.briar.api.plugins.duplex.DuplexPluginCallback;
|
import net.sf.briar.api.plugins.duplex.DuplexPluginCallback;
|
||||||
import net.sf.briar.api.plugins.duplex.DuplexPluginFactory;
|
import net.sf.briar.api.plugins.duplex.DuplexPluginFactory;
|
||||||
@@ -15,10 +16,13 @@ public class TorPluginFactory implements DuplexPluginFactory {
|
|||||||
|
|
||||||
private final Executor pluginExecutor;
|
private final Executor pluginExecutor;
|
||||||
private final Context appContext;
|
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.pluginExecutor = pluginExecutor;
|
||||||
this.appContext = appContext;
|
this.appContext = appContext;
|
||||||
|
this.shutdownManager = shutdownManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
public TransportId getId() {
|
public TransportId getId() {
|
||||||
@@ -26,7 +30,7 @@ public class TorPluginFactory implements DuplexPluginFactory {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public DuplexPlugin createPlugin(DuplexPluginCallback callback) {
|
public DuplexPlugin createPlugin(DuplexPluginCallback callback) {
|
||||||
return new TorPlugin(pluginExecutor,appContext, callback, MAX_LATENCY,
|
return new TorPlugin(pluginExecutor,appContext, shutdownManager,
|
||||||
POLLING_INTERVAL);
|
callback, MAX_LATENCY, POLLING_INTERVAL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user