0
0
Fork 0
mirror of https://github.com/matrix-construct/construct synced 2024-11-17 07:20:55 +01:00

ircd:Ⓜ️:fed: Refactor all interfaces using abstract request.

This commit is contained in:
Jason Volk 2020-03-07 17:15:58 -08:00
parent c0a5a7a89e
commit 55ffdddc6a
23 changed files with 627 additions and 945 deletions

View file

@ -17,27 +17,28 @@ namespace ircd::m::fed
}; };
struct ircd::m::fed::backfill struct ircd::m::fed::backfill
:server::request :request
{ {
struct opts; struct opts;
explicit operator json::object() const explicit operator json::object() const
{ {
return json::object{in.content}; return json::object
{
in.content
};
} }
backfill(const room::id &, const mutable_buffer &, opts); backfill(const room::id &,
const mutable_buffer &,
opts);
backfill() = default; backfill() = default;
}; };
struct ircd::m::fed::backfill::opts struct ircd::m::fed::backfill::opts
:request::opts
{ {
net::hostport remote;
string_view event_id; string_view event_id;
size_t limit {64}; size_t limit {64};
m::request request;
server::out out;
server::in in;
const struct server::request::opts *sopts {nullptr};
bool dynamic {true};
}; };

View file

@ -17,25 +17,16 @@ namespace ircd::m::fed
}; };
struct ircd::m::fed::event struct ircd::m::fed::event
:server::request :request
{ {
struct opts;
explicit operator json::object() const; explicit operator json::object() const;
explicit operator m::event() const; explicit operator m::event() const;
event(const m::event::id &, const mutable_buffer &, opts); event(const m::event::id &,
event() = default; const mutable_buffer &,
}; opts);
struct ircd::m::fed::event::opts event() = default;
{
net::hostport remote;
m::request request;
server::out out;
server::in in;
const struct server::request::opts *sopts {nullptr};
bool dynamic {false};
}; };
inline inline

View file

@ -17,7 +17,7 @@ namespace ircd::m::fed
}; };
struct ircd::m::fed::event_auth struct ircd::m::fed::event_auth
:server::request :request
{ {
struct opts; struct opts;
@ -31,17 +31,16 @@ struct ircd::m::fed::event_auth
return object["auth_chain"]; return object["auth_chain"];
} }
event_auth(const m::room::id &, const m::event::id &, const mutable_buffer &, opts); event_auth(const m::room::id &,
const m::event::id &,
const mutable_buffer &,
opts);
event_auth() = default; event_auth() = default;
}; };
struct ircd::m::fed::event_auth::opts struct ircd::m::fed::event_auth::opts
:request::opts
{ {
net::hostport remote;
m::request request;
server::out out;
server::in in;
const struct server::request::opts *sopts {nullptr};
bool dynamic {true};
bool ids_only {false}; bool ids_only {false};
}; };

View file

@ -11,14 +11,17 @@
#pragma once #pragma once
#define HAVE_IRCD_M_FED_H #define HAVE_IRCD_M_FED_H
/// Federation Interface
namespace ircd::m::fed namespace ircd::m::fed
{ {
net::hostport matrix_service(net::hostport); net::hostport matrix_service(net::hostport);
string_view fetch_well_known(const mutable_buffer &out, const string_view &origin); string_view fetch_well_known(const mutable_buffer &out, const string_view &origin);
id::event::buf fetch_head(const id::room &room_id, const string_view &remote, const id::user &); id::event::buf fetch_head(const id::room &room_id, const string_view &remote, const id::user &);
id::event::buf fetch_head(const id::room &room_id, const string_view &remote); id::event::buf fetch_head(const id::room &room_id, const string_view &remote);
} }
#include "request.h"
#include "version.h" #include "version.h"
#include "key.h" #include "key.h"
#include "query.h" #include "query.h"

View file

