summary refs log tree commit diff
path: root/synapse/federation/transport.py
diff options
context:
space:
mode:
authorPaul "LeoNerd" Evans <paul@matrix.org>2014-08-13 16:55:53 +0100
committerPaul "LeoNerd" Evans <paul@matrix.org>2014-08-13 17:23:49 +0100
commit827de7cee98d0626f3ca24a04955df2ff1bdfc41 (patch)
tree96e24102fda4523aab3e010f9f5e38efb4e144b8 /synapse/federation/transport.py
parentUpdate get_json()'s documentation to match the actual observed behaviour (diff)
downloadsynapse-827de7cee98d0626f3ca24a04955df2ff1bdfc41.tar.xz
Define the concept of a 'federation Query'; creating API for making and handling Queries on the Federation's increasingly-inaccurately-named ReplicationLayer
Diffstat (limited to 'synapse/federation/transport.py')
-rw-r--r--synapse/federation/transport.py25
1 files changed, 25 insertions, 0 deletions
diff --git a/synapse/federation/transport.py b/synapse/federation/transport.py

index ff3fc34419..69166036fb 100644 --- a/synapse/federation/transport.py +++ b/synapse/federation/transport.py
@@ -180,6 +180,19 @@ class TransportLayer(object): defer.returnValue((code, response)) + @defer.inlineCallbacks + @log_function + def make_query(self, destination, query_type, args): + path = PREFIX + "/query/%s" % query_type + + response = yield self.client.get_json( + destination=destination, + path=path, + args=args + ) + + defer.returnValue(response) + @log_function def register_received_handler(self, handler): """ Register a handler that will be fired when we receive data. @@ -251,6 +264,15 @@ class TransportLayer(object): lambda request, context: handler.on_context_pdus_request(context) ) + # This is when we receive a server-server Query + self.server.register_path( + "GET", + re.compile("^" + PREFIX + "/query/([^/]*)$"), + lambda request, query_type: handler.on_query_request( + query_type, {k: v[0] for k, v in request.args.items()} + ) + ) + @defer.inlineCallbacks @log_function def _on_send_request(self, request, transaction_id): @@ -456,3 +478,6 @@ class TransportRequestHandler(object): of what went wrong. """ pass + + def on_query_request(self): + """ Called on a GET /query/<query_type> request. """