commit 257fedbbe7b4e8f066ba570773bb2f2afbca6dc4 Author: Damian Johnson atagar@torproject.org Date: Sun Jun 12 22:02:14 2011 -0700
Replacing old TorCtl example with a BW listener
Event listening, particularly BW events, is a common request on irc so using it as the TorCtl example. For more information see bug 2065. --- TorCtl.py | 56 ++------------------------------------------------------ example.py | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+), 54 deletions(-)
diff --git a/TorCtl.py b/TorCtl.py index 8fac3df..2758033 100755 --- a/TorCtl.py +++ b/TorCtl.py @@ -9,8 +9,8 @@ Library to control Tor processes. This library handles sending commands, parsing responses, and delivering events to and from the control port. The basic usage is to create a socket, wrap that in a TorCtl.Connection, and then add an EventHandler -to that connection. A simple example with a DebugEventHandler (that just -echoes the events back to stdout) is present in run_example(). +to that connection. For a simple example that prints our BW events (events +that provide the amount of traffic going over tor) see 'example.py'.
Note that the TorCtl.Connection is fully compatible with the more advanced EventHandlers in TorCtl.PathSupport (and of course any other @@ -1837,55 +1837,3 @@ def parseHostAndPort(h):
return host, port
-def run_example(host,port): - """ Example of basic TorCtl usage. See PathSupport for more advanced - usage. - """ - print "host is %s:%d"%(host,port) - s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - s.connect((host,port)) - c = Connection(s) - c.set_event_handler(DebugEventHandler()) - th = c.launch_thread() - c.authenticate() - print "nick",`c.get_option("nickname")` - print `c.get_info("version")` - #print `c.get_info("desc/name/moria1")` - print `c.get_info("network-status")` - print `c.get_info("addr-mappings/all")` - print `c.get_info("addr-mappings/config")` - print `c.get_info("addr-mappings/cache")` - print `c.get_info("addr-mappings/control")` - - print `c.extend_circuit(0,["moria1"])` - try: - print `c.extend_circuit(0,[""])` - except ErrorReply: # wtf? - print "got error. good." - except: - print "Strange error", sys.exc_info()[0] - - #send_signal(s,1) - #save_conf(s) - - #set_option(s,"1") - #set_option(s,"bandwidthburstbytes 100000") - #set_option(s,"runasdaemon 1") - #set_events(s,[EVENT_TYPE.WARN]) -# c.set_events([EVENT_TYPE.ORCONN], True) - c.set_events([EVENT_TYPE.STREAM, EVENT_TYPE.CIRC, - EVENT_TYPE.NEWCONSENSUS, EVENT_TYPE.NEWDESC, - EVENT_TYPE.ORCONN, EVENT_TYPE.BW], True) - - th.join() - return - -if __name__ == '__main__': - if len(sys.argv) > 2: - print "Syntax: TorControl.py torhost:torport" - sys.exit(0) - else: - sys.argv.append("localhost:9051") - sh,sp = parseHostAndPort(sys.argv[1]) - run_example(sh,sp) - diff --git a/example.py b/example.py new file mode 100644 index 0000000..fdb1a99 --- /dev/null +++ b/example.py @@ -0,0 +1,34 @@ +""" +The following is a simple example of TorCtl usage. This attaches a listener +that prints the amount of traffic going over tor each second. +""" + +import time +import TorCtl + +class BandwidthListener(TorCtl.PostEventListener): + def __init__(self): + TorCtl.PostEventListener.__init__(self) + + def bandwidth_event(self, event): + print "tor read %i bytes and wrote %i bytes" % (event.read, event.written) + +# constructs a listener that prints BW events +myListener = BandwidthListener() + +# initiates a TorCtl connection, returning None if it was unsuccessful +conn = TorCtl.connect() + +if conn: + # tells tor to send us BW events + conn.set_events(["BW"]) + + # attaches the listener so it'll receive BW events + conn.add_event_listener(myListener) + + # run until we get a keyboard interrupt + try: + while True: + time.sleep(10) + except KeyboardInterrupt: pass +
tor-commits@lists.torproject.org