commit cf78cc48f811a3f0af1a7904ff7d78d5b20ad1ec Author: Damian Johnson atagar@torproject.org Date: Mon Jan 8 02:27:51 2018 -0800
VersionCell.pack function
Think I'll model these similar to stem responses, with a pack/unpack method for each cell type. --- stem/client.py | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-)
diff --git a/stem/client.py b/stem/client.py index 2a598747..a0288f52 100644 --- a/stem/client.py +++ b/stem/client.py @@ -133,23 +133,33 @@ class Cell(collections.namedtuple('Cell', ['name', 'value', 'fixed_size', 'for_c return cell
-class Relay(object): +class VersionCell(Cell): """ - Connection with a `Tor relay's ORPort - https://gitweb.torproject.org/torspec.git/tree/tor-spec.txt`_. + Link version negotiation cell. """
+ @staticmethod + def pack(versions): + """ + Provides the payload for a series of link versions.
-def serialize_versions(versions): - """ - Provides the payload for a series of link versions. + :param list versions: link versions to serialize
- :param list versions: link versions to serialize + :returns: **bytes** with a payload for these versions + """
- :returns: **bytes** with a payload for these versions - """ + # Used for link version negotiation so we don't have that yet. This is fine + # since VERSION cells avoid most version dependent attributes.
- return b''.join([struct.pack(Pack.SHORT, v) for v in versions]) + payload = b''.join([struct.pack(Pack.SHORT, v) for v in versions]) + return Cell.pack('VERSIONS', 3, payload) + + +class Relay(object): + """ + Connection with a `Tor relay's ORPort + https://gitweb.torproject.org/torspec.git/tree/tor-spec.txt`_. + """
Pack = enum.Enum(