def runControl(s): pendingEvents = [] #XXX This tric. should become standard TorControl._event_handler = pendingEvents.append TorControl.set_events(s, [TorControl.EVENT_TYPE.CIRCSTATUS, TorControl.EVENT_TYPE.STREAMSTATUS]) TorControl.set_option(s,"__LeaveStreamsUnattached 1") while 1: e = pendingEvents[:] del pendingEvents[:] for ev in e: handleEvent(s, ev) _, tp, body = TorControl.receive_message(s) if tp == TorControl.MSG_TYPE.EVENT: handleEvent(s, body)
def runControl(s): circs = {} s1, s2 = {}, {} _h = lambda body, circs=circs, s1=s1, s2=s2, s=s: handleEvent( s, body, circs, s1, s2) TorControl._event_handler = _h TorControl.set_events( s, [TorControl.EVENT_TYPE.CIRCSTATUS, TorControl.EVENT_TYPE.STREAMSTATUS]) TorControl.set_option(s, "__LeaveStreamsUnattached 1") global N_CIRCS_DONE while N_CIRCS_DONE < N_CIRCS_TO_TRY: while len(circs) < CIRCS_AT_A_TIME: c, p = launchCirc(s) print "launching circuit %s to %s" % (c, p) circs[c] = p _, tp, body = TorControl.receive_message(s) if tp == TorControl.MSG_TYPE.EVENT: handleEvent(s, body, circs, s1, s2) i = HOST_STATUS.items() i.sort() for n, (all, good) in i: print "%s in %s circuits; %s/%s ok" % (n, all, good, all)