diff --git a/synapse/federation/replication.py b/synapse/federation/replication.py
index 92a9678e2c..d1eddf249d 100644
--- a/synapse/federation/replication.py
+++ b/synapse/federation/replication.py
@@ -426,8 +426,12 @@ class ReplicationLayer(object):
@defer.inlineCallbacks
def on_send_join_request(self, origin, content):
pdu = Pdu(**content)
- state = yield self.handler.on_send_join_request(origin, pdu)
- defer.returnValue((200, self._transaction_from_pdus(state).get_dict()))
+ res_pdus = yield self.handler.on_send_join_request(origin, pdu)
+
+ defer.returnValue((200, {
+ "state": [p.get_dict() for p in res_pdus["state"]],
+ "auth_chain": [p.get_dict() for p in res_pdus["auth_chain"]],
+ }))
@defer.inlineCallbacks
def make_join(self, destination, context, user_id):
@@ -451,11 +455,17 @@ class ReplicationLayer(object):
)
logger.debug("Got content: %s", content)
- pdus = [Pdu(outlier=True, **p) for p in content.get("pdus", [])]
- for pdu in pdus:
+ state = [Pdu(outlier=True, **p) for p in content.get("state", [])]
+ for pdu in state:
yield self._handle_new_pdu(destination, pdu)
- defer.returnValue(pdus)
+ auth_chain = [
+ Pdu(outlier=True, **p) for p in content.get("auth_chain", [])
+ ]
+ for pdu in auth_chain:
+ yield self._handle_new_pdu(destination, pdu)
+
+ defer.returnValue(state)
@log_function
def _get_persisted_pdu(self, event_id):
diff --git a/synapse/handlers/federation.py b/synapse/handlers/federation.py
index 09593303a4..c193da12b7 100644
--- a/synapse/handlers/federation.py
+++ b/synapse/handlers/federation.py
@@ -366,10 +366,19 @@ class FederationHandler(BaseHandler):
yield self.replication_layer.send_pdu(new_pdu)
- defer.returnValue([
+ auth_chain = yield self.store.get_auth_chain(event.event_id)
+ pdu_auth_chain = [
self.pdu_codec.pdu_from_event(e)
- for e in event.state_events.values()
- ])
+ for e in auth_chain
+ ]
+
+ defer.returnValue({
+ "state": [
+ self.pdu_codec.pdu_from_event(e)
+ for e in event.state_events.values()
+ ],
+ "auth_chain": pdu_auth_chain,
+ })
@defer.inlineCallbacks
def get_state_for_pdu(self, event_id):
|