[tor-commits] [stem/master] Support CIRC event's new SOCKS_USERNAME and SOCKS_PASSWORD attributes

atagar at torproject.org atagar at torproject.org
Mon Feb 23 20:20:36 UTC 2015


commit 4b8825482e0fd3dd4061a2b57473a4622e34d120
Author: Damian Johnson <atagar at torproject.org>
Date:   Mon Feb 23 12:19:40 2015 -0800

    Support CIRC event's new SOCKS_USERNAME and SOCKS_PASSWORD attributes
    
    Adding support for the new controller attributes discussed in #14555.
---
 docs/change_log.rst          |    1 +
 stem/response/events.py      |   11 ++++++++++-
 test/unit/response/events.py |   23 +++++++++++++++++++++++
 3 files changed, 34 insertions(+), 1 deletion(-)

diff --git a/docs/change_log.rst b/docs/change_log.rst
index af883ce..7143655 100644
--- a/docs/change_log.rst
+++ b/docs/change_log.rst
@@ -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**
diff --git a/stem/response/events.py b/stem/response/events.py
index af205bd..cdf0ba7 100644
--- a/stem/response/events.py
+++ b/stem/response/events.py
@@ -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)
 
diff --git a/test/unit/response/events.py b/test/unit/response/events.py
index 2e5ef50..c4d0ac8 100644
--- a/test/unit/response/events.py
+++ b/test/unit/response/events.py
@@ -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))



More information about the tor-commits mailing list