Author: atagar Date: 2011-04-03 05:04:10 +0000 (Sun, 03 Apr 2011) New Revision: 24542
Modified: arm/trunk/src/interface/connections/connEntry.py Log: Fetching the exit policy from the consensus if available, and otherwise falls back to the descriptor. Without this arm was encountering a parsing error with older Tor versions (encountered on 0.2.1.29).
Modified: arm/trunk/src/interface/connections/connEntry.py =================================================================== --- arm/trunk/src/interface/connections/connEntry.py 2011-04-03 04:16:00 UTC (rev 24541) +++ arm/trunk/src/interface/connections/connEntry.py 2011-04-03 05:04:10 UTC (rev 24542) @@ -702,14 +702,32 @@ _, nickname, _, _, pubDate, pubTime, _, orPort, dirPort = firstLineComp[:9] else: nickname, pubDate, pubTime, orPort, dirPort = "", "", "", "", ""
- flags = nsLines[1][2:] - microExit = nsLines[3][2:] + flags = "unknown" + if len(nsLines) >= 2 and nsLines[1].startswith("s "): + flags = nsLines[1][2:]
+ # The network status exit policy doesn't exist for older tor versions. + # If unavailble we'll need the full exit policy which is on the + # descriptor (if that's available). + + exitPolicy = "unknown" + if len(nsLines) >= 4 and nsLines[3].startswith("p "): + exitPolicy = nsLines[3][2:].replace(",", ", ") + elif descEntry: + # the descriptor has an individual line for each entry in the exit policy + exitPolicyEntries = [] + + for line in descEntry.split("\n"): + if line.startswith("accept") or line.startswith("reject"): + exitPolicyEntries.append(line.strip()) + + exitPolicy = ", ".join(exitPolicyEntries) + dirPortLabel = "" if dirPort == "0" else "dirport: %s" % dirPort lines[2] = "nickname: %-25s orport: %-10s %s" % (nickname, orPort, dirPortLabel) lines[3] = "published: %s %s" % (pubDate, pubTime) lines[4] = "flags: %s" % flags.replace(" ", ", ") - lines[5] = "exit policy: %s" % microExit.replace(",", ", ") + lines[5] = "exit policy: %s" % exitPolicy
if descEntry: torVersion, platform, contact = "", "", ""