aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristopher Baines <cb15g11@soton.ac.uk>2014-03-02 22:35:49 +0000
committerChristopher Baines <cb15g11@soton.ac.uk>2014-03-02 22:35:49 +0000
commita1154731c83395f28c87a251de17d039f53eda7e (patch)
tree63d523ccf0e4a13e5eb9de37747d7297e8bbb62e
parentdfebf391444ce8d9deb622b6d53262439ff9270c (diff)
downloadchutney-a1154731c83395f28c87a251de17d039f53eda7e.tar
chutney-a1154731c83395f28c87a251de17d039f53eda7e.tar.gz
Currently does get requests directly
Need to use https://stem.torproject.org/tutorials/to_russia_with_love.html to go through tor
-rw-r--r--lib/chutney/TorNet.py33
-rw-r--r--networks/hidden-service47
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)