mirror of
https://github.com/matrix-construct/construct
synced 2024-11-29 02:02:38 +01:00
ircd::net: Fix canon string inconsistencies; perform service lookups.
This commit is contained in:
parent
876bbe906c
commit
13fcd8b3a5
2 changed files with 21 additions and 14 deletions
33
ircd/net.cc
33
ircd/net.cc
|
@ -2910,28 +2910,35 @@ ircd::string_view
|
||||||
ircd::net::canonize(const mutable_buffer &buf,
|
ircd::net::canonize(const mutable_buffer &buf,
|
||||||
const hostport &hostport)
|
const hostport &hostport)
|
||||||
{
|
{
|
||||||
thread_local char tlbuf[2][rfc3986::DOMAIN_BUFSIZE * 2];
|
thread_local char svc[32], tlbuf[2][rfc3986::DOMAIN_BUFSIZE * 2];
|
||||||
|
|
||||||
assert(service(hostport) || port(hostport));
|
assert(service(hostport) || port(hostport));
|
||||||
if(unlikely(!service(hostport) && !port(hostport)))
|
|
||||||
|
const string_view &service_name
|
||||||
|
{
|
||||||
|
!service(hostport)?
|
||||||
|
net::dns::service_name(std::nothrow, svc, port(hostport), "tcp"):
|
||||||
|
service(hostport)
|
||||||
|
};
|
||||||
|
|
||||||
|
if(likely(service_name))
|
||||||
|
return fmt::sprintf
|
||||||
|
{
|
||||||
|
buf, "%s:%s",
|
||||||
|
tolower(tlbuf[0], host(hostport)),
|
||||||
|
tolower(tlbuf[1], service_name),
|
||||||
|
};
|
||||||
|
|
||||||
|
if(unlikely(!port(hostport)))
|
||||||
throw error
|
throw error
|
||||||
{
|
{
|
||||||
"Missing service suffix in hostname:service string.",
|
"Missing service suffix in hostname:service string.",
|
||||||
};
|
};
|
||||||
|
|
||||||
if(port(hostport))
|
|
||||||
return fmt::sprintf
|
|
||||||
{
|
|
||||||
buf, "%s:%u",
|
|
||||||
tolower(tlbuf[0], host(hostport)),
|
|
||||||
port(hostport),
|
|
||||||
};
|
|
||||||
|
|
||||||
return fmt::sprintf
|
return fmt::sprintf
|
||||||
{
|
{
|
||||||
buf, "%s:%s",
|
buf, "%s:%u",
|
||||||
tolower(tlbuf[0], host(hostport)),
|
tolower(tlbuf[0], host(hostport)),
|
||||||
tolower(tlbuf[1], service(hostport)),
|
port(hostport),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -677,7 +677,7 @@ ircd::server::peer::peer(const net::hostport &hostport,
|
||||||
open_opts
|
open_opts
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
const net::hostport &canon
|
const net::hostport canon
|
||||||
{
|
{
|
||||||
this->hostcanon
|
this->hostcanon
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in a new issue