aboutsummaryrefslogtreecommitdiff
path: root/networks/hs-intro-fail
diff options
context:
space:
mode:
Diffstat (limited to 'networks/hs-intro-fail')
-rw-r--r--networks/hs-intro-fail51
1 files changed, 51 insertions, 0 deletions
diff --git a/networks/hs-intro-fail b/networks/hs-intro-fail
index 3b18d0b..deae478 100644
--- a/networks/hs-intro-fail
+++ b/networks/hs-intro-fail
@@ -48,6 +48,8 @@ node_intro_circuits = {}
node_intro_events = {}
+introduction_point_circuits = {}
+
def track_introduction_points(node):
nodenum = node._env["nodenum"]
nodenick = node._env["nick"]
@@ -99,6 +101,55 @@ def track_introduction_points(node):
node.getStemController().add_event_listener(listener, EventType.INFO)
log("Tracking introduction points for " + node._env["nick"])
+def track_introduction_point(node):
+ nodenum = node._env["nodenum"]
+ nodenick = node._env["nick"]
+
+ introduction_point_circuits[node] = {}
+
+ def listener(logevent):
+ prefix = " "
+ if logevent.message.startswith(prefix):
+ circuit = logevent.message[len(prefix):].split(" ")[0]
+ fingerprint = logevent.message[len(prefix):].split(" ")[1][1:]
+
+ node_intro_circuits[nodenum][circuit] = fingerprint
+
+ added_intro_node = nodes_by_fingerprint[fingerprint]
+
+ log("%s: added %s (%s)" % (nodenick, added_intro_node._env["nick"], fingerprint))
+
+ node_intro_events[nodenum].put(("added", fingerprint))
+
+ prefix = "rend_services_introduce(): Giving up on "
+ if logevent.message.startswith(prefix) or "Giving up on" in logevent.message:
+ log(logevent.message)
+ fingerprint = logevent.message[len(prefix):].split(" ")[0][1:41]
+
+ for_deletion = []
+
+ for circuit, fp in node_intro_circuits[nodenum].iteritems():
+ #log("circuit " + str(circuit) + " fp " + str(fp))
+ if fingerprint == fp:
+ for_deletion.append(circuit)
+
+ if len(for_deletion) == 0:
+ log("got log message " + logevent.message + " but not deleting an introduction point")
+
+ for circuit in for_deletion:
+ fingerprint = node_intro_circuits[nodenum][circuit]
+
+ removed_intro_node = nodes_by_fingerprint[fingerprint]
+
+ log("%s: removed %s (%s)" % (nodenick, removed_intro_node._env["nick"], fingerprint))
+
+ node_intro_events[nodenum].put(("removed", fingerprint))
+ del node_intro_circuits[nodenum][circuit]
+
+
+ node.getStemController().add_event_listener(listener, EventType.INFO)
+ log("Tracking introduction points for " + node._env["nick"])
+
# Use twisted to create web servers in this script
class Site(resource.Resource):
isLeaf = True