[tor-commits] [stem/master] Add a make_router_status_entry method

atagar at torproject.org atagar at torproject.org
Fri Jun 30 18:05:32 UTC 2017


commit 984497610ebc1efbf474b5dbd3fcc7e89c88fedd
Author: Damian Johnson <atagar at torproject.org>
Date:   Fri Jun 30 11:06:51 2017 -0700

    Add a make_router_status_entry method
    
    Little helper to make router status entries that are derived from a server
    descriptor. This presently populates just the base router status entry fields,
    not the optional v3 fields. Happy to have it expanded if folks need that
    though.
---
 stem/descriptor/server_descriptor.py | 29 +++++++++++++++++++++++++++++
 1 file changed, 29 insertions(+)

diff --git a/stem/descriptor/server_descriptor.py b/stem/descriptor/server_descriptor.py
index 643831b..edd1612 100644
--- a/stem/descriptor/server_descriptor.py
+++ b/stem/descriptor/server_descriptor.py
@@ -21,6 +21,7 @@ etc). This information is provided from a few sources...
 
   ServerDescriptor - Tor server descriptor.
     |- RelayDescriptor - Server descriptor for a relay.
+    |  +- make_router_status_entry - Creates a router status entry for this descriptor.
     |
     |- BridgeDescriptor - Scrubbed server descriptor for a bridge.
     |  |- is_scrubbed - checks if our content has been properly scrubbed
@@ -46,6 +47,7 @@ import stem.util.str_tools
 import stem.util.tor_tools
 import stem.version
 
+from stem.descriptor.router_status_entry import RouterStatusEntryV3
 from stem.util import str_type
 
 from stem.descriptor import (
@@ -855,6 +857,33 @@ class RelayDescriptor(ServerDescriptor):
 
     return self._digest_for_content(b'router ', b'\nrouter-signature\n')
 
+  def make_router_status_entry(self):
+    """
+    Provides a RouterStatusEntryV3 for this descriptor content.
+
+    .. versionadded:: 1.6.0
+
+    :returns: :class:`~stem.descriptor.router_status_entry.RouterStatusEntryV3`
+      that would be in the consensus
+    """
+
+    attr = {
+      'r': ' '.join([
+        self.nickname,
+        base64.b64encode(binascii.unhexlify(self.fingerprint)).rstrip('='),
+        base64.b64encode(binascii.unhexlify(self.digest())).rstrip('='),
+        self.published.strftime('%Y-%m-%d %H:%M:%S'),
+        self.address,
+        str(self.or_port),
+        str(self.dir_port) if self.dir_port else '0',
+      ]),
+    }
+
+    if self.tor_version:
+      attr['v'] = self.tor_version
+
+    return RouterStatusEntryV3.create(attr)
+
   @lru_cache()
   def onion_key_crosscert_digest(self):
     """



More information about the tor-commits mailing list