Skip to content
Snippets Groups Projects
Commit 4b882548 authored by Damian Johnson's avatar Damian Johnson
Browse files

Support CIRC event's new SOCKS_USERNAME and SOCKS_PASSWORD attributes

Adding support for the new controller attributes discussed in #14555.
parent a2d13131
Branches
Tags
No related merge requests found
......@@ -52,6 +52,7 @@ conversion (:trac:`14075`).
* **Controller**
* :func:`~stem.process.launch_tor_with_config` avoids writing a temporary torrc to disk if able (:trac:`13865`)
* :class:`~stem.response.events.CircuitEvent` support for the new SOCKS_USERNAME and SOCKS_PASSWORD arguments (:trac:`14555`, :spec:`2975974`)
* The 'strict' argument of :func:`~stem.exit_policy.ExitPolicy.can_exit_to` didn't behave as documented (:trac:`14314`)
* **Descriptors**
......
......@@ -326,6 +326,11 @@ class CircuitEvent(Event):
The CIRC event was one of the first Control Protocol V1 events and was
introduced in tor version 0.1.1.1-alpha.
.. versionchanged:: 1.4.0
Added the socks_username and socks_password attributes which is used for
`stream isolation
<https://gitweb.torproject.org/torspec.git/tree/proposals/171-separate-streams.txt>`_.
:var str id: circuit identifier
:var stem.CircStatus status: reported status for the circuit
:var tuple path: relays involved in the circuit, these are
......@@ -338,6 +343,8 @@ class CircuitEvent(Event):
:var datetime created: time when the circuit was created or cannibalized
:var stem.CircClosureReason reason: reason for the circuit to be closed
:var stem.CircClosureReason remote_reason: remote side's reason for the circuit to be closed
:var str socks_username: username for using this circuit
:var str socks_password: password for using this circuit
"""
_POSITIONAL_ARGS = ('id', 'status', 'path')
......@@ -349,6 +356,8 @@ class CircuitEvent(Event):
'TIME_CREATED': 'created',
'REASON': 'reason',
'REMOTE_REASON': 'remote_reason',
'SOCKS_USERNAME': 'socks_username',
'SOCKS_PASSWORD': 'socks_password',
}
def _parse(self):
......@@ -377,7 +386,7 @@ class CircuitEvent(Event):
if not isinstance(other, CircuitEvent):
return False
for attr in ('id', 'status', 'path', 'build_flags', 'purpose', 'hs_state', 'rend_query', 'created', 'reason', 'remote_reason'):
for attr in ('id', 'status', 'path', 'build_flags', 'purpose', 'hs_state', 'rend_query', 'created', 'reason', 'remote_reason', 'socks_username', 'socks_port'):
my_attr = getattr(self, attr)
other_attr = getattr(other, attr)
......
......@@ -109,6 +109,10 @@ TIME_CREATED=2012-11-08T16:48:36.400959 \
REASON=DESTROYED \
REMOTE_REASON=OR_CONN_CLOSED'
CIRC_WITH_CREDENTIALS = '650 CIRC 7 LAUNCHED \
SOCKS_USERNAME="It\'s a me, Mario!" \
SOCKS_PASSWORD="your princess is in another castle"'
# CIRC events from tor v0.2.1.30 without the VERBOSE_NAMES feature
CIRC_LAUNCHED_OLD = '650 CIRC 4 LAUNCHED'
......@@ -561,6 +565,8 @@ class TestEvents(unittest.TestCase):
self.assertEqual(datetime.datetime(2012, 11, 8, 16, 48, 38, 417238), event.created)
self.assertEqual(None, event.reason)
self.assertEqual(None, event.remote_reason)
self.assertEqual(None, event.socks_username)
self.assertEqual(None, event.socks_password)
event = _get_event(CIRC_EXTENDED)
......@@ -592,6 +598,23 @@ class TestEvents(unittest.TestCase):
self.assertEqual(CircClosureReason.DESTROYED, event.reason)
self.assertEqual(CircClosureReason.OR_CONN_CLOSED, event.remote_reason)
event = _get_event(CIRC_WITH_CREDENTIALS)
self.assertTrue(isinstance(event, stem.response.events.CircuitEvent))
self.assertEqual(CIRC_WITH_CREDENTIALS.lstrip('650 '), str(event))
self.assertEqual('7', event.id)
self.assertEqual(CircStatus.LAUNCHED, event.status)
self.assertEqual((), event.path)
self.assertEqual(None, event.build_flags)
self.assertEqual(None, event.purpose)
self.assertEqual(None, event.hs_state)
self.assertEqual(None, event.rend_query)
self.assertEqual(None, event.created)
self.assertEqual(None, event.reason)
self.assertEqual(None, event.remote_reason)
self.assertEqual("It's a me, Mario!", event.socks_username)
self.assertEqual('your princess is in another castle', event.socks_password)
event = _get_event(CIRC_LAUNCHED_OLD)
self.assertTrue(isinstance(event, stem.response.events.CircuitEvent))
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment