mirror of
https://github.com/matrix-construct/construct
synced 2024-09-30 12:48:54 +02:00
ircd::net::dns::cache: Add addl utils random_choice and is_error().
This commit is contained in:
parent
dbb965ce48
commit
55af53e2a0
3 changed files with 38 additions and 7 deletions
|
@ -84,9 +84,11 @@ namespace ircd::net::dns::cache
|
||||||
using closure = std::function<bool (const string_view &, const json::object &)>;
|
using closure = std::function<bool (const string_view &, const json::object &)>;
|
||||||
|
|
||||||
bool is_error(const json::object &rr);
|
bool is_error(const json::object &rr);
|
||||||
|
bool is_error(const json::array &rr);
|
||||||
time_t get_ttl(const json::object &rr);
|
time_t get_ttl(const json::object &rr);
|
||||||
bool expired(const json::object &rr, const time_t &rr_ts, const time_t &min_ttl);
|
bool expired(const json::object &rr, const time_t &rr_ts, const time_t &min_ttl);
|
||||||
bool expired(const json::object &rr, const time_t &rr_ts);
|
bool expired(const json::object &rr, const time_t &rr_ts);
|
||||||
|
json::object random_choice(const json::array &);
|
||||||
string_view make_type(const mutable_buffer &out, const string_view &);
|
string_view make_type(const mutable_buffer &out, const string_view &);
|
||||||
string_view make_type(const mutable_buffer &out, const uint16_t &);
|
string_view make_type(const mutable_buffer &out, const uint16_t &);
|
||||||
|
|
||||||
|
|
35
ircd/net.cc
35
ircd/net.cc
|
@ -3507,6 +3507,31 @@ ircd::net::dns::cache::make_type(const mutable_buffer &out,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ircd::json::object
|
||||||
|
ircd::net::dns::cache::random_choice(const json::array &rrs)
|
||||||
|
{
|
||||||
|
const size_t &count
|
||||||
|
{
|
||||||
|
rrs.size()
|
||||||
|
};
|
||||||
|
|
||||||
|
if(!count)
|
||||||
|
return json::object{};
|
||||||
|
|
||||||
|
const auto choice
|
||||||
|
{
|
||||||
|
rand::integer(0, count - 1)
|
||||||
|
};
|
||||||
|
|
||||||
|
assert(choice < count);
|
||||||
|
const json::object &rr
|
||||||
|
{
|
||||||
|
rrs[choice]
|
||||||
|
};
|
||||||
|
|
||||||
|
return rr;
|
||||||
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
ircd::net::dns::cache::expired(const json::object &rr,
|
ircd::net::dns::cache::expired(const json::object &rr,
|
||||||
const time_t &rr_ts)
|
const time_t &rr_ts)
|
||||||
|
@ -3558,6 +3583,16 @@ ircd::net::dns::cache::get_ttl(const json::object &rr)
|
||||||
return rr.get<time_t>("ttl", 0L);
|
return rr.get<time_t>("ttl", 0L);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
ircd::net::dns::cache::is_error(const json::array &rrs)
|
||||||
|
{
|
||||||
|
return !std::none_of(begin(rrs), end(rrs), []
|
||||||
|
(const json::object &rr)
|
||||||
|
{
|
||||||
|
return is_error(rr);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
ircd::net::dns::cache::is_error(const json::object &rr)
|
ircd::net::dns::cache::is_error(const json::object &rr)
|
||||||
{
|
{
|
||||||
|
|
|
@ -110,15 +110,9 @@ ircd::net::dns::handle_resolve_one(const hostport &hp,
|
||||||
const json::array &rrs,
|
const json::array &rrs,
|
||||||
callback_one callback)
|
callback_one callback)
|
||||||
{
|
{
|
||||||
const size_t &count{rrs.size()};
|
|
||||||
const auto choice
|
|
||||||
{
|
|
||||||
count? rand::integer(0, count - 1) : 0UL
|
|
||||||
};
|
|
||||||
|
|
||||||
const json::object &rr
|
const json::object &rr
|
||||||
{
|
{
|
||||||
rrs[choice]
|
cache::random_choice(rrs)
|
||||||
};
|
};
|
||||||
|
|
||||||
callback(hp, rr);
|
callback(hp, rr);
|
||||||
|
|
Loading…
Reference in a new issue