@ -17,34 +17,41 @@ namespace ircd::m::fed
}; };
struct ircd::m::fed::frontfill struct ircd::m::fed::frontfill
:server::request :request
{ {
struct opts; struct opts;
using span = std::pair<m::event::id, m::event::id>; using span = std::pair<m::event::id, m::event::id>;
using vector = vector_view<const m::event::id>; using vector = vector_view<const m::event::id>;
using ranges = std::pair<vector, vector>; using ranges = std::pair<vector, vector>;
static const_buffer make_content(const mutable_buffer &, const ranges &, const opts &); static const_buffer make_content(const mutable_buffer &, const ranges &, const opts &);
explicit operator json::array() const explicit operator json::array() const
{ {
const json::object content{in.content}; const json::object content
return content.get("events"); {
in.content
};
return content["events"];
} }
frontfill(const room::id &, const ranges &, const mutable_buffer &, opts); frontfill(const room::id &,
frontfill(const room::id &, const span &, const mutable_buffer &, opts); const ranges &,
const mutable_buffer &,
opts);
frontfill(const room::id &,
const span &,
const mutable_buffer &,
opts);
frontfill() = default; frontfill() = default;
}; };
struct ircd::m::fed::frontfill::opts struct ircd::m::fed::frontfill::opts
:request::opts
{ {
net::hostport remote;
size_t limit {64}; size_t limit {64};
uint64_t min_depth {0}; uint64_t min_depth {0};
m::request request;
server::out out;
server::in in;
const struct server::request::opts *sopts {nullptr};
bool dynamic {true};
}; };

View file

@ -17,25 +17,20 @@ namespace ircd::m::fed::groups
}; };
struct ircd::m::fed::groups::publicised struct ircd::m::fed::groups::publicised
:server::request :request
{ {
struct opts; explicit operator json::object() const
operator json::object() const
{ {
return json::object{in.content}; return json::object
{
in.content
};
} }
publicised(const string_view &, const vector_view<const id::user> &, const mutable_buffer &, opts); publicised(const string_view &,
const vector_view<const id::user> &,
const mutable_buffer &,
opts);
publicised() = default; publicised() = default;
}; };
struct ircd::m::fed::groups::publicised::opts
{
net::hostport remote;
m::request request;
server::out out;
server::in in;
const struct server::request::opts *sopts {nullptr};
bool dynamic {false};
};

View file

@ -17,25 +17,21 @@ namespace ircd::m::fed
}; };
struct ircd::m::fed::invite struct ircd::m::fed::invite
:server::request :request
{ {
struct opts;
explicit operator json::array() const explicit operator json::array() const
{ {
return json::array{in.content}; return json::array
{
in.content
};
} }
invite(const room::id &, const id::event &, const json::object &, const mutable_buffer &, opts); invite(const room::id &,
const id::event &,
const json::object &,
const mutable_buffer &,
opts);
invite() = default; invite() = default;
}; };
struct ircd::m::fed::invite::opts
{
net::hostport remote;
m::request request;
server::out out;
server::in in;
const struct server::request::opts *sopts {nullptr};
bool dynamic {false};
};

View file

@ -17,25 +17,21 @@ namespace ircd::m::fed
}; };
struct ircd::m::fed::invite2 struct ircd::m::fed::invite2
:server::request :request
{ {
struct opts;
explicit operator json::object() const explicit operator json::object() const
{ {
return json::object{in.content}; return json::object
{
in.content
};
} }
invite2(const room::id &, const id::event &, const json::object &, const mutable_buffer &, opts); invite2(const room::id &,
const id::event &,
const json::object &,
const mutable_buffer &,
opts);
invite2() = default; invite2() = default;
}; };
struct ircd::m::fed::invite2::opts
{
net::hostport remote;
m::request request;
server::out out;
server::in in;
const struct server::request::opts *sopts {nullptr};
bool dynamic {false};
};

View file

