0
0
Fork 0
mirror of https://github.com/matrix-construct/construct synced 2024-09-26 18:38:52 +02:00

modules/client/join: Convey available server_name data to join system.

This commit is contained in:
Jason Volk 2020-04-21 19:50:52 -07:00
parent 83e1bcd17b
commit b471713582

View file

@ -29,12 +29,14 @@ join_resource
static m::resource::response
_post__join(client &client,
const m::resource::request &request,
const m::room::id &room_id);
const m::room::id &room_id,
const vector_view<const string_view> &server_names);
static m::resource::response
_post__join(client &client,
const m::resource::request &request,
const m::room::alias &room_alias);
const m::room::alias &room_alias,
const vector_view<const string_view> &server_names);
m::resource::response
post__join(client &client,
@ -52,17 +54,35 @@ post__join(client &client,
url::decode(idbuf, request.parv[0])
};
static const size_t server_name_maxarg{16U};
const auto server_name_count
{
std::min(request.query.count("server_name"), server_name_maxarg)
};
string_view server_name[server_name_maxarg];
const unique_mutable_buffer server_name_buf
{
rfc3986::DOMAIN_BUFSIZE * server_name_count
};
const auto server_names
{
request.query.array(server_name_buf, "server_name", server_name)
};
switch(m::sigil(id))
{
case m::id::ROOM:
return _post__join(client, request, m::room::id{id});
return _post__join(client, request, m::room::id{id}, server_names);
case m::id::ROOM_ALIAS:
return _post__join(client, request, m::room::alias{id});
return _post__join(client, request, m::room::alias{id}, server_names);
default: throw m::UNSUPPORTED
{
"Cannot join a room using a '%s' MXID", reflect(m::sigil(id))
"Cannot join a room using a '%s' MXID",
reflect(m::sigil(id))
};
}
}
@ -79,9 +99,13 @@ method_post
static m::resource::response
_post__join(client &client,
const m::resource::request &request,
const m::room::alias &room_alias)
const m::room::alias &room_alias,
const vector_view<const string_view> &server_names)
{
m::join(room_alias, request.user_id);
const auto event_id
{
m::join(room_alias, request.user_id)
};
return m::resource::response
{
@ -98,7 +122,8 @@ _post__join(client &client,
static m::resource::response
_post__join(client &client,
const m::resource::request &request,
const m::room::id &room_id)
const m::room::id &room_id,
const vector_view<const string_view> &server_names)
{
const m::room room
{
@ -107,7 +132,7 @@ _post__join(client &client,
const auto event_id
{
m::join(room, request.user_id)
m::join(room, request.user_id, server_names)
};
return m::resource::response