[tor-commits] [stem/master] Controller sometimes provides microdescriptor router status entries
atagar at torproject.org
atagar at torproject.org
Sun Mar 23 21:26:09 UTC 2014
commit d70fa9cdd85924ef2e24ceebc2ce348f50634d80
Author: Damian Johnson <atagar at torproject.org>
Date: Sun Mar 23 14:24:09 2014 -0700
Controller sometimes provides microdescriptor router status entries
As pointed out by mr-4 on...
https://trac.torproject.org/7646
Tor's 'GETINFO ns/*' methods provide standard v3 router status entries when Tor
isn't using microdescriptors, and microdescriptor flavored entries when it is.
Changing our Controller's get_netword_status() and get_network_statuses()
methods to provide the right return type.
This is a clunkier for our users but there's not much that Stem can do about
that. Oh well. :(
---
docs/change_log.rst | 1 +
docs/faq.rst | 2 +-
stem/control.py | 37 ++++++++++++++++++++++++++++++++++---
3 files changed, 36 insertions(+), 4 deletions(-)
diff --git a/docs/change_log.rst b/docs/change_log.rst
index 6b90ca9..a02750c 100644
--- a/docs/change_log.rst
+++ b/docs/change_log.rst
@@ -49,6 +49,7 @@ The following are only available within Stem's `git repository
* Added `support for CELL_STATS events <api/response.html#stem.response.events.CellStatsEvent>`_ (:spec:`6f2919a`)
* Added `support for TB_EMPTY events <api/response.html#stem.response.events.TokenBucketEmptyEvent>`_ (:spec:`6f2919a`)
* Added `support for HS_DESC events <api/response.html#stem.response.events.HSDescEvent>`_ (:spec:`a67ac4d`, :trac:`10807`)
+ * Changed :func:`~stem.control.Controller.get_network_status` and :func:`~stem.control.Controller.get_network_statuses` to provide :class:`~stem.descriptor.router_status_entry.RouterStatusEntryMicroV3` if Tor is using microdescriptors (:trac:`7646`)
* **Utilities**
diff --git a/docs/faq.rst b/docs/faq.rst
index 4e79251..cb70ba5 100644
--- a/docs/faq.rst
+++ b/docs/faq.rst
@@ -184,7 +184,7 @@ To get the credential for your AUTHENTICATE command we will use **hexdump**...
**I'm using password authentication**
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-Tor's other method of authentication is a credential you know. To use it you ask Tor to hash your password, then use that in your torrc...
+Tor's other method of authentication is a credential you know. To use it ask Tor to hash your password, then use that in your torrc...
::
diff --git a/stem/control.py b/stem/control.py
index 0d91587..8ea9fe7 100644
--- a/stem/control.py
+++ b/stem/control.py
@@ -1413,10 +1413,21 @@ class Controller(BaseController):
or nickname. If the relay identifier could be either a fingerprint *or*
nickname then it's queried as a fingerprint.
+ This provides
+ :class:`~stem.descriptor.router_status_entry.RouterStatusEntryMicroV3`
+ instances if tor is using microdescriptors...
+
+ ::
+
+ controller.get_conf('UseMicrodescriptors', '0') == '1'
+
+ ... and :class:`~stem.descriptor.router_status_entry.RouterStatusEntryV3`
+ otherwise.
+
:param str relay: fingerprint or nickname of the relay to be queried
:param object default: response if the query fails
- :returns: :class:`~stem.descriptor.router_status_entry.RouterStatusEntryV3`
+ :returns: :class:`~stem.descriptor.router_status_entry.RouterStatusEntry`
for the given relay
:raises:
@@ -1441,7 +1452,11 @@ class Controller(BaseController):
raise ValueError("'%s' isn't a valid fingerprint or nickname" % relay)
desc_content = self.get_info(query, get_bytes = True)
- return stem.descriptor.router_status_entry.RouterStatusEntryV3(desc_content)
+
+ if self.get_conf('UseMicrodescriptors', '0') == '1':
+ return stem.descriptor.router_status_entry.RouterStatusEntryMicroV3(desc_content)
+ else:
+ return stem.descriptor.router_status_entry.RouterStatusEntryV3(desc_content)
except Exception as exc:
if default == UNDEFINED:
raise exc
@@ -1453,6 +1468,17 @@ class Controller(BaseController):
Provides an iterator for all of the router status entries that tor
presently knows about.
+ This provides
+ :class:`~stem.descriptor.router_status_entry.RouterStatusEntryMicroV3`
+ instances if tor is using microdescriptors...
+
+ ::
+
+ controller.get_conf('UseMicrodescriptors', '0') == '1'
+
+ ... and :class:`~stem.descriptor.router_status_entry.RouterStatusEntryV3`
+ otherwise.
+
:param list default: items to provide if the query fails
:returns: iterates over
@@ -1463,6 +1489,11 @@ class Controller(BaseController):
default was provided
"""
+ if self.get_conf('UseMicrodescriptors', '0') == '1':
+ desc_class = stem.descriptor.router_status_entry.RouterStatusEntryMicroV3
+ else:
+ desc_class = stem.descriptor.router_status_entry.RouterStatusEntryV3
+
try:
# TODO: We should iterate over the descriptors as they're read from the
# socket rather than reading the whole thing into memory.
@@ -1474,7 +1505,7 @@ class Controller(BaseController):
desc_iterator = stem.descriptor.router_status_entry._parse_file(
io.BytesIO(desc_content),
True,
- entry_class = stem.descriptor.router_status_entry.RouterStatusEntryV3,
+ entry_class = desc_class,
)
for desc in desc_iterator:
More information about the tor-commits
mailing list