[tor-commits] [stem/master] Add support for ADD_ONION's MaxStreamsCloseCircuit
atagar at torproject.org
atagar at torproject.org
Fri Dec 1 17:32:34 UTC 2017
commit 1ffcb598f780ae80b10cc66f7a89cf1d2c6a301c
Author: Damian Johnson <atagar at torproject.org>
Date: Fri Dec 1 09:33:00 2017 -0800
Add support for ADD_ONION's MaxStreamsCloseCircuit
Adding support for a newly documented Onion Service capability...
https://gitweb.torproject.org/torspec.git/commit/?id=2fcb1c2
https://trac.torproject.org/projects/tor/ticket/24201
---
docs/change_log.rst | 4 ++++
stem/control.py | 16 +++++++++++++++-
stem/version.py | 2 ++
3 files changed, 21 insertions(+), 1 deletion(-)
diff --git a/docs/change_log.rst b/docs/change_log.rst
index 191290e1..cfe5200e 100644
--- a/docs/change_log.rst
+++ b/docs/change_log.rst
@@ -44,6 +44,10 @@ Unreleased
The following are only available within Stem's `git repository
<download.html>`_.
+ * **Controller**
+
+ * Added support for limiting the maximum number of streams to :func:`~stem.control.Controller.create_ephemeral_hidden_service` (:spec:`2fcb1c2`)
+
.. _version_1.6:
Version 1.6 (November 5th, 2017)
diff --git a/stem/control.py b/stem/control.py
index 1468e6c2..1b719dd0 100644
--- a/stem/control.py
+++ b/stem/control.py
@@ -2804,7 +2804,7 @@ class Controller(BaseController):
return [r for r in result if r] # drop any empty responses (GETINFO is blank if unset)
- def create_ephemeral_hidden_service(self, ports, key_type = 'NEW', key_content = 'BEST', discard_key = False, detached = False, await_publication = False, basic_auth = None):
+ def create_ephemeral_hidden_service(self, ports, key_type = 'NEW', key_content = 'BEST', discard_key = False, detached = False, await_publication = False, basic_auth = None, max_streams = None):
"""
Creates a new hidden service. Unlike
:func:`~stem.control.Controller.create_hidden_service` this style of
@@ -2862,6 +2862,9 @@ class Controller(BaseController):
'HiddenServiceSingleHopMode 1' and 'HiddenServiceNonAnonymousMode 1' in
your torrc.
+ .. versionchanged:: 1.7.0
+ Added the max_streams argument.
+
:param int,list,dict ports: hidden service port(s) or mapping of hidden
service ports to their targets
:param str key_type: type of key being provided, generates a new key if
@@ -2875,6 +2878,8 @@ class Controller(BaseController):
:param bool await_publication: blocks until our descriptor is successfully
published if **True**
:param dict basic_auth: required user credentials to access this service
+ :param int max_streams: maximum number of streams the hidden service will
+ accept, unlimited if zero or not set
:returns: :class:`~stem.response.add_onion.AddOnionResponse` with the response
@@ -2908,6 +2913,12 @@ class Controller(BaseController):
flags.append('BasicAuth')
+ if max_streams is not None:
+ if self.get_version() < stem.version.Requirement.ADD_ONION_MAX_STREAMS:
+ raise stem.UnsatisfiableRequest(message = 'Limitation of the maximum number of streams to accept was added to ADD_ONION in tor version %s' % stem.version.Requirement.ADD_ONION_MAX_STREAMS)
+
+ flags.append('MaxStreamsCloseCircuit')
+
if self.get_version() >= stem.version.Requirement.ADD_ONION_NON_ANONYMOUS:
if self.get_conf('HiddenServiceSingleHopMode', None) == '1' and self.get_conf('HiddenServiceNonAnonymousMode', None) == '1':
flags.append('NonAnonymous')
@@ -2915,6 +2926,9 @@ class Controller(BaseController):
if flags:
request += ' Flags=%s' % ','.join(flags)
+ if max_streams is not None:
+ request += ' MaxStreams=%s' % max_streams
+
if isinstance(ports, int):
request += ' Port=%s' % ports
elif isinstance(ports, list):
diff --git a/stem/version.py b/stem/version.py
index 5f7822ba..6af239b0 100644
--- a/stem/version.py
+++ b/stem/version.py
@@ -66,6 +66,7 @@ easily parsed and compared, for instance...
**ADD_ONION** ADD_ONION and DEL_ONION requests
**ADD_ONION_BASIC_AUTH** ADD_ONION supports basic authentication
**ADD_ONION_NON_ANONYMOUS** ADD_ONION supports non-anonymous mode
+ **ADD_ONION_MAX_STREAMS** ADD_ONION support for MaxStreamsCloseCircuit
**LOADCONF** LOADCONF requests
**MICRODESCRIPTOR_IS_DEFAULT** Tor gets microdescriptors by default rather than server descriptors
**SAVECONF_FORCE** Added the 'FORCE' flag to SAVECONF
@@ -382,6 +383,7 @@ Requirement = stem.util.enum.Enum(
('ADD_ONION', Version('0.2.7.1-alpha')),
('ADD_ONION_BASIC_AUTH', Version('0.2.9.1-alpha')),
('ADD_ONION_NON_ANONYMOUS', Version('0.2.9.3-alpha')),
+ ('ADD_ONION_MAX_STREAMS', Version('0.2.7.2-alpha')),
('LOADCONF', Version('0.2.1.1')),
('MICRODESCRIPTOR_IS_DEFAULT', Version('0.2.3.3')),
('SAVECONF_FORCE', Version('0.3.1.1-alpha')),
More information about the tor-commits
mailing list