[or-cvs] Oops. I guess I would probably get more comments about thi...
Nick Mathewson
nickm at seul.org
Sat Jun 4 02:43:01 UTC 2005
Update of /home/or/cvsroot/control/java/net/freehaven/tor/control/examples
In directory moria:/tmp/cvs-serv6608/java/net/freehaven/tor/control/examples
Added Files:
.cvsignore DebuggingEventHandler.java Main.java
Log Message:
Oops. I guess I would probably get more comments about this clever controller API/demo stuff if I actually committed it to CVS. Here then.
--- NEW FILE: .cvsignore ---
*.class
--- NEW FILE: DebuggingEventHandler.java ---
// $Id: DebuggingEventHandler.java,v 1.1 2005/06/04 02:42:55 nickm Exp $
// Copyright 2005 Nick Mathewson, Roger Dingledine
// See LICENSE file for copying information
package net.freehaven.tor.control.examples;
import net.freehaven.tor.control.*;
import java.io.PrintWriter;
import java.util.Iterator;
public class DebuggingEventHandler implements EventHandler, TorControlCommands {
protected PrintWriter out;
public DebuggingEventHandler(PrintWriter p) {
out = p;
}
public void circuitStatus(int status, int circID, String path) {
out.println("Circuit "+Integer.toHexString(circID)+" is now "+
CIRC_STATUS_NAMES[status]+" (path="+path+")");
}
public void streamStatus(int status, int streamID, String target) {
out.println("Stream "+Integer.toHexString(streamID)+" is now "+
STREAM_STATUS_NAMES[status]+" (target="+target+")");
}
public void orConnStatus(int status, String orName) {
out.println("OR connection to "+orName+" is now "+
OR_CONN_STATUS_NAMES[status]);
}
public void bandwidthUsed(long read, long written) {
out.println("Bandwidth usage: "+read+" bytes read; "+
written+" bytes written.");
}
public void newDescriptors(java.util.List orList) {
out.println("New descriptors for routers:");
for (Iterator i = orList.iterator(); i.hasNext(); )
out.println(" "+i.next());
}
public void message(int type, String msg) {
String tp;
switch (type) {
case EVENT_MSG_INFO: tp = "info"; break;
case EVENT_MSG_NOTICE: tp = "notice"; break;
case EVENT_MSG_WARN: tp = "warn"; break;
case EVENT_MSG_ERROR: tp = "error"; break;
default:
throw new Error("EventHandler.message() called with bad type: "+
type);
}
out.println("["+tp+"] "+msg.trim());
}
}
--- NEW FILE: Main.java ---
// $Id: Main.java,v 1.1 2005/06/04 02:42:55 nickm Exp $
// Copyright 2005 Nick Mathewson, Roger Dingledine
// See LICENSE file for copying information
package net.freehaven.tor.control.examples;
import net.freehaven.tor.control.*;
import java.io.PrintWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Map;
import java.util.Iterator;
public class Main implements TorControlCommands {
public static void main(String args[]) {
if (args.length < 1) {
System.err.println("No command given.");
return;
}
try {
if (args[0].equals("set-config")) {
setConfig(args);
} else if (args[0].equals("get-config")) {
getConfig(args);
} else if (args[0].equals("get-info")) {
getInfo(args);
} else if (args[0].equals("listen")) {
listenForEvents(args);
} else if (args[0].equals("signal")) {
signal(args);
} else if (args[0].equals("auth")) {
authDemo(args);
} else {
System.err.println("Unrecognized command: "+args[0]);
}
} catch (java.io.EOFException ex) {
System.out.println("Control socket closed by Tor.");
} catch (IOException ex) {
System.err.println("IO exception when talking to Tor process: "+
ex);
ex.printStackTrace(System.err);
} catch (TorControlError ex) {
System.err.println("Error from Tor process: "+
ex+" ["+ex.getErrorMsg()+"]");
}
}
private static TorControlConnection getConnection(String[] args,
boolean daemon)
throws IOException {
TorControlConnection conn =
new TorControlConnection(new java.net.Socket("127.0.0.1", 9100));
Thread th = conn.launchThread(daemon);
conn.authenticate(new byte[0]);
return conn;
}
private static TorControlConnection getConnection(String[] args)
throws IOException {
return getConnection(args, true);
}
public static void setConfig(String[] args) throws IOException {
// Usage: "set-config [-save] key value key value key value"
TorControlConnection conn = getConnection(args);
ArrayList lst = new ArrayList();
int i = 1;
boolean save = false;
if (args[i].equals("-save")) {
save = true;
++i;
}
for (; i < args.length; i +=2) {
lst.add(args[i]+" "+args[i+1]);
}
conn.setConf(lst);
if (save) {
conn.saveConf();
}
}
public static void getConfig(String[] args) throws IOException {
// Usage: get-config key key key
TorControlConnection conn = getConnection(args);
Map m = conn.getConf(Arrays.asList(args).subList(1,args.length));
for (int i = 1; i < args.length; ++i) {
System.out.println("KEY: "+args[i]);
System.out.println("VAL: "+m.get(args[i]));
}
}
public static void getInfo(String[] args) throws IOException {
TorControlConnection conn = getConnection(args);
Map m = conn.getInfo(Arrays.asList(args).subList(1,args.length));
for (int i = 1; i < args.length; ++i) {
System.out.println("KEY: "+args[i]);
System.out.println("VAL: "+m.get(args[i]));
}
}
public static void listenForEvents(String[] args) throws IOException {
// Usage: listen [circ|stream|orconn|bw|newdesc|info|notice|warn|error]*
TorControlConnection conn = getConnection(args, false);
ArrayList lst = new ArrayList();
for (int i = 1; i < args.length; ++i) {
short s = -1;
if (args[i].equals("circ"))
s = EVENT_CIRCSTATUS;
else if (args[i].equals("stream"))
s = EVENT_STREAMSTATUS;
else if (args[i].equals("orconn"))
s = EVENT_ORCONNSTATUS;
else if (args[i].equals("bw"))
s = EVENT_BANDWIDTH;
else if (args[i].equals("newdesc"))
s = EVENT_NEWDESCRIPTOR;
else if (args[i].equals("info"))
s = EVENT_MSG_INFO;
else if (args[i].equals("notice"))
s = EVENT_MSG_NOTICE;
else if (args[i].equals("warn"))
s = EVENT_MSG_WARN;
else if (args[i].equals("error"))
s = EVENT_MSG_ERROR;
else {
System.err.println("Unrecognized event type: "+args[i]);
continue;
}
lst.add(new Integer(s));
}
conn.setEventHandler(
new DebuggingEventHandler(new PrintWriter(System.out, true)));
conn.setEvents(lst);
}
public static void signal(String[] args) throws IOException {
// Usage signal [reload|shutdown|dump|debug|halt]
TorControlConnection conn = getConnection(args);
byte sig;
if (args[1].equals("reload"))
sig = SIGNAL_HUP;
else if (args[1].equals("shutdown"))
sig = SIGNAL_INT;
else if (args[1].equals("dump"))
sig = SIGNAL_USR1;
else if (args[1].equals("debug"))
sig = SIGNAL_USR2;
else if (args[1].equals("halt"))
sig = SIGNAL_TERM;
else {
System.err.println("Unrecognized signal: "+args[1]);
return;
} conn.signal(sig);
}
public static void authDemo(String[] args) throws IOException {
PasswordDigest pwd = PasswordDigest.generateDigest();
java.net.Socket s = new java.net.Socket("127.0.0.1", 9100);
TorControlConnection conn = new TorControlConnection(s);
conn.launchThread(true);
conn.authenticate(new byte[0]);
conn.setConf("HashedControlPassword", pwd.getHashedPassword());
conn =
new TorControlConnection(new java.net.Socket("127.0.0.1", 9100));
conn.launchThread(true);
conn.authenticate(pwd.getSecret());
}
}
More information about the tor-commits
mailing list