[tor-commits] [stem/master] Splitting socket attribute from protocolinfo
atagar at torproject.org
atagar at torproject.org
Mon Nov 28 18:10:26 UTC 2011
commit 04975ff9d149d8a881edd8ce26925d785150eda1
Author: Damian Johnson <atagar at torproject.org>
Date: Mon Nov 28 06:56:38 2011 -0800
Splitting socket attribute from protocolinfo
Bundling the requesting socket with the protocolinfo response was kinda clunky.
I thought that it owuld make the api a little nicer, but in retrospect it's
just weird so going to a more conventional tuple response instead.
---
stem/connection.py | 41 +++++++++++++++++++-------------
test/integ/connection/protocolinfo.py | 3 --
test/unit/connection/protocolinfo.py | 2 -
3 files changed, 24 insertions(+), 22 deletions(-)
diff --git a/stem/connection.py b/stem/connection.py
index fe17d6b..b740d0d 100644
--- a/stem/connection.py
+++ b/stem/connection.py
@@ -38,7 +38,7 @@ LOGGER = logging.getLogger("stem")
AuthMethod = stem.util.enum.Enum("NONE", "PASSWORD", "COOKIE", "UNKNOWN")
-def get_protocolinfo_by_port(control_addr = "127.0.0.1", control_port = 9051, keep_alive = False):
+def get_protocolinfo_by_port(control_addr = "127.0.0.1", control_port = 9051, get_socket = False):
"""
Issues a PROTOCOLINFO query to a control port, getting information about the
tor process running on it.
@@ -46,11 +46,13 @@ def get_protocolinfo_by_port(control_addr = "127.0.0.1", control_port = 9051, ke
Arguments:
control_addr (str) - ip address of the controller
control_port (int) - port number of the controller
- keep_alive (bool) - keeps the socket used to issue the PROTOCOLINFO query
- open if True, closes otherwise
+ get_socket (bool) - provides the socket with the response if True,
+ otherwise the socket is closed when we're done
Returns:
- ProtocolInfoResponse with the response given by the tor process
+ stem.connection.ProtocolInfoResponse provided by tor, if get_socket is True
+ then this provides a tuple instead with both the response and connected
+ socket (stem.socket.ControlPort)
Raises:
stem.socket.ProtocolError if the PROTOCOLINFO response is malformed
@@ -65,27 +67,33 @@ def get_protocolinfo_by_port(control_addr = "127.0.0.1", control_port = 9051, ke
protocolinfo_response = control_socket.recv()
ProtocolInfoResponse.convert(protocolinfo_response)
- if keep_alive: protocolinfo_response.socket = control_socket
- else: control_socket.close()
-
# attempt to expand relative cookie paths using our port to infer the pid
if control_addr == "127.0.0.1":
_expand_cookie_path(protocolinfo_response, stem.util.system.get_pid_by_port, control_port)
- return protocolinfo_response
+ if get_socket:
+ return (protocolinfo_response, control_socket)
+ else:
+ control_socket.close()
+ return protocolinfo_response
except stem.socket.ControllerError, exc:
control_socket.close()
raise exc
-def get_protocolinfo_by_socket(socket_path = "/var/run/tor/control", keep_alive = False):
+def get_protocolinfo_by_socket(socket_path = "/var/run/tor/control", get_socket = False):
"""
Issues a PROTOCOLINFO query to a control socket, getting information about
the tor process running on it.
Arguments:
socket_path (str) - path where the control socket is located
- keep_alive (bool) - keeps the socket used to issue the PROTOCOLINFO query
- open if True, closes otherwise
+ get_socket (bool) - provides the socket with the response if True,
+ otherwise the socket is closed when we're done
+
+ Returns:
+ stem.connection.ProtocolInfoResponse provided by tor, if get_socket is True
+ then this provides a tuple instead with both the response and connected
+ socket (stem.socket.ControlSocketFile)
Raises:
stem.socket.ProtocolError if the PROTOCOLINFO response is malformed
@@ -100,13 +108,14 @@ def get_protocolinfo_by_socket(socket_path = "/var/run/tor/control", keep_alive
protocolinfo_response = control_socket.recv()
ProtocolInfoResponse.convert(protocolinfo_response)
- if keep_alive: protocolinfo_response.socket = control_socket
- else: control_socket.close()
-
# attempt to expand relative cookie paths using our port to infer the pid
_expand_cookie_path(protocolinfo_response, stem.util.system.get_pid_by_open_file, socket_path)
- return protocolinfo_response
+ if get_socket:
+ return (protocolinfo_response, control_socket)
+ else:
+ control_socket.close()
+ return protocolinfo_response
except stem.socket.ControllerError, exc:
control_socket.close()
raise exc
@@ -160,7 +169,6 @@ class ProtocolInfoResponse(stem.socket.ControlMessage):
auth_methods (tuple) - AuthMethod types that tor will accept
unknown_auth_methods (tuple) - strings of unrecognized auth methods
cookie_path (str) - path of tor's authentication cookie
- socket (stem.socket.ControlSocket) - socket used to make the query
"""
def convert(control_message):
@@ -196,7 +204,6 @@ class ProtocolInfoResponse(stem.socket.ControlMessage):
self.protocol_version = None
self.tor_version = None
self.cookie_path = None
- self.socket = None
auth_methods, unknown_auth_methods = [], []
diff --git a/test/integ/connection/protocolinfo.py b/test/integ/connection/protocolinfo.py
index 8c23329..e1436f8 100644
--- a/test/integ/connection/protocolinfo.py
+++ b/test/integ/connection/protocolinfo.py
@@ -46,7 +46,6 @@ class TestProtocolInfo(unittest.TestCase):
self.assertNotEqual(None, protocolinfo_response.tor_version)
self.assertNotEqual(None, protocolinfo_response.auth_methods)
- self.assertEqual(None, protocolinfo_response.socket)
self.assert_protocolinfo_attr(protocolinfo_response, connection_type)
def test_get_protocolinfo_by_port(self):
@@ -77,7 +76,6 @@ class TestProtocolInfo(unittest.TestCase):
if test.runner.OPT_PORT in test.runner.CONNECTION_OPTS[connection_type]:
protocolinfo_response = stem.connection.get_protocolinfo_by_port(control_port = test.runner.CONTROL_PORT)
- self.assertEqual(None, protocolinfo_response.socket)
self.assert_protocolinfo_attr(protocolinfo_response, connection_type)
else:
# we don't have a control port
@@ -104,7 +102,6 @@ class TestProtocolInfo(unittest.TestCase):
if test.runner.OPT_SOCKET in test.runner.CONNECTION_OPTS[connection_type]:
protocolinfo_response = stem.connection.get_protocolinfo_by_socket(socket_path = test.runner.CONTROL_SOCKET_PATH)
- self.assertEqual(None, protocolinfo_response.socket)
self.assert_protocolinfo_attr(protocolinfo_response, connection_type)
else:
# we don't have a control socket
diff --git a/test/unit/connection/protocolinfo.py b/test/unit/connection/protocolinfo.py
index ecca8b6..bc0fef3 100644
--- a/test/unit/connection/protocolinfo.py
+++ b/test/unit/connection/protocolinfo.py
@@ -92,7 +92,6 @@ class TestProtocolInfoResponse(unittest.TestCase):
self.assertEquals((stem.connection.AuthMethod.NONE, ), control_message.auth_methods)
self.assertEquals((), control_message.unknown_auth_methods)
self.assertEquals(None, control_message.cookie_path)
- self.assertEquals(None, control_message.socket)
def test_password_auth(self):
"""
@@ -148,7 +147,6 @@ class TestProtocolInfoResponse(unittest.TestCase):
self.assertEquals((), control_message.auth_methods)
self.assertEquals((), control_message.unknown_auth_methods)
self.assertEquals(None, control_message.cookie_path)
- self.assertEquals(None, control_message.socket)
def test_relative_cookie(self):
"""
More information about the tor-commits
mailing list