[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[tor-commits] [stem/master] Checking when EXTENDCIRCUIT is/isn't provided
commit 6f2c1c33931b6fda738468d03ee0f835f0caca6b
Author: Damian Johnson <atagar@xxxxxxxxxxxxxx>
Date: Sun Nov 25 13:50:04 2012 -0800
Checking when EXTENDCIRCUIT is/isn't provided
The EXTENDCIRCUIT's path argument is optional unless...
* the ciruit id is non-zero
* we're prior to tor version 0.2.2.9 where it was made optional:
https://gitweb.torproject.org/tor.git/commitdiff/ac68704f07c2b703
Pointed out by robinson and integrates his suggestions on...
https://trac.torproject.org/6666
---
stem/control.py | 11 +++++++++--
stem/version.py | 2 ++
2 files changed, 11 insertions(+), 2 deletions(-)
diff --git a/stem/control.py b/stem/control.py
index cd990d8..1476598 100644
--- a/stem/control.py
+++ b/stem/control.py
@@ -1240,7 +1240,8 @@ class Controller(BaseController):
path isn't provided, one is automatically selected.
:param int circuit: id of a circuit to be extended
- :param list,str path: one or more relays to make a circuit through
+ :param list,str path: one or more relays to make a circuit through, this is
+ required if the circuit id is non-zero
:param str purpose: "general" or "controller"
:returns: int of the circuit id of the created or extended circuit
@@ -1248,6 +1249,12 @@ class Controller(BaseController):
:raises: :class:`stem.InvalidRequest` if one of the parameters were invalid
"""
+ if path is None and circuit == 0:
+ path_opt_version = stem.version.Requirement.EXTENDCIRCUIT_PATH_OPTIONAL
+
+ if not self.get_version().meets_requirements(path_opt_version):
+ raise stem.InvalidRequest(512, "EXTENDCIRCUIT requires the path prior to version %s" % path_opt_version)
+
args = [str(circuit)]
if type(path) == str: path = [path]
if path: args.append(",".join(path))
@@ -1262,7 +1269,7 @@ class Controller(BaseController):
assert extended == "EXTENDED"
except:
raise stem.ProtocolError("EXTENDCIRCUIT response invalid:\n%s", str(response))
- elif response.code == '552':
+ elif response.code == ('512', '552'):
raise stem.InvalidRequest(response.code, response.message)
else:
raise stem.ProtocolError("EXTENDCIRCUIT returned unexpected response code: %s" % response.code)
diff --git a/stem/version.py b/stem/version.py
index 522c9f2..a7f31c3 100644
--- a/stem/version.py
+++ b/stem/version.py
@@ -36,6 +36,7 @@ easily parsed and compared, for instance...
===================================== ===========
**AUTH_SAFECOOKIE** 'SAFECOOKIE' authentication method
**GETINFO_CONFIG_TEXT** 'GETINFO config-text' query
+ **EXTENDCIRCUIT_PATH_OPTIONAL** 'EXTENDCIRCUIT' queries can omit the path if the circuit is zero
**LOADCONF** 'LOADCONF' query
**TORRC_CONTROL_SOCKET** 'ControlSocket <path>' config option
**TORRC_DISABLE_DEBUGGER_ATTACHMENT** 'DisableDebuggerAttachment' config option
@@ -254,6 +255,7 @@ safecookie_req.greater_than(Version("0.2.3.13"))
Requirement = stem.util.enum.Enum(
("AUTH_SAFECOOKIE", safecookie_req),
("GETINFO_CONFIG_TEXT", Version("0.2.2.7")),
+ ("EXTENDCIRCUIT_PATH_OPTIONAL", Version("0.2.2.9")),
("LOADCONF", Version("0.2.1.1")),
("TORRC_CONTROL_SOCKET", Version("0.2.0.30")),
("TORRC_DISABLE_DEBUGGER_ATTACHMENT", Version("0.2.3.9")),
_______________________________________________
tor-commits mailing list
tor-commits@xxxxxxxxxxxxxxxxxxxx
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits