[tor-commits] [stem/master] Handling bridge-ip-versions as a general extrainfo field

atagar at torproject.org atagar at torproject.org
Sat Aug 24 18:00:44 UTC 2013


commit c076038e82fcd5f5188ec7f889c9c9dc5d5eafd3
Author: Damian Johnson <atagar at torproject.org>
Date:   Sat Aug 24 10:45:14 2013 -0700

    Handling bridge-ip-versions as a general extrainfo field
    
    In commit 0d01ad6 I added support for the 'bridge-ip-versions' lines. These are
    only relevant to bridge descriptors, and ineed don't presently appear in the
    extrainfo consensus. However, that once could be said about the 'bridge-ips'
    field too.
    
    It's wrong for bridge attributes to appear on public relays, but there's
    nothing in the spec prohibiting it. Hence moving this attribute's handler to
    the common ExtraInfoDescriptor parent class.
---
 stem/descriptor/extrainfo_descriptor.py |   36 +++++++++++++++----------------
 1 file changed, 17 insertions(+), 19 deletions(-)

diff --git a/stem/descriptor/extrainfo_descriptor.py b/stem/descriptor/extrainfo_descriptor.py
index 8c2b19e..a314e86 100644
--- a/stem/descriptor/extrainfo_descriptor.py
+++ b/stem/descriptor/extrainfo_descriptor.py
@@ -309,6 +309,7 @@ class ExtraInfoDescriptor(Descriptor):
   :var dict bridge_ips: mapping of locales to rounded count of unique user ips
   :var datetime geoip_start_time: replaced by bridge_stats_end (deprecated)
   :var dict geoip_client_origins: replaced by bridge_ips (deprecated)
+  :var dict ip_versions: mapping of ip protocols to a rounded count for the number of users
 
   **\*** attribute is either required when we're parsed with validation or has
   a default value, others are left as **None** if undefined
@@ -404,6 +405,8 @@ class ExtraInfoDescriptor(Descriptor):
     self.geoip_start_time = None
     self.geoip_client_origins = None
 
+    self.ip_versions = None
+
     self._unrecognized_lines = []
 
     entries = _get_descriptor_components(raw_contents, validate)
@@ -786,6 +789,20 @@ class ExtraInfoDescriptor(Descriptor):
           self.entry_ips = locale_usage
         elif keyword == "bridge-ips":
           self.bridge_ips = locale_usage
+      elif keyword == "bridge-ip-versions":
+        self.ip_versions = {}
+
+        if value:
+          for entry in value.split(','):
+            if not '=' in entry:
+              raise stem.ProtocolError("The bridge-ip-versions should be a comma separated listing of '<protocol>=<count>' mappings: %s" % line)
+
+            protocol, count = entry.split('=', 1)
+
+            if not count.isdigit():
+              raise stem.ProtocolError("IP protocol count was non-numeric (%s): %s" % (count, line))
+
+            self.ip_versions[protocol] = int(count)
       else:
         self._unrecognized_lines.append(line)
 
@@ -862,12 +879,9 @@ class BridgeExtraInfoDescriptor(ExtraInfoDescriptor):
   """
   Bridge extra-info descriptor (`bridge descriptor specification
   <https://metrics.torproject.org/formats.html#bridgedesc>`_)
-
-  :var dict ip_versions: mapping of ip protocols to a rounded count for the number of users
   """
 
   def __init__(self, raw_contents, validate = True):
-    self.ip_versions = None
     self._digest = None
 
     super(BridgeExtraInfoDescriptor, self).__init__(raw_contents, validate)
@@ -889,22 +903,6 @@ class BridgeExtraInfoDescriptor(ExtraInfoDescriptor):
 
         self._digest = value
         del entries["router-digest"]
-      elif keyword == "bridge-ip-versions":
-        self.ip_versions = {}
-
-        if value:
-          for entry in value.split(','):
-            if not '=' in entry:
-              raise stem.ProtocolError("The bridge-ip-versions should be a comma separated listing of '<protocol>=<count>' mappings: %s" % line)
-
-            protocol, count = entry.split('=', 1)
-
-            if not count.isdigit():
-              raise stem.ProtocolError("IP protocol count was non-numeric (%s): %s" % (count, line))
-
-            self.ip_versions[protocol] = int(count)
-
-        del entries["bridge-ip-versions"]
 
     ExtraInfoDescriptor._parse(self, entries, validate)
 





More information about the tor-commits mailing list