commit 980c8d43adaa3e1f4abaf6bf27badd32348ee31a Author: Damian Johnson atagar@torproject.org Date: Sat Oct 3 11:50:55 2015 -0700
Support HS_DESC's new replica field
Support for a new event field...
https://gitweb.torproject.org/torspec.git/commit/?id=4989e73
Presently the addition doesn't have quite enough detail to go on, so asking for clarification...
https://trac.torproject.org/projects/tor/ticket/17226 --- docs/change_log.rst | 1 + stem/__init__.py | 5 +++++ stem/response/events.py | 12 +++++++++++- 3 files changed, 17 insertions(+), 1 deletion(-)
diff --git a/docs/change_log.rst b/docs/change_log.rst index 2933345..727b0cb 100644 --- a/docs/change_log.rst +++ b/docs/change_log.rst @@ -48,6 +48,7 @@ The following are only available within Stem's `git repository * :func:`~stem.connection.connect` and :func:`~stem.control.Controller.from_port` now connect to both port 9051 (relay's default) and 9151 (Tor Browser's default) (:trac:`16075`) * Added `support for NETWORK_LIVENESS events <api/response.html#stem.response.events.NetworkLivenessEvent>`_ (:spec:`44aac63`) * Added :func:`~stem.control.Controller.is_user_traffic_allowed` to the :class:`~stem.control.Controller` + * Added the replica attribute to the :class:`~stem.response.events.HSDescEvent` (:spec:`4989e73`) * IPv6 addresses could trigger errors in :func:`~stem.control.Controller.get_listeners`, :class:`~stem.response.events.ORConnEvent`, and quite a few other things (:trac:`16174`) * Don't obscure stacktraces, most notably :class:`~stem.control.Controller` getter methods with default values
diff --git a/stem/__init__.py b/stem/__init__.py index fc07756..ece707a 100644 --- a/stem/__init__.py +++ b/stem/__init__.py @@ -414,6 +414,9 @@ Library for working with the tor process. .. versionchanged:: 1.4.0 Added the UPLOAD and UPLOADED actions.
+ .. versionchanged:: 1.5.0 + Added the CREATED action. + =============== =========== HSDescAction Description =============== =========== @@ -423,6 +426,7 @@ Library for working with the tor process. **UPLOADED** descriptor was uploaded with HSPOST **IGNORE** fetched descriptor was ignored because we already have its v0 descriptor **FAILED** we were unable to retrieve the descriptor + **CREATED** unknown (:trac:`17226`) =============== ===========
.. data:: HSDescReason (enum) @@ -834,6 +838,7 @@ HSDescAction = stem.util.enum.UppercaseEnum( 'UPLOADED', 'IGNORE', 'FAILED', + 'CREATED', )
HSDescReason = stem.util.enum.UppercaseEnum( diff --git a/stem/response/events.py b/stem/response/events.py index c760b98..98eaa9c 100644 --- a/stem/response/events.py +++ b/stem/response/events.py @@ -630,6 +630,9 @@ class HSDescEvent(Event): .. versionchanged:: 1.3.0 Added the reason attribute.
+ .. versionchanged:: 1.5.0 + Added the replica attribute. + :var stem.HSDescAction action: what is happening with the descriptor :var str address: hidden service address :var stem.HSAuth authentication: service's authentication method @@ -638,11 +641,12 @@ class HSDescEvent(Event): :var str directory_nickname: hidden service directory's nickname if it was provided :var str descriptor_id: descriptor identifier :var stem.HSDescReason reason: reason the descriptor failed to be fetched + :var int replica: unknown (:trac:`17226`) """
_VERSION_ADDED = stem.version.Requirement.EVENT_HS_DESC _POSITIONAL_ARGS = ('action', 'address', 'authentication', 'directory', 'descriptor_id') - _KEYWORD_ARGS = {'REASON': 'reason'} + _KEYWORD_ARGS = {'REASON': 'reason', 'REPLICA': 'replica'}
def _parse(self): self.directory_fingerprint = None @@ -654,6 +658,12 @@ class HSDescEvent(Event): except stem.ProtocolError: raise stem.ProtocolError("HS_DESC's directory doesn't match a ServerSpec: %s" % self)
+ if self.replica is not None: + if not self.replica.isdigit(): + raise stem.ProtocolError('HS_DESC event got a non-numeric replica count (%s): %s' % (self.replica, self)) + + self.replica = int(self.replica) + self._log_if_unrecognized('action', stem.HSDescAction) self._log_if_unrecognized('authentication', stem.HSAuth)