[tor-commits] [stem/master] Subclass LinkSpecifier under Field
atagar at torproject.org
atagar at torproject.org
Sun Nov 17 23:40:39 UTC 2019
commit c64d058c2fb5f646ad62863a7123f4e452c16777
Author: Damian Johnson <atagar at torproject.org>
Date: Sun Oct 20 17:39:10 2019 -0700
Subclass LinkSpecifier under Field
We already implement its interface, so why not? Functionally subclassing
doesn't provide much (adds unpack() and equality check), but clearly this
should be a Field.
---
stem/client/datatype.py | 36 ++++++++++++++++++------------------
1 file changed, 18 insertions(+), 18 deletions(-)
diff --git a/stem/client/datatype.py b/stem/client/datatype.py
index 73def712..a0e59cb0 100644
--- a/stem/client/datatype.py
+++ b/stem/client/datatype.py
@@ -17,6 +17,12 @@ users.** See our :class:`~stem.client.Relay` the API you probably want.
LinkProtocol - ORPort protocol version.
Field - Packable and unpackable datatype.
+ |- LinkSpecifier - Communication method relays in a circuit.
+ | |- LinkByIPv4 - TLS connection to an IPv4 address.
+ | |- LinkByIPv6 - TLS connection to an IPv6 address.
+ | |- LinkByFingerprint - SHA1 identity fingerprint.
+ | +- LinkByEd25519 - Ed25519 identity fingerprint.
+ |
|- Size - Field of a static size.
|- Address - Relay address.
|- Certificate - Relay certificate.
@@ -25,12 +31,6 @@ users.** See our :class:`~stem.client.Relay` the API you probably want.
|- unpack - decodes content
+- pop - decodes content with remainder
- LinkSpecifier - Communication method relays in a circuit.
- |- LinkByIPv4 - TLS connection to an IPv4 address.
- |- LinkByIPv6 - TLS connection to an IPv6 address.
- |- LinkByFingerprint - SHA1 identity fingerprint.
- +- LinkByEd25519 - Ed25519 identity fingerprint.
-
KDF - KDF-TOR derivatived attributes
+- from_value - parses key material
@@ -559,7 +559,7 @@ class Certificate(Field):
return stem.util._hash_attr(self, 'type_int', 'value')
-class LinkSpecifier(object):
+class LinkSpecifier(Field):
"""
Method of communicating with a circuit's relay. Recognized link specification
types are an instantiation of a subclass. For more information see the
@@ -575,29 +575,29 @@ class LinkSpecifier(object):
self.value = value
@staticmethod
- def pop(content):
+ def pop(packed):
# LSTYPE (Link specifier type) [1 byte]
# LSLEN (Link specifier length) [1 byte]
# LSPEC (Link specifier) [LSLEN bytes]
- link_type, content = Size.CHAR.pop(content)
- value_size, content = Size.CHAR.pop(content)
+ link_type, packed = Size.CHAR.pop(packed)
+ value_size, packed = Size.CHAR.pop(packed)
- if value_size > len(content):
- raise ValueError('Link specifier should have %i bytes, but only had %i remaining' % (value_size, len(content)))
+ if value_size > len(packed):
+ raise ValueError('Link specifier should have %i bytes, but only had %i remaining' % (value_size, len(packed)))
- value, content = split(content, value_size)
+ value, packed = split(packed, value_size)
if link_type == 0:
- return LinkByIPv4(value), content
+ return LinkByIPv4(value), packed
elif link_type == 1:
- return LinkByIPv6(value), content
+ return LinkByIPv6(value), packed
elif link_type == 2:
- return LinkByFingerprint(value), content
+ return LinkByFingerprint(value), packed
elif link_type == 3:
- return LinkByEd25519(value), content
+ return LinkByEd25519(value), packed
else:
- return LinkSpecifier(link_type, value), content # unrecognized type
+ return LinkSpecifier(link_type, value), packed # unrecognized type
def pack(self):
cell = bytearray()
More information about the tor-commits
mailing list