@ -13,50 +13,56 @@
namespace ircd::m::fed::key namespace ircd::m::fed::key
{ {
struct opts;
struct keys; struct keys;
struct query; struct query;
using opts = request::opts;
using server_key = std::pair<string_view, string_view>; // server_name, key_id using server_key = std::pair<string_view, string_view>; // server_name, key_id
}; };
struct ircd::m::fed::key::keys struct ircd::m::fed::key::keys
:server::request :request
{ {
using opts = key::opts;
explicit operator json::object() const explicit operator json::object() const
{ {
const json::object object{in.content}; return json::object
return object; {
in.content
};
} }
keys(const server_key &, const mutable_buffer &, opts); keys(const server_key &,
keys(const string_view &server_name, const mutable_buffer &, opts); const mutable_buffer &,
opts);
keys(const string_view &server_name,
const mutable_buffer &,
opts);
keys() = default; keys() = default;
}; };
struct ircd::m::fed::key::query struct ircd::m::fed::key::query
:server::request :request
{ {
using opts = key::opts;
explicit operator json::array() const explicit operator json::array() const
{ {
const json::object object{in.content}; const json::object object
const json::array &server_keys{object.get("server_keys")}; {
in.content
};
const json::array server_keys
{
object["server_keys"]
};
return server_keys; return server_keys;
} }
query(const vector_view<const server_key> &, const mutable_buffer &, opts); query(const vector_view<const server_key> &,
const mutable_buffer &,
opts);
query() = default; query() = default;
}; };
struct ircd::m::fed::key::opts
{
net::hostport remote;
m::request request;
server::out out;
server::in in;
const struct server::request::opts *sopts {nullptr};
bool dynamic {false};
};

View file

@ -17,25 +17,20 @@ namespace ircd::m::fed
}; };
struct ircd::m::fed::make_join struct ircd::m::fed::make_join
:server::request :request
{ {
struct opts; explicit operator json::object() const
operator json::object() const
{ {
return json::object{in.content}; return json::object
{
in.content
};
} }
make_join(const room::id &, const id::user &, const mutable_buffer &, opts); make_join(const room::id &,
const id::user &,
const mutable_buffer &,
opts);
make_join() = default; make_join() = default;
}; };
struct ircd::m::fed::make_join::opts
{
net::hostport remote;
m::request request;
server::out out;
server::in in;
const struct server::request::opts *sopts {nullptr};
bool dynamic {false};
};

View file

@ -17,29 +17,30 @@ namespace ircd::m::fed
}; };
struct ircd::m::fed::public_rooms struct ircd::m::fed::public_rooms
:server::request :request
{ {
struct opts; struct opts;
explicit operator json::object() const explicit operator json::object() const
{ {
return json::object{in.content}; return json::object
{
in.content
};
} }
public_rooms(const net::hostport &, const mutable_buffer &, opts); public_rooms(const string_view &remote,
const mutable_buffer &,
opts);
public_rooms() = default; public_rooms() = default;
}; };
struct ircd::m::fed::public_rooms::opts struct ircd::m::fed::public_rooms::opts
:request::opts
{ {
net::hostport remote;
size_t limit {128}; size_t limit {128};
string_view since; string_view since;
string_view third_party_instance_id; string_view third_party_instance_id;
bool include_all_networks {true}; bool include_all_networks {true};
m::request request;
server::out out;
server::in in;
const struct server::request::opts *sopts {nullptr};
bool dynamic {true};
}; };

View file

@ -17,9 +17,8 @@ namespace ircd::m::fed
}; };
struct ircd::m::fed::query struct ircd::m::fed::query
:server::request :request
{ {
struct opts;
struct profile; struct profile;
struct directory; struct directory;
struct user_devices; struct user_devices;
@ -27,39 +26,41 @@ struct ircd::m::fed::query
explicit operator json::object() const explicit operator json::object() const
{ {
const json::object object{in.content}; return json::object
return object; {
in.content
};
} }
query(const string_view &type, const string_view &args, const mutable_buffer &, opts); query(const string_view &type,
const string_view &args,
const mutable_buffer &,
opts);
query() = default; query() = default;
}; };
struct ircd::m::fed::query::opts
{
net::hostport remote;
m::request request;
server::out out;
server::in in;
const struct server::request::opts *sopts {nullptr};
bool dynamic {false};
opts(const net::hostport &remote)
:remote{remote}
{}
opts() = default;
};
struct ircd::m::fed::query::profile struct ircd::m::fed::query::profile
:query :query
{ {
profile(const id::user &user_id, const string_view &field, const mutable_buffer &, opts); profile(const id::user &user_id,
profile(const id::user &user_id, const mutable_buffer &, opts); const string_view &field,
const mutable_buffer &,
opts);
profile(const id::user &user_id,
const mutable_buffer &,
opts);
profile() = default;
}; };
struct ircd::m::fed::query::directory struct ircd::m::fed::query::directory
:query :query
{ {
directory(const id::room_alias &room_alias, const mutable_buffer &, opts); directory(const id::room_alias &room_alias,
const mutable_buffer &,
opts);
directory() = default;
}; };

View file

@ -17,13 +17,15 @@ namespace ircd::m::fed
}; };
struct ircd::m::fed::query_auth struct ircd::m::fed::query_auth
:server::request :request
{ {
struct opts;
explicit operator json::object() const explicit operator json::object() const
{ {
const auto type(json::type(in.content)); const auto type
{
json::type(in.content)
};
return type == json::ARRAY? return type == json::ARRAY?
json::array{in.content}.at(1): // non-spec [200, {...}] json::array{in.content}.at(1): // non-spec [200, {...}]
json::object{in.content}; // spec {...} json::object{in.content}; // spec {...}
@ -37,13 +39,3 @@ struct ircd::m::fed::query_auth
query_auth() = default; query_auth() = default;
}; };
struct ircd::m::fed::query_auth::opts
{
net::hostport remote;
m::request request;
server::out out;
server::in in;
const struct server::request::opts *sopts {nullptr};
bool dynamic {true};
};

View file

@ -0,0 +1,60 @@
// Matrix Construct
//
// Copyright (C) Matrix Construct Developers, Authors & Contributors
// Copyright (C) 2016-2019 Jason Volk <jason@zemos.net>
//
// Permission to use, copy, modify, and/or distribute this software for any
// purpose with or without fee is hereby granted, provided that the above
// copyright notice and this permission notice is present in all copies. The
// full license for this software is available in the LICENSE file.
#pragma once
#define HAVE_IRCD_M_FED_REQUEST_H
namespace ircd::m::fed
{
struct request;
}
/// Abstract request; everything goes through here.
struct ircd::m::fed::request
:server::request
{
struct opts;
request(const mutable_buffer &buf,
opts &&);
request() = default;
};
struct ircd::m::fed::request::opts
{
/// The remote server to contact. Must be specified for this request.
string_view remote;
/// The m::request structure which helps compose this request. The fields
/// of this object are eventually used to sign the request for [Fed. 12.1]
/// Request Authentication. User does not have to fill anything in here;
/// anything not provided is derived automatically, but providing these
/// fields will override that derivation.
m::request request;
/// The lower-level server::out structure used by server:: when transmitting
/// data; providing anything here is optional and will override things.
server::out out;
/// The lower-level server::in structure used by server:: when receiving
/// data; providing anything here is optional and will override things.
server::in in;
/// The lower-level server::request::opts configuration to attach to
/// this request.
const struct server::request::opts *sopts {nullptr};
/// Whether dynamic content buffering for incoming data will be used.
/// if false, the user supplied buffer handles all data sent from the
/// remote server; this is faster, but if it runs out the request is
/// canceled and an exception is thrown.
bool dynamic {true};
};

View file

@ -21,14 +21,16 @@ namespace ircd::m::fed
/// must stay in scope to complete the request until the future is resolved. /// must stay in scope to complete the request until the future is resolved.
/// ///
struct ircd::m::fed::send struct ircd::m::fed::send
:server::request :request
{ {
struct opts;
struct response; struct response;
operator json::object() const explicit operator json::object() const
{ {
return { in.content }; return json::object
{
in.content
};
} }
send(const string_view &txnid, // transaction ID (goes in URL) send(const string_view &txnid, // transaction ID (goes in URL)
@ -39,35 +41,6 @@ struct ircd::m::fed::send
send() = default; send() = default;
}; };
/// Options for a federation send request.
///
struct ircd::m::fed::send::opts
{
/// The remote server to contact. Must be specified for this request.
net::hostport remote;
/// The m::request structure which helps compose this request. The fields
/// of this object are eventually used to sign the request for [Fed. 12.1]
/// Request Authentication. User does not have to fill anything in here;
/// anything not provided is derived automatically, but providing these
/// fields will override that derivation.
m::request request;
/// The lower-level server::out structure used by server:: when transmitting
/// data; providing anything here is optional and will override things.
server::out out;
/// The lower-level server::in structure used by server:: when receiving
/// data; providing anything here is optional and will override things.
server::in in;
/// The lower-level server::request::opts configuration to attach to
/// this request.
const struct server::request::opts *sopts {nullptr};
bool dynamic {false};
};
/// Helper for dealing with response content from a /send/. /// Helper for dealing with response content from a /send/.
struct ircd::m::fed::send::response struct ircd::m::fed::send::response
:json::object :json::object

View file

@ -17,25 +17,21 @@ namespace ircd::m::fed
}; };
struct ircd::m::fed::send_join struct ircd::m::fed::send_join
:server::request :request
{ {
struct opts; explicit operator json::array() const
operator json::array() const
{ {
return json::array{in.content}; return json::array
{
in.content
};
} }
send_join(const room::id &, const id::event &, const const_buffer &, const mutable_buffer &, opts); send_join(const room::id &,
const id::event &,
const const_buffer &,
const mutable_buffer &,
opts);
send_join() = default; send_join() = default;
}; };
struct ircd::m::fed::send_join::opts
{
net::hostport remote;
m::request request;
server::out out;
server::in in;
const struct server::request::opts *sopts {nullptr};
bool dynamic {true};
};

View file

@ -17,27 +17,28 @@ namespace ircd::m::fed
}; };
struct ircd::m::fed::state struct ircd::m::fed::state
:server::request :request
{ {
struct opts; struct opts;
explicit operator json::object() const explicit operator json::object() const
{ {
return json::object{in.content}; return json::object
{
in.content
};
} }
state(const room::id &, const mutable_buffer &, opts); state(const room::id &,
const mutable_buffer &,
opts);
state() = default; state() = default;
}; };
struct ircd::m::fed::state::opts struct ircd::m::fed::state::opts
:request::opts
{ {
net::hostport remote;
string_view event_id; string_view event_id;
bool ids_only {false}; bool ids_only {false};
m::request request;
server::out out;
server::in in;
const struct server::request::opts *sopts {nullptr};
bool dynamic {true};
}; };

View file

@ -13,33 +13,25 @@
namespace ircd::m::fed::user namespace ircd::m::fed::user
{ {
struct opts;
struct devices; struct devices;
using opts = request::opts;
} }
struct ircd::m::fed::user::devices struct ircd::m::fed::user::devices
:server::request :request
{ {
using opts = fed::user::opts;
explicit operator json::object() const explicit operator json::object() const
{ {
const json::object object{in.content}; return json::object
return object; {
in.content
};
} }
devices(const id::user &user_id, const mutable_buffer &, opts); devices(const id::user &user_id,
const mutable_buffer &,
opts);
devices() = default; devices() = default;
}; };
struct ircd::m::fed::user::opts
{
net::hostport remote;
m::request request;
server::out out;
server::in in;
const struct server::request::opts *sopts {nullptr};
bool dynamic {true};
opts() = default;
};

View file

@ -18,7 +18,7 @@ namespace ircd::m::fed::user::keys
} }
struct ircd::m::fed::user::keys::query struct ircd::m::fed::user::keys::query
:server::request :request
{ {
using opts = fed::user::opts; using opts = fed::user::opts;
using devices = vector_view<const string_view>; using devices = vector_view<const string_view>;
@ -31,8 +31,10 @@ struct ircd::m::fed::user::keys::query
explicit operator json::object() const explicit operator json::object() const
{ {
const json::object object{in.content}; return json::object
return object; {
in.content
};
} }
explicit explicit
@ -65,7 +67,7 @@ struct ircd::m::fed::user::keys::query
}; };
struct ircd::m::fed::user::keys::claim struct ircd::m::fed::user::keys::claim
:server::request :request
{ {
using opts = fed::user::opts; using opts = fed::user::opts;
using device = std::pair<string_view, string_view>; using device = std::pair<string_view, string_view>;
@ -79,8 +81,10 @@ struct ircd::m::fed::user::keys::claim
explicit operator json::object() const explicit operator json::object() const
{ {
const json::object object{in.content}; return json::object
return object; {
in.content
};
} }
explicit explicit

View file

@ -17,25 +17,18 @@ namespace ircd::m::fed
}; };
struct ircd::m::fed::version struct ircd::m::fed::version
:server::request :request
{ {
struct opts; explicit operator json::object() const
operator json::object() const
{ {
return json::object{in.content}; return json::object
{
in.content
};
} }
version(const mutable_buffer &, opts); version(const mutable_buffer &,
opts);
version() = default; version() = default;
}; };
struct ircd::m::fed::version::opts
{
net::hostport remote;
m::request request;
server::out out;
server::in in;
const struct server::request::opts *sopts {nullptr};
bool dynamic {false};
};

File diff suppressed because it is too large Load diff

View file

@ -272,7 +272,7 @@ get__initialsync_remote(client &client,
}) })
}; };
const net::hostport remote const auto remote
{ {
server?: room.room_id.host() server?: room.room_id.host()
}; };

View file

@ -6563,7 +6563,7 @@ console_cmd__stage__send(opt &out, const string_view &line)
"remote", "[id]" "remote", "[id]"
}}; }};
const net::hostport remote const string_view remote
{ {
param.at(0) param.at(0)
}; };
@ -8926,7 +8926,7 @@ console_cmd__room__alias__cache__fetch(opt &out, const string_view &line)
param["alias"] param["alias"]
}; };
const net::hostport &remote const auto &remote
{ {
param["remote"]? param["remote"]?
param["remote"]: param["remote"]:
@ -11559,7 +11559,7 @@ console_cmd__user__profile__fetch(opt &out, const string_view &line)
param["key"] param["key"]
}; };
const net::hostport &remote const auto &remote
{ {
param["remote"]? param["remote"]?
param["remote"]: param["remote"]:
@ -12692,7 +12692,7 @@ console_cmd__fed__head(opt &out, const string_view &line)
m::room_id(param.at(0)) m::room_id(param.at(0))
}; };
const net::hostport remote const string_view remote
{ {
param.at(1, room_id.host()) param.at(1, room_id.host())
}; };
@ -12782,7 +12782,7 @@ console_cmd__fed__send(opt &out, const string_view &line)
"remote", "event_id", "remote", "event_id",
}}; }};
const net::hostport remote const string_view remote
{ {
param.at(0) param.at(0)
}; };
@ -12878,7 +12878,7 @@ console_cmd__fed__sync(opt &out, const string_view &line)
m::room_id(param.at(0)) m::room_id(param.at(0))
}; };
const net::hostport remote const string_view remote
{ {
param.at(1, room_id.host()) param.at(1, room_id.host())
}; };
@ -13003,7 +13003,7 @@ console_cmd__fed__state(opt &out, const string_view &line)
m::room_id(param.at(0)) m::room_id(param.at(0))
}; };
const net::hostport remote const string_view remote
{ {
param.at(1, room_id.host()) param.at(1, room_id.host())
}; };
@ -13114,7 +13114,7 @@ console_cmd__fed__state_ids(opt &out, const string_view &line)
m::room_id(param.at(0)) m::room_id(param.at(0))
}; };
const net::hostport remote const string_view remote
{ {
param.at(1, room_id.host()) param.at(1, room_id.host())
}; };
@ -13183,7 +13183,7 @@ console_cmd__fed__backfill(opt &out, const string_view &line)
m::room_id(param.at("room_id")) m::room_id(param.at("room_id"))
}; };
const net::hostport remote const string_view remote
{ {
param["remote"]? param["remote"]?
param["remote"]: param["remote"]:
@ -13280,7 +13280,7 @@ console_cmd__fed__frontfill(opt &out, const string_view &line)
m::room_id(param.at(0)) m::room_id(param.at(0))
}; };
const net::hostport remote const string_view remote
{ {
param.at(1, room_id.host()) param.at(1, room_id.host())
}; };
@ -13350,7 +13350,7 @@ console_cmd__fed__event(opt &out, const string_view &line)
param.at(0) param.at(0)
}; };
const net::hostport &remote const auto &remote
{ {
param.at(1, event_id.host()) param.at(1, event_id.host())
}; };
@ -13448,7 +13448,7 @@ console_cmd__fed__public_rooms(opt &out, const string_view &line)
"remote", "limit", "all_networks", "3pid" "remote", "limit", "all_networks", "3pid"
}}; }};
const net::hostport remote const string_view remote
{ {
param.at(0) param.at(0)
}; };
@ -13536,7 +13536,7 @@ console_cmd__fed__auth(opt &out, const string_view &line)
param.at(1) param.at(1)
}; };
const net::hostport remote const string_view remote
{ {
param.at(2, event_id.host()) param.at(2, event_id.host())
}; };
@ -13617,7 +13617,7 @@ console_cmd__fed__query_auth(opt &out, const string_view &line)
param.at(1) param.at(1)
}; };
const net::hostport remote const string_view remote
{ {
param.at(2, event_id.host()) param.at(2, event_id.host())
}; };
@ -13707,7 +13707,7 @@ console_cmd__fed__query__profile(opt &out, const string_view &line)
token(line, ' ', 0) token(line, ' ', 0)
}; };
const net::hostport remote const string_view remote
{ {
token_count(line, ' ') > 1? token(line, ' ', 1) : user_id.host() token_count(line, ' ') > 1? token(line, ' ', 1) : user_id.host()
}; };
@ -13748,7 +13748,7 @@ console_cmd__fed__query__directory(opt &out, const string_view &line)
token(line, ' ', 0) token(line, ' ', 0)
}; };
const net::hostport remote const string_view remote
{ {
token_count(line, ' ') > 1? token(line, ' ', 1) : room_alias.host() token_count(line, ' ') > 1? token(line, ' ', 1) : room_alias.host()
}; };
@ -13794,7 +13794,7 @@ console_cmd__fed__user__devices(opt &out, const string_view &line)
param.at("user_id") param.at("user_id")
}; };
const net::hostport remote const string_view remote
{ {
param.at("remote", user_id.host()) param.at("remote", user_id.host())
}; };
@ -13858,7 +13858,7 @@ console_cmd__fed__user__keys__query(opt &out, const string_view &line)
param.at("device_id", string_view{}) param.at("device_id", string_view{})
}; };
const net::hostport remote const string_view remote
{ {
param.at("remote", user_id.host()) param.at("remote", user_id.host())
}; };
@ -13944,7 +13944,7 @@ console_cmd__fed__user__keys__claim(opt &out, const string_view &line)
param.at("algorithm") param.at("algorithm")
}; };
const net::hostport remote const string_view remote
{ {
param.at("remote", user_id.host()) param.at("remote", user_id.host())
}; };
@ -14053,10 +14053,7 @@ console_cmd__fed__key__query(opt &out, const string_view &line)
m::fed::key::opts opts; m::fed::key::opts opts;
opts.dynamic = true; opts.dynamic = true;
opts.remote = net::hostport opts.remote = param.at("remote");
{
param.at(0)
};
const unique_buffer<mutable_buffer> buf{24_KiB}; const unique_buffer<mutable_buffer> buf{24_KiB};
m::fed::key::query request m::fed::key::query request