From 28c3a43a7e6f3c1a8f1c455426227ed6b0bd3f78 Mon Sep 17 00:00:00 2001 From: Erik Johnston Date: Tue, 27 Nov 2018 15:33:56 +0000 Subject: [PATCH] Make using proxy optional --- synapse/http/matrixfederationclient.py | 30 +++++++++++++++++++++----- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/synapse/http/matrixfederationclient.py b/synapse/http/matrixfederationclient.py index 3d45747db4..2830970e22 100644 --- a/synapse/http/matrixfederationclient.py +++ b/synapse/http/matrixfederationclient.py @@ -18,6 +18,7 @@ import logging import random import sys from io import BytesIO +import os import opentracing from opentracing.ext import tags @@ -58,6 +59,7 @@ outgoing_requests_counter = Counter("synapse_http_matrixfederationclient_request incoming_responses_counter = Counter("synapse_http_matrixfederationclient_responses", "", ["method", "code"]) +USE_PROXY = "SYNAPSE_USE_PROXY" in os.environ MAX_LONG_RETRIES = 10 MAX_SHORT_RETRIES = 3 @@ -68,6 +70,18 @@ else: MAXINT = sys.maxint +class ProxyMatrixFederationEndpointFactory(object): + def __init__(self, hs): + self.reactor = hs.get_reactor() + self.tls_client_options_factory = hs.tls_client_options_factory + + def endpointForURI(self, uri): + return matrix_federation_endpoint( + self.reactor, "localhost:8888", timeout=10, + tls_client_options_factory=None + ) + + class MatrixFederationEndpointFactory(object): def __init__(self, hs): self.reactor = hs.get_reactor() @@ -77,8 +91,8 @@ class MatrixFederationEndpointFactory(object): destination = uri.netloc.decode('ascii') return matrix_federation_endpoint( - self.reactor, "localhost:8888", timeout=10, - tls_client_options_factory=None + self.reactor, destination, timeout=10, + tls_client_options_factory=self.tls_client_options_factory ) @@ -193,9 +207,15 @@ class MatrixFederationHttpClient(object): pool.retryAutomatically = False pool.maxPersistentPerHost = 5 pool.cachedConnectionTimeout = 2 * 60 - self.agent = Agent.usingEndpointFactory( - reactor, MatrixFederationEndpointFactory(hs), pool=pool - ) + + if USE_PROXY: + self.agent = Agent.usingEndpointFactory( + reactor, ProxyMatrixFederationEndpointFactory(hs), pool=pool + ) + else: + self.agent = Agent.usingEndpointFactory( + reactor, MatrixFederationEndpointFactory(hs), pool=pool + ) self.clock = hs.get_clock() self._store = hs.get_datastore() self.version_string_bytes = hs.version_string.encode('ascii')