[tor-commits] [stem/master] Supporting multiple extra-info transport lines

atagar at torproject.org atagar at torproject.org
Tue Jul 10 15:26:25 UTC 2012


commit a0f980c996587ef112379891339d463bda3d487a
Author: Damian Johnson <atagar at torproject.org>
Date:   Mon Jul 9 12:00:08 2012 -0700

    Supporting multiple extra-info transport lines
    
    The 'transport' lines being added to extra-info descriptors can appear any
    number of times, so storing them as a list. These options are weird in that
    they have an "address:port [arglist]" which never appears in the wild since
    they both only appear on bridge descriptors and are scrubbed from bridge
    descripotrs.
---
 stem/descriptor/extrainfo_descriptor.py      |   11 +++++++++--
 test/unit/descriptor/extrainfo_descriptor.py |    2 +-
 2 files changed, 10 insertions(+), 3 deletions(-)

diff --git a/stem/descriptor/extrainfo_descriptor.py b/stem/descriptor/extrainfo_descriptor.py
index b1c7b09..366279c 100644
--- a/stem/descriptor/extrainfo_descriptor.py
+++ b/stem/descriptor/extrainfo_descriptor.py
@@ -743,7 +743,7 @@ class BridgeExtraInfoDescriptor(ExtraInfoDescriptor):
   """
   Bridge extra-info descriptor (`specification <https://metrics.torproject.org/formats.html#bridgedesc>`_)
   
-  :var str transport: transport method recognized by the bridge (ex. obfs3)
+  :var list transport: transport method recognized by the bridge (ex. obfs3)
   """
   
   def __init__(self, raw_contents, validate = True):
@@ -764,7 +764,14 @@ class BridgeExtraInfoDescriptor(ExtraInfoDescriptor):
       line = "%s %s" % (keyword, value) # original line
       
       if keyword == "transport":
-        self.transport = value
+        # "transport" transportname address:port [arglist]
+        # Everything after the transportname is scrubbed in published bridge
+        # descriptors, so we'll never see it in practice.
+        
+        if self.transport is None:
+          self.transport = []
+        
+        self.transport.append(value)
         del entries["transport"]
       elif keyword == "router-digest":
         if validate and not stem.util.tor_tools.is_hex_digits(value, 40):
diff --git a/test/unit/descriptor/extrainfo_descriptor.py b/test/unit/descriptor/extrainfo_descriptor.py
index e9b06a0..a3590ee 100644
--- a/test/unit/descriptor/extrainfo_descriptor.py
+++ b/test/unit/descriptor/extrainfo_descriptor.py
@@ -529,7 +529,7 @@ class TestExtraInfoDescriptor(unittest.TestCase):
     
     desc_text = _make_descriptor({"transport": "obfs3"}, is_bridge = True)
     desc = BridgeExtraInfoDescriptor(desc_text)
-    self.assertEquals("obfs3", desc.transport)
+    self.assertEquals(["obfs3"], desc.transport)
     self.assertEquals([], desc.get_unrecognized_lines())
   
   def _expect_invalid_attr(self, desc_text, attr = None, expected_value = None):





More information about the tor-commits mailing list