From a1ac9cb356bbb39e2b422de74c8713a64958b11b Mon Sep 17 00:00:00 2001 From: Jason Volk Date: Sun, 24 Mar 2019 12:55:59 -0700 Subject: [PATCH] ircd::net::dns: Expose more cache utils to public interface. --- include/ircd/net/dns.h | 4 +++ ircd/net.cc | 57 ++++++++++++++++++++++++++++++++++++++++++ modules/s_dns.cc | 23 ----------------- modules/s_dns.h | 9 +++---- 4 files changed, 64 insertions(+), 29 deletions(-) diff --git a/include/ircd/net/dns.h b/include/ircd/net/dns.h index bc79c56fa..61110b9b4 100644 --- a/include/ircd/net/dns.h +++ b/include/ircd/net/dns.h @@ -83,6 +83,10 @@ namespace ircd::net::dns::cache { using closure = std::function; + bool is_error(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); string_view make_type(const mutable_buffer &out, const string_view &); string_view make_type(const mutable_buffer &out, const uint16_t &); diff --git a/ircd/net.cc b/ircd/net.cc index 91c023caa..5a9f17d87 100644 --- a/ircd/net.cc +++ b/ircd/net.cc @@ -3507,6 +3507,63 @@ ircd::net::dns::cache::make_type(const mutable_buffer &out, }; } +bool +ircd::net::dns::cache::expired(const json::object &rr, + const time_t &rr_ts) +{ + static mods::import> min_ttl + { + "s_dns", "ircd::net::dns::cache::min_ttl" + }; + + static mods::import> error_ttl + { + "s_dns", "ircd::net::dns::cache::error_ttl" + }; + + const conf::item &min_ttl_item + { + static_cast &>(min_ttl) + }; + + const conf::item &error_ttl_item + { + static_cast &>(error_ttl) + }; + + const seconds &min_seconds(min_ttl_item); + const seconds &err_seconds(error_ttl_item); + const time_t &min + { + is_error(rr)? + err_seconds.count(): + min_seconds.count() + }; + + return expired(rr, rr_ts, min); +} + +bool +ircd::net::dns::cache::expired(const json::object &rr, + const time_t &rr_ts, + const time_t &min_ttl) +{ + const auto ttl(get_ttl(rr)); + return rr_ts + std::max(ttl, min_ttl) < ircd::time(); +} + +time_t +ircd::net::dns::cache::get_ttl(const json::object &rr) +{ + return rr.get("ttl", 0L); +} + +bool +ircd::net::dns::cache::is_error(const json::object &rr) +{ + return rr.has("error"); +} + /////////////////////////////////////////////////////////////////////////////// // // net/ipport.h diff --git a/modules/s_dns.cc b/modules/s_dns.cc index 5404cecc1..9ce418b4d 100644 --- a/modules/s_dns.cc +++ b/modules/s_dns.cc @@ -760,29 +760,6 @@ ircd::net::dns::cache::call_waiter(const string_view &type, return true; } -bool -ircd::net::dns::cache::expired(const json::object &rr, - const time_t &ts) -{ - const auto ttl(get_ttl(rr)); - return ts + ttl < ircd::time(); -} - -time_t -ircd::net::dns::cache::get_ttl(const json::object &rr) -{ - const seconds &min_ttl_s(min_ttl); - const seconds &err_ttl_s(error_ttl); - const time_t min_ttl_t(min_ttl_s.count()); - const time_t err_ttl_t(err_ttl_s.count()); - const time_t rr_ttl - { - rr.get("ttl", err_ttl_t) - }; - - return std::max(rr_ttl, min_ttl_t); -} - // // cache room creation // diff --git a/modules/s_dns.h b/modules/s_dns.h index 9ed9ab142..527a2a5de 100644 --- a/modules/s_dns.h +++ b/modules/s_dns.h @@ -34,15 +34,12 @@ namespace ircd::net::dns::cache { struct waiter; - static time_t get_ttl(const json::object &rr); - static bool expired(const json::object &rr, const time_t &ts); - static bool call_waiter(const string_view &, const string_view &, const json::array &, waiter &); static void handle(const m::event &, m::vm::eval &); - extern conf::item min_ttl; - extern conf::item error_ttl; - extern conf::item nxdomain_ttl; + extern conf::item min_ttl IRCD_MODULE_EXPORT_DATA; + extern conf::item error_ttl IRCD_MODULE_EXPORT_DATA; + extern conf::item nxdomain_ttl IRCD_MODULE_EXPORT_DATA; extern const m::room::id::buf room_id; extern m::hookfn hook;