[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