commit 5619151f3a26b689449a007346bca7eeb8d23e07 Author: Damian Johnson atagar@torproject.org Date: Mon Jan 15 10:23:22 2018 -0800
Drop TTL from addresses
Damn, that cost me a few hours. Netinfo addresses are of the form specified in section 6.4 of the tor-spec but they actually lack the TTL field. I'll clarify the spec in a bit. --- stem/client/__init__.py | 11 +++-------- test/unit/client/types.py | 3 +-- 2 files changed, 4 insertions(+), 10 deletions(-)
diff --git a/stem/client/__init__.py b/stem/client/__init__.py index 931dbab1..271237d8 100644 --- a/stem/client/__init__.py +++ b/stem/client/__init__.py @@ -79,7 +79,7 @@ class Certificate(collections.namedtuple('Certificate', ['type', 'value'])): """
-class Address(collections.namedtuple('Address', ['type', 'type_int', 'value', 'value_bin', 'ttl'])): +class Address(collections.namedtuple('Address', ['type', 'type_int', 'value', 'value_bin'])): """ Relay address.
@@ -87,7 +87,6 @@ class Address(collections.namedtuple('Address', ['type', 'type_int', 'value', 'v :var int type_int: integer value of the address type :var unicode value: address value :var bytes value_bin: encoded address value - :var int ttl: seconds the record can be validly cached for """
@staticmethod @@ -103,20 +102,16 @@ class Address(collections.namedtuple('Address', ['type', 'type_int', 'value', 'v
if len(content) < addr_length: raise ValueError('Address specified a payload of %i bytes, but only had %i' % (addr_length, len(content))) - elif len(content) < addr_length + 4: - raise ValueError('Address missing a TTL at its end') - - address_bin, content = content[:addr_length], content[addr_length:] - ttl, content = Size.LONG.pop(content)
# TODO: add support for other address types
+ address_bin, content = content[:addr_length], content[addr_length:] address = None
if addr_type == AddrType.IPv4 and len(address_bin) == 4: address = '.'.join([str(Size.CHAR.unpack(address_bin[i])) for i in range(4)])
- return Address(addr_type, addr_type_int, address, address_bin, ttl), content + return Address(addr_type, addr_type_int, address, address_bin), content
class Size(object): diff --git a/test/unit/client/types.py b/test/unit/client/types.py index fdf4e085..a85a0b8d 100644 --- a/test/unit/client/types.py +++ b/test/unit/client/types.py @@ -10,10 +10,9 @@ from stem.client import Address class TestClientTypes(unittest.TestCase): def test_address_ipv4(self): addr, content = Address.pop('\x04\x04\x7f\x00\x00\x01\x01\x04\x04aq\x0f\x02\x00\x00\x00\x00') - self.assertEqual('q\x0f\x02\x00\x00\x00\x00', content) + self.assertEqual('\x01\x04\x04aq\x0f\x02\x00\x00\x00\x00', content)
self.assertEqual('IPv4', addr.type) self.assertEqual(4, addr.type_int) self.assertEqual('127.0.0.1', addr.value) self.assertEqual('\x7f\x00\x00\x01', addr.value_bin) - self.assertEqual(17040481, addr.ttl)
tor-commits@lists.torproject.org