commit 1106ec14c98207cf8cfdb1e660efbaee4293fe1d Author: George Kadianakis desnacked@riseup.net Date: Fri Apr 25 20:11:23 2014 +0100
Proxy support: Ensure we have txsocksx and a recent enough Twisted.
From now on, obfsproxy when configured to connect to a proxy (either using --proxy or TOR_PT_PROXY) will refuse to run if it doesn't have txsocksx or its Twisted is too old (< 13.2.0). --- obfsproxy/managed/client.py | 8 ++++++++ obfsproxy/network/network.py | 21 +++++++++++++++++++++ obfsproxy/pyobfsproxy.py | 5 +++++ 3 files changed, 34 insertions(+)
diff --git a/obfsproxy/managed/client.py b/obfsproxy/managed/client.py index 1a49074..f819e1a 100644 --- a/obfsproxy/managed/client.py +++ b/obfsproxy/managed/client.py @@ -4,6 +4,7 @@ from twisted.internet import reactor, error
import obfsproxy.network.launch_transport as launch_transport +import obfsproxy.network.network as network import obfsproxy.transports.transports as transports import obfsproxy.common.log as logging import obfsproxy.common.transport_config as transport_config @@ -32,6 +33,13 @@ def do_managed_client(): # Apply the proxy settings if any proxy = ptclient.config.getProxy() if proxy: + # Make sure that we have all the necessary dependencies + try: + network.ensure_outgoing_proxy_dependencies() + except network.OutgoingProxyDepsFailure, err: + ptclient.reportProxyError(str(err)) + return + ptclient.reportProxySuccess()
for transport in ptclient.getTransports(): diff --git a/obfsproxy/network/network.py b/obfsproxy/network/network.py index 958728e..2715ae9 100644 --- a/obfsproxy/network/network.py +++ b/obfsproxy/network/network.py @@ -435,3 +435,24 @@ def create_proxy_client(host, port, proxy_spec, instance): else: # Should *NEVER* happen raise RuntimeError("Invalid proxy scheme %s" % proxy_spec.scheme) + +def ensure_outgoing_proxy_dependencies(): + """Make sure that we have the necessary dependencies to connect to + outgoing HTTP/SOCKS proxies. + + Raises OutgoingProxyDepsFailure in case of error. + """ + + # We can't connect to outgoing proxies without txsocksx. + try: + import txsocksx + except ImportError: + raise OutgoingProxyDepsFailure("We don't have txsocksx. Can't do proxy. Please install txsocksx.") + + # We also need a recent version of twisted ( >= twisted-13.2.0) + import twisted + from twisted.python import versions + if twisted.version < versions.Version('twisted', 13, 2, 0): + raise OutgoingProxyDepsFailure("Outdated version of twisted (%s). Please upgrade to >= twisted-13.2.0" % twisted.version.short()) + +class OutgoingProxyDepsFailure(Exception): pass diff --git a/obfsproxy/pyobfsproxy.py b/obfsproxy/pyobfsproxy.py index f6f7bdb..ac07c65 100755 --- a/obfsproxy/pyobfsproxy.py +++ b/obfsproxy/pyobfsproxy.py @@ -10,6 +10,7 @@ Currently, not all of the obfsproxy command line options have been implemented. import sys
import obfsproxy.network.launch_transport as launch_transport +import obfsproxy.network.network as network import obfsproxy.transports.transports as transports import obfsproxy.common.log as logging import obfsproxy.common.argparser as argparser @@ -127,6 +128,10 @@ def consider_cli_args(args): "Use the managed-proxy configuration protocol instead!") sys.exit(1)
+ # Check if we have the necessary dependencies + # (the function will raise an exception if not) + network.ensure_outgoing_proxy_dependencies() + # Make sure that the proxy URI parses smoothly. try: proxy = parseProxyURI(args.proxy)
tor-commits@lists.torproject.org