diff --git a/synapse/federation/transaction_queue.py b/synapse/federation/transaction_queue.py
index 1e5505a4bf..7d30c924d1 100644
--- a/synapse/federation/transaction_queue.py
+++ b/synapse/federation/transaction_queue.py
@@ -66,6 +66,26 @@ class TransactionQueue(object):
# HACK to get unique tx id
self._next_txn_id = int(self._clock.time_msec())
+ def can_send_to(self, destination):
+ """Can we send messages to the given server?
+
+ We can't send messages to ourselves. If we are running on localhost
+ then we can only federation with other servers running on localhost.
+ Otherwise we only federate with servers on a public domain.
+
+ Args:
+ destination(str): The server we are possibly trying to send to.
+ Returns:
+ bool: True if we can send to the server.
+ """
+
+ if destination == self.server_name:
+ return False
+ if self.server_name.startswith("localhost"):
+ return destination.startswith("localhost")
+ else:
+ return not destination.startswith("localhost")
+
@defer.inlineCallbacks
@log_function
def enqueue_pdu(self, pdu, destinations, order):
@@ -74,8 +94,9 @@ class TransactionQueue(object):
# table and we'll get back to it later.
destinations = set(destinations)
- destinations.discard(self.server_name)
- destinations.discard("localhost")
+ destinations = set(
+ dest for dest in destinations if self.can_send_to(dest)
+ )
logger.debug("Sending to: %s", str(destinations))
@@ -110,7 +131,7 @@ class TransactionQueue(object):
def enqueue_edu(self, edu):
destination = edu.destination
- if destination == self.server_name or destination == "localhost":
+ if not self.can_send_to(destination):
return
deferred = defer.Deferred()
@@ -139,6 +160,9 @@ class TransactionQueue(object):
deferred = defer.Deferred()
+ if not self.can_send_to(destination):
+ return
+
self.pending_failures_by_dest.setdefault(
destination, []
).append(
diff --git a/synapse/python_dependencies.py b/synapse/python_dependencies.py
index ec78fc3627..9464b4fb62 100644
--- a/synapse/python_dependencies.py
+++ b/synapse/python_dependencies.py
@@ -25,6 +25,11 @@ def github_link(project, version, egg):
DEPENDENCY_LINKS = [
github_link(
+ project="pyca/pynacl",
+ version="d4d3175589b892f6ea7c22f466e0e223853516fa",
+ egg="pynacl-0.3.0",
+ ),
+ github_link(
project="matrix-org/syutil",
version="v0.0.3",
egg="syutil-0.0.3",
@@ -34,11 +39,6 @@ DEPENDENCY_LINKS = [
version="v0.6.2",
egg="matrix_angular_sdk-0.6.2",
),
- github_link(
- project="pyca/pynacl",
- version="d4d3175589b892f6ea7c22f466e0e223853516fa",
- egg="pynacl-0.3.0",
- )
]
diff --git a/synapse/rest/media/v1/base_resource.py b/synapse/rest/media/v1/base_resource.py
index d44d5f1298..b10cbddb81 100644
--- a/synapse/rest/media/v1/base_resource.py
+++ b/synapse/rest/media/v1/base_resource.py
@@ -54,7 +54,7 @@ class BaseMediaResource(Resource):
try:
yield request_handler(self, request)
except CodeMessageException as e:
- logger.exception(e)
+ logger.info("Responding with error: %r", e)
respond_with_json(
request, e.code, cs_exception(e), send_cors=True
)
|