mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-21 23:29:52 +01:00
Watch for creation rather than updating of Tor cookie file.
Tor writes to a temporary file and then renames it over the old file, if any, so CLOSE_WRITE never occurs. The old code was working in most cases because it received IGNORED when the old file was unlinked and didn't check the event type.
This commit is contained in:
@@ -185,18 +185,15 @@ class TorPlugin implements DuplexPlugin, EventHandler, EventListener {
|
|||||||
if (used.getAndSet(true)) throw new IllegalStateException();
|
if (used.getAndSet(true)) throw new IllegalStateException();
|
||||||
// Install or update the assets if necessary
|
// Install or update the assets if necessary
|
||||||
if (!assetsAreUpToDate()) installAssets();
|
if (!assetsAreUpToDate()) installAssets();
|
||||||
LOG.info("Starting Tor");
|
// Watch for the auth cookie file being created
|
||||||
// Watch for the auth cookie file being updated
|
if (cookieFile.getParentFile().mkdirs())
|
||||||
try {
|
LOG.info("Created directory for cookie file");
|
||||||
cookieFile.getParentFile().mkdirs();
|
if (cookieFile.delete()) LOG.info("Deleted old cookie file");
|
||||||
cookieFile.createNewFile();
|
|
||||||
} catch (IOException e) {
|
|
||||||
throw new PluginException(e);
|
|
||||||
}
|
|
||||||
CountDownLatch latch = new CountDownLatch(1);
|
CountDownLatch latch = new CountDownLatch(1);
|
||||||
FileObserver obs = new WriteObserver(cookieFile, latch);
|
FileObserver obs = new CreateObserver(cookieFile, latch);
|
||||||
obs.startWatching();
|
obs.startWatching();
|
||||||
// Start a new Tor process
|
// Start a new Tor process
|
||||||
|
LOG.info("Starting Tor");
|
||||||
String torPath = torFile.getAbsolutePath();
|
String torPath = torFile.getAbsolutePath();
|
||||||
String configPath = configFile.getAbsolutePath();
|
String configPath = configFile.getAbsolutePath();
|
||||||
String pid = String.valueOf(android.os.Process.myPid());
|
String pid = String.valueOf(android.os.Process.myPid());
|
||||||
@@ -364,7 +361,7 @@ class TorPlugin implements DuplexPlugin, EventHandler, EventListener {
|
|||||||
File[] children = f.listFiles();
|
File[] children = f.listFiles();
|
||||||
if (children != null) for (File child : children) listFiles(child);
|
if (children != null) for (File child : children) listFiles(child);
|
||||||
} else {
|
} else {
|
||||||
LOG.info(f.getAbsolutePath());
|
LOG.info(f.getAbsolutePath() + " " + f.length());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -641,22 +638,6 @@ class TorPlugin implements DuplexPlugin, EventHandler, EventListener {
|
|||||||
LOG.info("Descriptor uploaded");
|
LOG.info("Descriptor uploaded");
|
||||||
}
|
}
|
||||||
|
|
||||||
private static class WriteObserver extends FileObserver {
|
|
||||||
|
|
||||||
private final CountDownLatch latch;
|
|
||||||
|
|
||||||
private WriteObserver(File file, CountDownLatch latch) {
|
|
||||||
super(file.getAbsolutePath(), CLOSE_WRITE);
|
|
||||||
this.latch = latch;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onEvent(int event, @Nullable String path) {
|
|
||||||
stopWatching();
|
|
||||||
latch.countDown();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void eventOccurred(Event e) {
|
public void eventOccurred(Event e) {
|
||||||
if (e instanceof SettingsUpdatedEvent) {
|
if (e instanceof SettingsUpdatedEvent) {
|
||||||
@@ -717,6 +698,26 @@ class TorPlugin implements DuplexPlugin, EventHandler, EventListener {
|
|||||||
if (oldConnectivityCheck != null) oldConnectivityCheck.cancel(false);
|
if (oldConnectivityCheck != null) oldConnectivityCheck.cancel(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static class CreateObserver extends FileObserver {
|
||||||
|
|
||||||
|
private final File file;
|
||||||
|
private final CountDownLatch latch;
|
||||||
|
|
||||||
|
private CreateObserver(File file, CountDownLatch latch) {
|
||||||
|
super(file.getParentFile().getAbsolutePath(), CREATE | MOVED_TO);
|
||||||
|
this.file = file;
|
||||||
|
this.latch = latch;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onEvent(int event, @Nullable String path) {
|
||||||
|
if (file.exists()) {
|
||||||
|
stopWatching();
|
||||||
|
latch.countDown();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private class NetworkStateReceiver extends BroadcastReceiver {
|
private class NetworkStateReceiver extends BroadcastReceiver {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
Reference in New Issue
Block a user