diff options
Diffstat (limited to 'networks/hs-intro-fail')
-rw-r--r-- | networks/hs-intro-fail | 51 |
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 |