mirror of
https://github.com/matrix-construct/construct
synced 2024-11-26 00:32:35 +01:00
ircd:Ⓜ️:fed: Add well-known request for server name resolution w/ console cmd.
This commit is contained in:
parent
fa19b9b182
commit
6ab71b8fdc
3 changed files with 123 additions and 0 deletions
|
@ -14,6 +14,7 @@
|
|||
namespace ircd::m::fed
|
||||
{
|
||||
net::hostport matrix_service(net::hostport);
|
||||
net::hostport well_known(const mutable_buffer &out, const net::hostport &remote);
|
||||
id::event::buf fetch_head(const id::room &room_id, const net::hostport &remote, const id::user &);
|
||||
id::event::buf fetch_head(const id::room &room_id, const net::hostport &remote);
|
||||
}
|
||||
|
|
|
@ -1736,3 +1736,94 @@ ircd::m::fed::fetch_head(const id::room &room_id,
|
|||
|
||||
return prev_event_id;
|
||||
}
|
||||
|
||||
ircd::net::hostport
|
||||
ircd::m::fed::well_known(const mutable_buffer &buf,
|
||||
const net::hostport &remote)
|
||||
try
|
||||
{
|
||||
const unique_buffer<mutable_buffer> head_buf
|
||||
{
|
||||
16_KiB
|
||||
};
|
||||
|
||||
window_buffer wb{head_buf};
|
||||
http::request
|
||||
{
|
||||
wb, host(remote), "GET", "/.well-known/matrix/server",
|
||||
};
|
||||
|
||||
// Hard target https service; do not inherit matrix service from remote.
|
||||
const net::hostport target
|
||||
{
|
||||
host(remote), "https", port(remote)
|
||||
};
|
||||
|
||||
const const_buffer out_head
|
||||
{
|
||||
wb.completed()
|
||||
};
|
||||
|
||||
// Remaining space in buffer is used for received head
|
||||
const mutable_buffer in_head
|
||||
{
|
||||
buf + size(out_head)
|
||||
};
|
||||
|
||||
server::request::opts opts;
|
||||
server::request request
|
||||
{
|
||||
target,
|
||||
{ out_head },
|
||||
{ in_head, buf },
|
||||
&opts
|
||||
};
|
||||
|
||||
const auto code
|
||||
{
|
||||
request.get(seconds(8)) //TODO: XXX conf
|
||||
};
|
||||
|
||||
const json::object &response
|
||||
{
|
||||
request.in.content
|
||||
};
|
||||
|
||||
const json::string &m_server
|
||||
{
|
||||
response["m.server"]
|
||||
};
|
||||
|
||||
const net::hostport ret
|
||||
{
|
||||
m_server
|
||||
};
|
||||
|
||||
thread_local char rembuf[rfc3986::DOMAIN_BUFSIZE * 2];
|
||||
log::debug
|
||||
{
|
||||
log, "Well-known matrix server query to %s %u %s :%s",
|
||||
string(rembuf, target),
|
||||
uint(code),
|
||||
http::status(code),
|
||||
string_view{response},
|
||||
};
|
||||
|
||||
return matrix_service(ret);
|
||||
}
|
||||
catch(const ctx::interrupted &)
|
||||
{
|
||||
throw;
|
||||
}
|
||||
catch(const std::exception &e)
|
||||
{
|
||||
thread_local char rembuf[rfc3986::DOMAIN_BUFSIZE * 2];
|
||||
log::derror
|
||||
{
|
||||
log, "Matrix server well-known query for %s :%s",
|
||||
string(rembuf, remote),
|
||||
e.what(),
|
||||
};
|
||||
|
||||
return remote;
|
||||
}
|
||||
|
|
|
@ -14680,3 +14680,34 @@ console_cmd__redact(opt &out, const string_view &line)
|
|||
<< std::endl;
|
||||
return true;
|
||||
}
|
||||
|
||||
//
|
||||
// well-known
|
||||
//
|
||||
|
||||
bool
|
||||
console_cmd__well_known__matrix__server(opt &out, const string_view &line)
|
||||
{
|
||||
const params param{line, " ",
|
||||
{
|
||||
"remote"
|
||||
}};
|
||||
|
||||
const net::hostport &remote
|
||||
{
|
||||
param.at("remote")
|
||||
};
|
||||
|
||||
const unique_buffer<mutable_buffer> buf
|
||||
{
|
||||
1_KiB
|
||||
};
|
||||
|
||||
const net::hostport result
|
||||
{
|
||||
m::fed::well_known(buf, remote)
|
||||
};
|
||||
|
||||
out << result << std::endl;
|
||||
return true;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue