diff options
author | reivilibre <38398653+reivilibre@users.noreply.github.com> | 2019-08-28 09:00:21 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-08-28 09:00:21 +0100 |
commit | 7ccc25141578ec612f157d2756fb670200035fb9 (patch) | |
tree | 0a78c77d41a91bce2767b6600a0b5806153f2c45 /synapse/federation/transport/client.py | |
parent | Merge pull request #5864 from matrix-org/erikj/reliable_lookups (diff) | |
parent | Newsfile on one line (diff) | |
download | synapse-7ccc25141578ec612f157d2756fb670200035fb9.tar.xz |
Merge pull request #5859 from matrix-org/rei/msc2197
MSC2197 Search Filters over Federation
Diffstat (limited to 'synapse/federation/transport/client.py')
-rw-r--r-- | synapse/federation/transport/client.py | 46 |
1 files changed, 31 insertions, 15 deletions
diff --git a/synapse/federation/transport/client.py b/synapse/federation/transport/client.py index 0cea0d2a10..482a101c09 100644 --- a/synapse/federation/transport/client.py +++ b/synapse/federation/transport/client.py @@ -327,21 +327,37 @@ class TransportLayerClient(object): include_all_networks=False, third_party_instance_id=None, ): - path = _create_v1_path("/publicRooms") - - args = {"include_all_networks": "true" if include_all_networks else "false"} - if third_party_instance_id: - args["third_party_instance_id"] = (third_party_instance_id,) - if limit: - args["limit"] = [str(limit)] - if since_token: - args["since"] = [since_token] - - # TODO(erikj): Actually send the search_filter across federation. - - response = yield self.client.get_json( - destination=remote_server, path=path, args=args, ignore_backoff=True - ) + if search_filter: + # this uses MSC2197 (Search Filtering over Federation) + path = _create_v1_path("/publicRooms") + + data = {"include_all_networks": "true" if include_all_networks else "false"} + if third_party_instance_id: + data["third_party_instance_id"] = third_party_instance_id + if limit: + data["limit"] = str(limit) + if since_token: + data["since"] = since_token + + data["filter"] = search_filter + + response = yield self.client.post_json( + destination=remote_server, path=path, data=data, ignore_backoff=True + ) + else: + path = _create_v1_path("/publicRooms") + + args = {"include_all_networks": "true" if include_all_networks else "false"} + if third_party_instance_id: + args["third_party_instance_id"] = (third_party_instance_id,) + if limit: + args["limit"] = [str(limit)] + if since_token: + args["since"] = [since_token] + + response = yield self.client.get_json( + destination=remote_server, path=path, args=args, ignore_backoff=True + ) return response |