[tor-commits] [stem/master] VersionCell.pack function

atagar at torproject.org atagar at torproject.org
Sun Jan 21 02:04:04 UTC 2018


commit cf78cc48f811a3f0af1a7904ff7d78d5b20ad1ec
Author: Damian Johnson <atagar at 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(





More information about the tor-commits mailing list