From 2d7aff428f2747675cd3c155e0733edb9a63de3b Mon Sep 17 00:00:00 2001
From: Nick Mathewson <nickm@torproject.org>
Date: Wed, 20 Jul 2005 22:48:35 +0000
Subject: [PATCH] fix debugging and listenforevents API a little

---
 .../tor/control/TorControlCommands.java       | 15 ++++++++++++
 .../tor/control/TorControlConnection1.java    | 23 ++++++++++++-------
 net/freehaven/tor/control/examples/Main.java  |  4 ++++
 3 files changed, 34 insertions(+), 8 deletions(-)

diff --git a/net/freehaven/tor/control/TorControlCommands.java b/net/freehaven/tor/control/TorControlCommands.java
index c6f4737..de3204e 100644
--- a/net/freehaven/tor/control/TorControlCommands.java
+++ b/net/freehaven/tor/control/TorControlCommands.java
@@ -65,6 +65,21 @@ public interface TorControlCommands {
     public static final short EVENT_MSG_WARN = 0x000A;
     public static final short EVENT_MSG_ERROR = 0x000B;
 
+    public static final String[] EVENT_NAMES = {
+        "(0)",
+        "CIRC",
+        "STREAM",
+        "ORCONN",
+        "BW",
+        "OLDLOG",
+        "NEWDESC",
+        "DEBUG",
+        "INFO",
+        "NOTICE",
+        "WARN",
+        "ERR",
+    };
+
     public static final byte CIRC_STATUS_LAUNCHED = 0x01;
     public static final byte CIRC_STATUS_BUILT = 0x02;
     public static final byte CIRC_STATUS_EXTENDED = 0x03;
diff --git a/net/freehaven/tor/control/TorControlConnection1.java b/net/freehaven/tor/control/TorControlConnection1.java
index df4583a..d959452 100644
--- a/net/freehaven/tor/control/TorControlConnection1.java
+++ b/net/freehaven/tor/control/TorControlConnection1.java
@@ -70,10 +70,12 @@ public class TorControlConnection1 extends TorControlConnection
             else
                 line += "\r\n";
             if (debugOutput != null)
-                debugOutput.print("<< "+line);
+                debugOutput.print(">> "+line);
             output.write(line);
         }
         output.write(".\r\n");
+        if (debugOutput != null)
+            debugOutput.print(">> .\n");
     }
 
     protected static final String quote(String s) {
@@ -100,7 +102,7 @@ public class TorControlConnection1 extends TorControlConnection
         do {
             String line = input.readLine();
             if (debugOutput != null)
-                debugOutput.print(">> "+line);
+                debugOutput.println("<< "+line);
             if (line.length() < 4)
                 throw new TorControlSyntaxError("Line (\""+line+"\") too short");
             String status = line.substring(0,3);
@@ -112,7 +114,7 @@ public class TorControlConnection1 extends TorControlConnection
                 while (true) {
                     line = input.readLine();
                     if (debugOutput != null)
-                        debugOutput.print(">> "+line);
+                        debugOutput.print("<< "+line);
                     if (line.equals("."))
                         break;
                     else if (line.startsWith("."))
@@ -148,7 +150,7 @@ public class TorControlConnection1 extends TorControlConnection
         checkThread();
         Waiter w = new Waiter();
         if (debugOutput != null)
-            debugOutput.println("<< "+s);
+            debugOutput.print(">> "+s);
         synchronized (waiters) {
             output.write(s);
             output.flush();
@@ -231,10 +233,10 @@ public class TorControlConnection1 extends TorControlConnection
         if (w instanceof java.io.PrintWriter)
             debugOutput = (java.io.PrintWriter) w;
         else
-            debugOutput = new java.io.PrintWriter(w);
+            debugOutput = new java.io.PrintWriter(w, true);
     }
     public void setDebugging(java.io.PrintStream s) {
-        debugOutput = new java.io.PrintWriter(s);
+        debugOutput = new java.io.PrintWriter(s, true);
     }
 
     public List getConf(Collection keys) throws IOException {
@@ -258,8 +260,13 @@ public class TorControlConnection1 extends TorControlConnection
     public void setEvents(List events) throws IOException {
         StringBuffer sb = new StringBuffer("SETEVENTS");
         for (Iterator it = events.iterator(); it.hasNext(); ) {
-            String event = (String) it.next();
-            sb.append(" ").append(event);
+            Object event = it.next();
+            if (event instanceof String) {
+                sb.append(" ").append((String)event);
+            } else {
+                int i = ((Number) event).intValue();
+                sb.append(" ").append(EVENT_NAMES[i]);
+            }
         }
         sb.append("\r\n");
         sendAndWaitForResponse(sb.toString(), null);
diff --git a/net/freehaven/tor/control/examples/Main.java b/net/freehaven/tor/control/examples/Main.java
index 9ff4932..fe3860a 100644
--- a/net/freehaven/tor/control/examples/Main.java
+++ b/net/freehaven/tor/control/examples/Main.java
@@ -52,6 +52,10 @@ public class Main implements TorControlCommands {
         throws IOException {
         TorControlConnection conn = TorControlConnection.getConnection(
                                     new java.net.Socket("127.0.0.1", 9100));
+        if (conn instanceof TorControlConnection1) {
+            System.err.println("Debugging");
+            ((TorControlConnection1)conn).setDebugging(System.err);
+        }
         Thread th = conn.launchThread(daemon);
         conn.authenticate(new byte[0]);
         return conn;
-- 
GitLab