[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[or-cvs] r9193: torctl: Apply patch from Karsten Loesing to fix several bugs (in torctl/trunk: . java/net/freehaven/tor/control java/net/freehaven/tor/control/examples)
- To: or-cvs@xxxxxxxxxxxxx
- Subject: [or-cvs] r9193: torctl: Apply patch from Karsten Loesing to fix several bugs (in torctl/trunk: . java/net/freehaven/tor/control java/net/freehaven/tor/control/examples)
- From: nickm@xxxxxxxx
- Date: Sun, 24 Dec 2006 23:37:57 -0500 (EST)
- Delivered-to: archiver@seul.org
- Delivered-to: or-cvs-outgoing@seul.org
- Delivered-to: or-cvs@seul.org
- Delivery-date: Sun, 24 Dec 2006 23:38:11 -0500
- Reply-to: or-talk@xxxxxxxxxxxxx
- Sender: owner-or-cvs@xxxxxxxxxxxxx
Author: nickm
Date: 2006-12-24 23:37:53 -0500 (Sun, 24 Dec 2006)
New Revision: 9193
Modified:
torctl/trunk/ChangeLog
torctl/trunk/java/net/freehaven/tor/control/TorControlConnection.java
torctl/trunk/java/net/freehaven/tor/control/TorControlConnection0.java
torctl/trunk/java/net/freehaven/tor/control/TorControlConnection1.java
torctl/trunk/java/net/freehaven/tor/control/examples/Main.java
Log:
torctl: Apply patch from Karsten Loesing to fix several bugs when sending a signal that closes tor, or when tor shuts down on its own.
Modified: torctl/trunk/ChangeLog
===================================================================
--- torctl/trunk/ChangeLog 2006-12-25 03:55:37 UTC (rev 9192)
+++ torctl/trunk/ChangeLog 2006-12-25 04:37:53 UTC (rev 9193)
@@ -6,3 +6,6 @@
- Fix behavior of signal in TorControlConnection0.java (from Oliver Rau)
- Throw TorControlError, not Error.
- Implement resetConf method in controllers.
+ - Fix bug when sending a signal that kills Tor; avoid a
+ NullPointerException when Tor exits. (java; from Karsten Loesing)
+
Modified: torctl/trunk/java/net/freehaven/tor/control/TorControlConnection.java
===================================================================
--- torctl/trunk/java/net/freehaven/tor/control/TorControlConnection.java 2006-12-25 03:55:37 UTC (rev 9192)
+++ torctl/trunk/java/net/freehaven/tor/control/TorControlConnection.java 2006-12-25 04:37:53 UTC (rev 9193)
@@ -165,6 +165,10 @@
/** Send a signal to the Tor process. */
public abstract void signal(String signal) throws IOException;
+ /** Send a signal to the Tor process to shut it down or halt it.
+ * Does not wait for a response. */
+ public abstract void shutdownTor(String signal) throws IOException;
+
/** Tell Tor to replace incoming addresses with those as listed in 'kvLines'.
*/
public abstract Map mapAddresses(Collection kvLines) throws IOException;
Modified: torctl/trunk/java/net/freehaven/tor/control/TorControlConnection0.java
===================================================================
--- torctl/trunk/java/net/freehaven/tor/control/TorControlConnection0.java 2006-12-25 03:55:37 UTC (rev 9192)
+++ torctl/trunk/java/net/freehaven/tor/control/TorControlConnection0.java 2006-12-25 04:37:53 UTC (rev 9193)
@@ -327,6 +327,12 @@
byte[] ba = { (byte)sig };
sendAndWaitForResponse(CMD_SIGNAL, ba);
}
+
+ /** Send a signal to the Tor process to shut it down or halt it.
+ * Does not wait for a response. */
+ public void shutdownTor(String signal) throws IOException {
+ throw new RuntimeException("Method is not implemented!");
+ }
public Map mapAddresses(Collection kvLines) throws IOException {
StringBuffer sb = new StringBuffer();
Modified: torctl/trunk/java/net/freehaven/tor/control/TorControlConnection1.java
===================================================================
--- torctl/trunk/java/net/freehaven/tor/control/TorControlConnection1.java 2006-12-25 03:55:37 UTC (rev 9192)
+++ torctl/trunk/java/net/freehaven/tor/control/TorControlConnection1.java 2006-12-25 04:37:53 UTC (rev 9193)
@@ -103,6 +103,18 @@
char c;
do {
String line = input.readLine();
+ if (line == null) {
+ // if line is null, the end of the stream has been reached, i.e.
+ // the connection to Tor has been closed!
+ if (reply.isEmpty()) {
+ // nothing received so far, can exit cleanly
+ return reply;
+ } else {
+ // received half of a reply before the connection broke down
+ throw new TorControlSyntaxError("Connection to Tor " +
+ " broke down while receiving reply!");
+ }
+ }
if (debugOutput != null)
debugOutput.println("<< "+line);
if (line.length() < 4)
@@ -135,6 +147,10 @@
protected void react() throws IOException {
while (true) {
ArrayList lst = readReply();
+ if (lst.isEmpty()) {
+ // connection has been closed remotely! end the loop!
+ return;
+ }
if (((ReplyLine)lst.get(0)).status.startsWith("6"))
handleEvent(lst);
else {
@@ -383,6 +399,19 @@
String cmd = "SIGNAL " + signal + "\r\n";
sendAndWaitForResponse(cmd, null);
}
+
+ /** Send a signal to the Tor process to shut it down or halt it.
+ * Does not wait for a response. */
+ public void shutdownTor(String signal) throws IOException {
+ String s = "SIGNAL " + signal + "\r\n";
+ if (debugOutput != null)
+ debugOutput.print(">> "+s);
+ synchronized (waiters) {
+ output.write(s);
+ output.flush();
+ }
+ }
+
/** Tells the Tor server that future SOCKS requests for connections to a set of original
* addresses should be replaced with connections to the specified replacement
* addresses. Each element of <b>kvLines</b> is a String of the form
Modified: torctl/trunk/java/net/freehaven/tor/control/examples/Main.java
===================================================================
--- torctl/trunk/java/net/freehaven/tor/control/examples/Main.java 2006-12-25 03:55:37 UTC (rev 9192)
+++ torctl/trunk/java/net/freehaven/tor/control/examples/Main.java 2006-12-25 04:37:53 UTC (rev 9193)
@@ -121,7 +121,13 @@
public static void signal(String[] args) throws IOException {
// Usage signal [reload|shutdown|dump|debug|halt]
TorControlConnection conn = getConnection(args, false);
- conn.signal(args[1].toUpperCase());
+ // distinguish shutdown signal from other signals
+ if ("SHUTDOWN".equalsIgnoreCase(args[1])
+ || "HALT".equalsIgnoreCase(args[1])) {
+ conn.shutdownTor(args[1].toUpperCase());
+ } else {
+ conn.signal(args[1].toUpperCase());
+ }
}
public static void authDemo(String[] args) throws IOException {