summary refs log tree commit diff
path: root/synapse/federation
diff options
context:
space:
mode:
authorErik Johnston <erik@matrix.org>2015-02-18 13:57:55 +0000
committerErik Johnston <erik@matrix.org>2015-02-18 13:57:55 +0000
commita7925259a15f2995af2fedc2a8c59cdabd78b963 (patch)
tree079f8fefaf9ae250d13bb3d3ec888cc16356a577 /synapse/federation
parentAdd errback to all deferreds in transaction_queue (diff)
parentMerge pull request #80 from matrix-org/restrict-destinations (diff)
downloadsynapse-a7925259a15f2995af2fedc2a8c59cdabd78b963.tar.xz
Merge branch 'develop' of github.com:matrix-org/synapse into release-v0.7.1
Diffstat (limited to 'synapse/federation')
-rw-r--r--synapse/federation/transaction_queue.py30
1 files changed, 27 insertions, 3 deletions
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(