From a1154731c83395f28c87a251de17d039f53eda7e Mon Sep 17 00:00:00 2001 From: Christopher Baines Date: Sun, 2 Mar 2014 22:35:49 +0000 Subject: Currently does get requests directly Need to use https://stem.torproject.org/tutorials/to_russia_with_love.html to go through tor --- lib/chutney/TorNet.py | 33 ++++++++++++++++++++++++++++++--- networks/hidden-service | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 77 insertions(+), 3 deletions(-) diff --git a/lib/chutney/TorNet.py b/lib/chutney/TorNet.py index eb8c310..f1ebc08 100644 --- a/lib/chutney/TorNet.py +++ b/lib/chutney/TorNet.py @@ -23,6 +23,11 @@ import time import stem.control +from twisted.web import server, resource +from twisted.internet import reactor + +from treq import get + import chutney.Templating import chutney.Traffic @@ -420,6 +425,8 @@ class LocalNodeController(NodeController): if pid is None: return False + print("checking if " + str(pid) + " is running") + try: os.kill(pid, 0) # "kill 0" == "are you there?" except OSError, e: @@ -648,6 +655,7 @@ class Network(object): def start(self): print "Starting network" self._dfltEnv['start_time'] = time.time() + return self._start() def hup(self): @@ -655,6 +663,14 @@ class Network(object): return all([n.getController().hup() for n in self._nodes]) def stop(self): + + print("Closing all stem controllers") + for n in self._nodes: + if n._stemcontroller: + print("Closed stem controller") + n._stemcontroller.close() + print("Closed all stem controllers") + controllers = [ n.getController() for n in self._nodes ] for sig, desc in [(signal.SIGINT, "SIGINT"), (signal.SIGINT, "another SIGINT"), @@ -664,10 +680,13 @@ class Network(object): if c.isRunning(): c.stop(sig=sig) print "Waiting for nodes to finish." - for n in xrange(15): + for n in xrange(10): + print("loop " + str(n)) time.sleep(1) + print("after sleep") if all(not c.isRunning() for c in controllers): return + print("printing dot") sys.stdout.write(".") sys.stdout.flush() for c in controllers: @@ -707,6 +726,11 @@ def runConfigFile(verb, f): _GLOBALS = dict(_BASE_ENVIRON = _BASE_ENVIRON, Node=Node, EventType=stem.control.EventType, + server=server, + resource=resource, + reactor=reactor, + get=get, + time=time, _THE_NETWORK=_THE_NETWORK) exec f in _GLOBALS @@ -728,6 +752,7 @@ def runConfigFile(verb, f): def signal_handler(signal, frame): _THE_NETWORK.stop() + print("Network stoped, exiting") sys.exit(0) def main(): @@ -743,11 +768,13 @@ def main(): f = open(sys.argv[2]) result = runConfigFile(sys.argv[1], f) + print("run config file returns " + str(result)) if result is False: sys.exit(-1) - signal.signal(signal.SIGINT, signal_handler) - signal.pause() + if sys.argv[1] == "start": + signal.signal(signal.SIGINT, signal_handler) + signal.pause() return 0 diff --git a/networks/hidden-service b/networks/hidden-service index 897ce80..d45954c 100644 --- a/networks/hidden-service +++ b/networks/hidden-service @@ -34,6 +34,46 @@ DelayedHiddenService = Node( hiddenservicetarget="127.0.0.1:8082" ) +# Use twisted to create web servers in this script +class Site(resource.Resource): + isLeaf = True + numberRequests = 0 + + def __init__(self, siteNum): + self.siteNum = siteNum + + def render_GET(self, request): + self.numberRequests += 1 + request.setHeader("content-type", "text/plain") + return str(self.siteNum) + +def start_test(): + print("Starting test") + + port8081 = reactor.listenTCP(8081, server.Site(Site(1))) + port8082 = reactor.listenTCP(8082, server.Site(Site(2))) + + def cleanup(): + port8081.stopListening() + print("stopped 8081") + port8082.stopListening() + print("stopped 8082") + reactor.stop() + print("stopped the reactor") + + responses = {"1": 0, "2": 0} + + def done(response): + print("code %s" % response.code) + + if response.code == 200: + content = yield treq.content(resp) + responses[site]++ + + get("http://127.0.0.1:8081/").addCallback(done) + + reactor.run(installSignalHandlers=0) + def start(): print("Starting hidden service test") @@ -42,9 +82,16 @@ def start(): else: print("All initial nodes running") + def start_listener(logevent): + # Probably after what needs waiting for + if "Successfully uploaded v2 rend descriptors" in logevent.message: + start_test() + def log_listener(logevent): if "Successfully uploaded v2 rend descriptors" in logevent.message: print("log message: " + logevent.message) DelayedHiddenService.getController().start() + DelayedHiddenService.getStemController().add_event_listener(start_listener, EventType.INFO) + HiddenService.getStemController().add_event_listener(log_listener, EventType.INFO) -- cgit v1.2.3