[tor-commits] [ooni-probe/master] Implement a hotfix for https://github.com/habnabit/txsocksx/issues/9

art at torproject.org art at torproject.org
Wed Feb 4 13:27:16 UTC 2015


commit 96391035de250a2d5842c5c0e68879f1838eb874
Author: Arturo Filastò <art at fuffa.org>
Date:   Wed Feb 4 11:18:05 2015 +0100

    Implement a hotfix for https://github.com/habnabit/txsocksx/issues/9
---
 ooni/oonibclient.py       |    3 ++-
 ooni/reporter.py          |    2 +-
 ooni/utils/hacks.py       |   29 +++++++++++++++++++++++++++++
 ooni/utils/trueheaders.py |    2 +-
 4 files changed, 33 insertions(+), 3 deletions(-)

diff --git a/ooni/oonibclient.py b/ooni/oonibclient.py
index a26b771..126eeb7 100644
--- a/ooni/oonibclient.py
+++ b/ooni/oonibclient.py
@@ -203,7 +203,8 @@ class OONIBClient(object):
         try:
             test_collector = yield self.queryBackend('POST', '/bouncer/net-tests',
                                                      query={'net-tests': net_tests})
-        except Exception:
+        except Exception as exc:
+            log.exception(exc)
             raise e.CouldNotFindTestCollector
 
         defer.returnValue(test_collector)
diff --git a/ooni/reporter.py b/ooni/reporter.py
index 34ff333..bf4a645 100644
--- a/ooni/reporter.py
+++ b/ooni/reporter.py
@@ -287,7 +287,7 @@ class OONIBReporter(OReporter):
         # do this with some deferred kung foo or instantiate the reporter after
         # tor is started.
 
-        from txsocksx.http import SOCKS5Agent
+        from ooni.utils.hacks import SOCKS5Agent
         from twisted.internet import reactor
 
         if self.collectorAddress.startswith('httpo://'):
diff --git a/ooni/utils/hacks.py b/ooni/utils/hacks.py
index 2c84a23..e001d3f 100644
--- a/ooni/utils/hacks.py
+++ b/ooni/utils/hacks.py
@@ -2,6 +2,9 @@
 # hackish way, we put it in here. This one day will be empty.
 
 import copy_reg
+from twisted.web.client import SchemeNotSupported
+
+from txsocksx.http import SOCKS5Agent as SOCKS5AgentOriginal
 
 
 def patched_reduce_ex(self, proto):
@@ -56,3 +59,29 @@ def patched_reduce_ex(self, proto):
     else:
         return copy_reg._reconstructor, args
 
+
+class SOCKS5Agent(SOCKS5AgentOriginal):
+    """
+    This is a quick hack to fix:
+    https://github.com/habnabit/txsocksx/issues/9
+    """
+    def _getEndpoint(self, scheme_or_uri, host=None, port=None):
+        if host is not None:
+            scheme = scheme_or_uri
+        else:
+            scheme = scheme_or_uri.scheme
+            host = scheme_or_uri.host
+            port = scheme_or_uri.port
+        if scheme not in ('http', 'https'):
+            raise SchemeNotSupported('unsupported scheme', scheme)
+        endpoint = self.endpointFactory(
+            host, port, self.proxyEndpoint, **self.endpointArgs)
+        if scheme == 'https':
+            if hasattr(self, '_wrapContextFactory'):
+                tlsPolicy = self._wrapContextFactory(host, port)
+            elif hasattr(self, '_policyForHTTPS'):
+                tlsPolicy = self._policyForHTTPS.creatorForNetloc(host, port)
+            else:
+                raise NotImplementedError("can't figure out how to make a context factory")
+            endpoint = self._tlsWrapper(tlsPolicy, endpoint)
+        return endpoint
diff --git a/ooni/utils/trueheaders.py b/ooni/utils/trueheaders.py
index e5dcd0a..f015b62 100644
--- a/ooni/utils/trueheaders.py
+++ b/ooni/utils/trueheaders.py
@@ -12,7 +12,7 @@ from twisted.web._newclient import RequestNotSent, RequestGenerationFailed, Tran
 from twisted.internet import reactor
 from twisted.internet.defer import Deferred, fail, maybeDeferred, failure
 
-from txsocksx.http import SOCKS5Agent
+from ooni.utils.hacks import SOCKS5Agent
 from txsocksx.client import SOCKS5ClientFactory
 
 SOCKS5ClientFactory.noisy = False





More information about the tor-commits mailing list