Skip to content
Snippets Groups Projects
Unverified Commit 96d2889a authored by akwizgran's avatar akwizgran
Browse files

Notify Tor controller if Tor has crashed.

parent f6cdbda5
No related branches found
No related tags found
No related merge requests found
No preview for this file type
diff --git a/README.md b/README.md
index 902d727..359cc69 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,4 @@
-
A Java library for controlling a Tor instance via its control port. It is
used in the Android app Orbot as well as others.
-To add this library to a gradle project:
-
- compile 'net.freehaven.tor.control:jtorctl:0.2'
+This fork includes patches for managing onion services.
diff --git a/net/freehaven/tor/control/TorControlCommands.java b/net/freehaven/tor/control/TorControlCommands.java
index 36482d5..14486e3 100644
--- a/net/freehaven/tor/control/TorControlCommands.java
......@@ -12,10 +25,64 @@ index 36482d5..14486e3 100644
}
diff --git a/net/freehaven/tor/control/TorControlConnection.java b/net/freehaven/tor/control/TorControlConnection.java
index 9524612..c0f2070 100644
index 9524612..eacdd66 100644
--- a/net/freehaven/tor/control/TorControlConnection.java
+++ b/net/freehaven/tor/control/TorControlConnection.java
@@ -736,11 +736,111 @@ public class TorControlConnection implements TorControlCommands {
@@ -40,10 +40,14 @@ public class TorControlConnection implements TorControlCommands {
static class Waiter {
List<ReplyLine> response; // Locking: this
+ boolean interrupted;
synchronized List<ReplyLine> getResponse() throws InterruptedException {
while (response == null) {
wait();
+ if (interrupted) {
+ throw new InterruptedException();
+ }
}
return response;
}
@@ -52,6 +56,11 @@ public class TorControlConnection implements TorControlCommands {
this.response = response;
notifyAll();
}
+
+ synchronized void interrupt() {
+ interrupted = true;
+ notifyAll();
+ }
}
static class ReplyLine {
@@ -171,7 +180,7 @@ public class TorControlConnection implements TorControlCommands {
protected synchronized List<ReplyLine> sendAndWaitForResponse(String s,
String rest) throws IOException {
- if(parseThreadException != null) throw parseThreadException;
+ if (parseThreadException != null) throw parseThreadException;
checkThread();
Waiter w = new Waiter();
if (debugOutput != null)
@@ -305,8 +314,15 @@ public class TorControlConnection implements TorControlCommands {
while (true) {
ArrayList<ReplyLine> lst = readReply();
if (lst.isEmpty()) {
- // connection has been closed remotely! end the loop!
- return;
+ // interrupted queued waiters, there won't be any response.
+ synchronized (waiters) {
+ if (!waiters.isEmpty()) {
+ for (Waiter w : waiters) {
+ w.interrupt();
+ }
+ }
+ }
+ throw new IOException("Tor is no longer running");
}
if ((lst.get(0)).status.startsWith("6"))
handleEvent(lst);
@@ -736,11 +752,111 @@ public class TorControlConnection implements TorControlCommands {
sendAndWaitForResponse("TAKEOWNERSHIP\r\n", null);
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment