summary refs log tree commit diff
diff options
context:
space:
mode:
authorGlyph <glyph@twistedmatrix.com>2016-12-11 01:44:02 -0800
committerJohannes Löthberg <johannes@kyriasis.com>2016-12-11 11:10:32 +0100
commit6e18805ac2906ea52d2374024392332af1a603b7 (patch)
tree317d4b44e55b4a1467f24b1a390699337b44cf7d
parentMerge pull request #1684 from matrix-org/rav/no_run_tox_from_setup (diff)
downloadsynapse-6e18805ac2906ea52d2374024392332af1a603b7.tar.xz
IPv6 support for client.py
This is an (untested) general sketch of how to use wrapClientTLS to implement TLS over IPv6, as well as faster connections over IPv4.
-rw-r--r--synapse/http/client.py27
1 files changed, 11 insertions, 16 deletions
diff --git a/synapse/http/client.py b/synapse/http/client.py
index 3ec9bc7faf..c60e3c2ac0 100644
--- a/synapse/http/client.py
+++ b/synapse/http/client.py
@@ -386,26 +386,21 @@ class SpiderEndpointFactory(object):
 
     def endpointForURI(self, uri):
         logger.info("Getting endpoint for %s", uri.toBytes())
+        
         if uri.scheme == "http":
-            return SpiderEndpoint(
-                reactor, uri.host, uri.port, self.blacklist, self.whitelist,
-                endpoint=TCP4ClientEndpoint,
-                endpoint_kw_args={
-                    'timeout': 15
-                },
-            )
+            endpoint_factory = HostnameEndpoint
         elif uri.scheme == "https":
-            tlsPolicy = self.policyForHTTPS.creatorForNetloc(uri.host, uri.port)
-            return SpiderEndpoint(
-                reactor, uri.host, uri.port, self.blacklist, self.whitelist,
-                endpoint=SSL4ClientEndpoint,
-                endpoint_kw_args={
-                    'sslContextFactory': tlsPolicy,
-                    'timeout': 15
-                },
-            )
+            tlsCreator = self.policyForHTTPS.creatorForNetloc(uri.host, uri.port)
+            def endpoint_factory(reactor, host, port, **kw):
+                return wrapClientTLS(tlsCreator, HostnameEndpoint(reactor, host, port, **kw)
         else:
             logger.warn("Can't get endpoint for unrecognised scheme %s", uri.scheme)
+            return None
+        return SpiderEndpoint(
+            reactor, uri.host, uri.port, self.blacklist, self.whitelist,
+            endpoint=endpoint_factory, endpoint_kw_args=dict(timeout=15),
+        )
+                                     
 
 
 class SpiderHttpClient(SimpleHttpClient):