commit bf057c32f0ae5bc3c0e7884a95e00e1a055b0f4d Author: Damian Johnson atagar@torproject.org Date: Fri May 31 18:03:59 2013 -0700
Narrowing scope of _getRelayAttr()
Moving several attributes from _getRelayAttr() up to their relevant methods. This has two disadvantages: we lose caching and it's no longer under our connection lock. However, this gets us closer to purging this controller wrapper (stem should handle any caching and locking on our behalf). --- src/util/torTools.py | 80 +++++++++++++++++++++++--------------------------- 1 file changed, 37 insertions(+), 43 deletions(-)
diff --git a/src/util/torTools.py b/src/util/torTools.py index e4c6b5c..49506c5 100644 --- a/src/util/torTools.py +++ b/src/util/torTools.py @@ -449,7 +449,15 @@ class Controller: default - result if the query fails or this relay isn't a part of the consensus yet """
- return self._getRelayAttr("flags", default) + myFingerprint = self.getInfo("fingerprint", None) + + if myFingerprint: + myStatusEntry = self.controller.get_network_status(myFingerprint) + + if myStatusEntry: + return myStatusEntry.flags + + return default
def getVersion(self): """ @@ -486,7 +494,7 @@ class Controller: provides None. """
- return self._getRelayAttr("user", None) + return self.controller.get_user(None)
def getMyFileDescriptorUsage(self): """ @@ -534,7 +542,29 @@ class Controller: use (unfortunately, this might be out of date). """
- return self._getRelayAttr("authorities", []) + # There's two configuration options that can overwrite the default + # authorities: DirServer and AlternateDirAuthority. + + # TODO: Both options accept a set of flags to more precisely set what they + # overwrite. Ideally this would account for these flags to more accurately + # identify authority connections from relays. + + dirServerCfg = self.getOption("DirServer", [], True) + altDirAuthCfg = self.getOption("AlternateDirAuthority", [], True) + altAuthoritiesCfg = dirServerCfg + altDirAuthCfg + + if altAuthoritiesCfg: + result = [] + + # entries are of the form: + # [nickname] [flags] address:port fingerprint + for entry in altAuthoritiesCfg: + locationComp = entry.split()[-2] # address:port component + result.append(tuple(locationComp.split(":", 1))) + + return result + else: + return list(DIR_SERVERS)
def getPathPrefix(self): """ @@ -551,7 +581,10 @@ class Controller: can't be determined then this provides None. """
- return self._getRelayAttr("startTime", None) + try: + return system.get_start_time(self.controller.get_pid()) + except: + return None
def isExitingAllowed(self, ipAddress, port): """ @@ -1002,17 +1035,14 @@ class Controller: if myFingerprint: for desc in event.desc: if desc.fingerprint == myFingerprint: - self._cachedParam["flags"] = None self._cachedParam["bwMeasured"] = None return else: - self._cachedParam["flags"] = None self._cachedParam["bwMeasured"] = None
def new_consensus_event(self, event): self.connLock.acquire()
- self._cachedParam["flags"] = None self._cachedParam["bwMeasured"] = None
# reconstructs consensus based mappings @@ -1256,16 +1286,6 @@ class Controller:
if myStatusEntry and hasattr(myStatusEntry, 'bandwidth'): result = myStatusEntry.bandwidth - elif key == "flags": - myFingerprint = self.getInfo("fingerprint", None) - - if myFingerprint: - myStatusEntry = self.controller.get_network_status(myFingerprint) - - if myStatusEntry: - result = myStatusEntry.flags - elif key == "user": - result = self.controller.get_user(None) elif key == "fdLimit": # provides -1 if the query fails queriedLimit = self.getInfo("process/descriptor-limit", None) @@ -1310,32 +1330,6 @@ class Controller:
self._pathPrefixLogging = False # prevents logging if fetched again result = prefixPath - elif key == "startTime": - try: - result = system.get_start_time(self.controller.get_pid()) - except: - pass - elif key == "authorities": - # There's two configuration options that can overwrite the default - # authorities: DirServer and AlternateDirAuthority. - - # TODO: Both options accept a set of flags to more precisely set what they - # overwrite. Ideally this would account for these flags to more accurately - # identify authority connections from relays. - - dirServerCfg = self.getOption("DirServer", [], True) - altDirAuthCfg = self.getOption("AlternateDirAuthority", [], True) - altAuthoritiesCfg = dirServerCfg + altDirAuthCfg - - if altAuthoritiesCfg: - result = [] - - # entries are of the form: - # [nickname] [flags] address:port fingerprint - for entry in altAuthoritiesCfg: - locationComp = entry.split()[-2] # address:port component - result.append(tuple(locationComp.split(":", 1))) - else: result = list(DIR_SERVERS)
# cache value if result != None: self._cachedParam[key] = result