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 &)>;
|
||||
|
||||
bool is_error(const json::object &rr);
|
||||
bool is_error(const json::array &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);
|
||||
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 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
|
||||
ircd::net::dns::cache::expired(const json::object &rr,
|
||||
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);
|
||||
}
|
||||
|
||||
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
|
||||
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,
|
||||
callback_one callback)
|
||||
{
|
||||
const size_t &count{rrs.size()};
|
||||
const auto choice
|
||||
{
|
||||
count? rand::integer(0, count - 1) : 0UL
|
||||
};
|
||||
|
||||
const json::object &rr
|
||||
{
|
||||
rrs[choice]
|
||||
cache::random_choice(rrs)
|
||||
};
|
||||
|
||||
callback(hp, rr);
|
||||
|
|
Loading…
Reference in a new issue