[tor-commits] [stem/master] Allowing for extra args on lines with multiple

atagar at torproject.org atagar at torproject.org
Mon Mar 26 00:10:01 UTC 2012


commit e0f8bfcacca963e1cbc7811dd1f9e6e7e104c7f8
Author: Damian Johnson <atagar at torproject.org>
Date:   Sat Mar 24 18:50:20 2012 -0700

    Allowing for extra args on lines with multiple
    
    Well, crap. I've been developing against the version 2 spec on the assumption
    that was both the majority use case and what my test instance was running.
    However, that's evidently pretty ancient and I've been running against version
    3 all along.
    
    First change I'm spotting in the spec is that lines with multiple arguments
    should ignore extras so doing that.
---
 stem/descriptor/__init__.py                |    2 +-
 stem/descriptor/server_descriptor.py       |   24 ++++++++++++------------
 test/integ/descriptor/server_descriptor.py |    2 +-
 3 files changed, 14 insertions(+), 14 deletions(-)

diff --git a/stem/descriptor/__init__.py b/stem/descriptor/__init__.py
index 215864f..325ac4b 100644
--- a/stem/descriptor/__init__.py
+++ b/stem/descriptor/__init__.py
@@ -41,7 +41,7 @@ def parse_file(path, descriptor_file):
   descriptor_file.seek(0)
   
   if filename == "cached-descriptors" or first_line.startswith("router "):
-    for desc in stem.descriptor.server_descriptor.parse_file_v2(descriptor_file):
+    for desc in stem.descriptor.server_descriptor.parse_file_v3(descriptor_file):
       desc._set_path(path)
       yield desc
   else:
diff --git a/stem/descriptor/server_descriptor.py b/stem/descriptor/server_descriptor.py
index 7715a96..c301840 100644
--- a/stem/descriptor/server_descriptor.py
+++ b/stem/descriptor/server_descriptor.py
@@ -7,8 +7,8 @@ etc). This information is provided from a few sources...
 - the 'cached-descriptors' file in tor's data directory
 - tor metrics, at https://metrics.torproject.org/data.html
 
-parse_file_v2 - Iterates over the server descriptors in a file.
-ServerDescriptorV2 - Tor server descriptor, version 2.
+parse_file_v3 - Iterates over the server descriptors in a file.
+ServerDescriptorV3 - Tor server descriptor, version 3.
   |- get_unrecognized_lines - lines with unrecognized content
   |- get_annotations - dictionary of content prior to the descriptor entry
   |- get_annotation_lines - lines that provided the annotations
@@ -55,9 +55,9 @@ SINGLE_FIELDS = (
   "family",
 )
 
-def parse_file_v2(descriptor_file, validate = True):
+def parse_file_v3(descriptor_file, validate = True):
   """
-  Iterates over the version 2 server descriptors in a file.
+  Iterates over the version 3 server descriptors in a file.
   
   Arguments:
     descriptor_file (file) - file with descriptor content
@@ -65,7 +65,7 @@ def parse_file_v2(descriptor_file, validate = True):
                              True, skips these checks otherwise
   
   Returns:
-    iterator for ServerDescriptorV2 instances in the file
+    iterator for ServerDescriptorV3 instances in the file
   
   Raises:
     ValueError if the contents is malformed and validate is True
@@ -109,7 +109,7 @@ def parse_file_v2(descriptor_file, validate = True):
       annotations = map(str.strip, annotations)
       
       descriptor_text = "".join(descriptor_content)
-      descriptor = ServerDescriptorV2(descriptor_text, validate, annotations)
+      descriptor = ServerDescriptorV3(descriptor_text, validate, annotations)
       yield descriptor
     else: break # done parsing descriptors
 
@@ -185,10 +185,10 @@ def _get_psudo_pgp_block(remaining_contents):
   else:
     return (None, None)
 
-class ServerDescriptorV2(stem.descriptor.Descriptor):
+class ServerDescriptorV3(stem.descriptor.Descriptor):
   """
-  Version 2 server descriptor, as specified in...
-  https://gitweb.torproject.org/torspec.git/blob/HEAD:/dir-spec-v2.txt
+  Version 3 server descriptor, as specified in...
+  https://gitweb.torproject.org/torspec.git/blob/HEAD:/dir-spec.txt
   
   Attributes:
     nickname (str)           - relay's nickname (*)
@@ -221,7 +221,7 @@ class ServerDescriptorV2(stem.descriptor.Descriptor):
   
   def __init__(self, contents, validate = True, annotations = None):
     """
-    Version 2 server descriptor constructor, created from an individual relay's
+    Version 3 server descriptor constructor, created from an individual relay's
     descriptor content (as provided by "GETINFO desc/*", cached descriptors,
     and metrics).
     
@@ -350,7 +350,7 @@ class ServerDescriptorV2(stem.descriptor.Descriptor):
         # "router" nickname address ORPort SocksPort DirPort
         router_comp = value.split()
         
-        if len(router_comp) != 5:
+        if len(router_comp) < 5:
           if not validate: continue
           raise ValueError("Router line must have five values: %s" % line)
         
@@ -377,7 +377,7 @@ class ServerDescriptorV2(stem.descriptor.Descriptor):
         # "bandwidth" bandwidth-avg bandwidth-burst bandwidth-observed
         bandwidth_comp = value.split()
         
-        if len(bandwidth_comp) != 3:
+        if len(bandwidth_comp) < 3:
           if not validate: continue
           raise ValueError("Bandwidth line must have three values: %s" % line)
         
diff --git a/test/integ/descriptor/server_descriptor.py b/test/integ/descriptor/server_descriptor.py
index 34b77a4..5a070a2 100644
--- a/test/integ/descriptor/server_descriptor.py
+++ b/test/integ/descriptor/server_descriptor.py
@@ -55,7 +55,7 @@ dskLSPz8beUW7bzwDjR6EVNGpyoZde83Ejvau+5F2c6cGnlu91fiZN3suE88iE6e
 Qlx9HNCqCY877ztFRC624ja2ql6A2hBcuoYMbkHjcQ4=
 -----END SIGNATURE-----"""
     
-    desc = stem.descriptor.server_descriptor.ServerDescriptorV2(descriptor_contents)
+    desc = stem.descriptor.server_descriptor.ServerDescriptorV3(descriptor_contents)
     self.assertEquals("caerSidi", desc.nickname)
     self.assertEquals("A7569A83B5706AB1B1A9CB52EFF7D2D32E4553EB", desc.fingerprint)
     self.assertEquals("71.35.133.197", desc.address)





More information about the tor-commits mailing list