[tor-commits] [stem/master] Using port lists for addresses_v6 rather than ranges

atagar at torproject.org atagar at torproject.org
Mon Feb 4 04:46:07 UTC 2013


commit 6c99a28e83490537615de9388484c574aa1b85dd
Author: Damian Johnson <atagar at torproject.org>
Date:   Sun Feb 3 20:43:28 2013 -0800

    Using port lists for addresses_v6 rather than ranges
    
    Huh, I wonder where I got the idea that 'a' lines had port ranges. Dropping
    that. According to the spec the 'a' lines should be parsed in the same way as
    'or-address'. However, I suspect that the spec is a little off here - checking
    if it can contain IPv4 addresses...
    
    Caught by Karsten on...
    
    https://trac.torproject.org/8036
---
 stem/descriptor/router_status_entry.py      |   25 +++++++++----------------
 test/unit/descriptor/router_status_entry.py |   11 ++++-------
 2 files changed, 13 insertions(+), 23 deletions(-)

diff --git a/stem/descriptor/router_status_entry.py b/stem/descriptor/router_status_entry.py
index ce5a7db..2cd6632 100644
--- a/stem/descriptor/router_status_entry.py
+++ b/stem/descriptor/router_status_entry.py
@@ -299,7 +299,7 @@ class RouterStatusEntryV3(RouterStatusEntry):
   status document.
 
   :var dict addresses_v6: **\*** relay's IPv6 OR addresses, this is a mapping
-    of IPv6 addresses to a listing of [(min port, max port)...] it accepts
+    of IPv6 addresses to a tuple with the ports it accepts
   :var str digest: **\*** router's digest
 
   :var int bandwidth: bandwidth claimed by the relay (in kb/s)
@@ -521,28 +521,21 @@ def _parse_a_line(desc, value, validate):
 
     raise ValueError("%s 'a' line must be of the form '[address]:[ports]': a %s" % (desc._name(), value))
 
-  address, ports = value.rsplit(':', 1)
+  address, port_label = value.rsplit(':', 1)
 
   if validate and not stem.util.connection.is_valid_ipv6_address(address, allow_brackets = True):
     raise ValueError("%s 'a' line must start with an IPv6 address: a %s" % (desc._name(), value))
 
   address = address.lstrip('[').rstrip(']')
+  ports = []
 
-  for port_entry in ports.split(','):
-    if '-' in port_entry:
-      min_port, max_port = port_entry.split('-', 1)
-    else:
-      min_port = max_port = port_entry
-
-    if not stem.util.connection.is_valid_port(min_port) or \
-       not stem.util.connection.is_valid_port(max_port):
-
-      if not validate:
-        continue
-
-      raise ValueError("%s 'a' line had an invalid port range (%s): a %s" % (desc._name(), port_entry, value))
+  for port in port_label.split(','):
+    if stem.util.connection.is_valid_port(port):
+      ports.append(int(port))
+    elif validate:
+      raise ValueError("%s 'a' line had an invalid port (%s): a %s" % (desc._name(), port, value))
 
-    desc.addresses_v6.setdefault(address, []).append((int(min_port), int(max_port)))
+  desc.addresses_v6[address] = tuple(ports)
 
 
 def _parse_s_line(desc, value, validate):
diff --git a/test/unit/descriptor/router_status_entry.py b/test/unit/descriptor/router_status_entry.py
index 21795f2..b9d3649 100644
--- a/test/unit/descriptor/router_status_entry.py
+++ b/test/unit/descriptor/router_status_entry.py
@@ -313,11 +313,9 @@ class TestRouterStatusEntry(unittest.TestCase):
 
     test_values = {
       "[2607:fcd0:daaa:101::602c:bd62]:443": {
-        '2607:fcd0:daaa:101::602c:bd62': [(443, 443)]},
+        '2607:fcd0:daaa:101::602c:bd62': (443,)},
       "[2607:fcd0:daaa:101::602c:bd62]:80,443": {
-        '2607:fcd0:daaa:101::602c:bd62': [(80, 80), (443, 443)]},
-      "[2607:fcd0:daaa:101::602c:bd62]:443-512": {
-        '2607:fcd0:daaa:101::602c:bd62': [(443, 512)]},
+        '2607:fcd0:daaa:101::602c:bd62': (80, 443)},
     }
 
     for a_line, expected in test_values.items():
@@ -328,12 +326,11 @@ class TestRouterStatusEntry(unittest.TestCase):
 
     content = get_router_status_entry_v3(content = True)
     content += "\na [2607:fcd0:daaa:101::602c:bd62]:80,443"
-    content += "\na [2607:fcd0:daaa:101::602c:bd62]:512-600"
     content += "\na [1148:fcd0:daaa:101::602c:bd62]:80"
 
     expected = {
-      '2607:fcd0:daaa:101::602c:bd62': [(80, 80), (443, 443), (512, 600)],
-      '1148:fcd0:daaa:101::602c:bd62': [(80, 80)],
+      '2607:fcd0:daaa:101::602c:bd62': (80, 443),
+      '1148:fcd0:daaa:101::602c:bd62': (80,),
     }
 
     entry = RouterStatusEntryV3(content)



More information about the tor-commits mailing list