44 std::ostringstream
os;
61 Json::Value root(Json::objectValue);
62 root[
"address"] = Json::Value(
address);
65 root[
"port"] = Json::Value(
port);
70 void from_json(
const Json::Value &root,
const std::string &title)
111 return Json::Value(
domain);
114 void from_json(
const Json::Value &value,
const std::string &title)
116 if (!value.isString())
118 throw json::json_parse(
"string " + title +
" is of incorrect type");
120 domain = value.asString();
183 std::ostringstream
os;
184 os << prefix <<
"Addresses:\n";
187 os << prefix <<
" " <<
address.to_string() <<
'\n';
191 os << prefix <<
"Domains:\n";
192 for (
const auto &domain :
domains)
194 os << prefix <<
" " << domain.to_string() <<
'\n';
207 os << prefix <<
"SNI: " <<
sni <<
'\n';
215 Json::Value server(Json::objectValue);
231 server[
"sni"] = Json::Value(
sni);
236 void from_json(
const Json::Value &root,
const std::string &title)
246 std::string dnssec_str;
248 if (dnssec_str ==
"Optional")
252 else if (dnssec_str ==
"Yes")
256 else if (dnssec_str ==
"No")
262 throw json::json_parse(
"dnssec value " + dnssec_str +
"is unknown");
267 std::string transport_str;
269 if (transport_str ==
"Plain")
273 else if (transport_str ==
"HTTPS")
277 else if (transport_str ==
"TLS")
283 throw json::json_parse(
"transport value " + transport_str +
"is unknown");
307 std::ostringstream
os;
310 os <<
"DNS Servers:\n";
311 for (
const auto &elem :
servers)
313 os <<
" Priority: " << elem.first <<
'\n';
314 os << elem.second.to_string(
" ");
319 os <<
"DNS Search Domains:\n";
322 os <<
" " << domain.to_string() <<
'\n';
331 Json::Value root(Json::objectValue);
332 Json::Value servers_json(Json::objectValue);
333 for (
const auto &[prio, server] :
servers)
335 servers_json[std::to_string(prio)] = server.to_json();
337 root[
"servers"] = std::move(servers_json);
342 void from_json(
const Json::Value &root,
const std::string &title)
346 for (
const auto &prio : root[
"servers"].getMemberNames())
349 server.
from_json(root[
"servers"][prio], title);
350 servers[std::stoi(prio)] = std::move(server);
static Addr from_string(const std::string &ipstr, const TITLE &title, const Version required_version)
std::string to_string() const
static std::string validate(const std::string &ipstr, const TITLE &title, const Version required_version)
void validate_host(const std::string &host, const std::string &title)
void assert_dict(const Json::Value &obj, const TITLE &title)
void to_string_optional(const Json::Value &root, std::string &dest, const NAME &name, const std::string &default_value, const TITLE &title)
void to_string(const Json::Value &root, std::string &dest, const NAME &name, const TITLE &title)
void to_vector(const Json::Value &root, T &vec, const NAME &name, const TITLE &title)
bool exists(const Json::Value &root, const NAME &name)
void from_vector(Json::Value &root, const T &vec, const NAME &name)
void to_uint_optional(const Json::Value &root, unsigned int &dest, const NAME &name, const unsigned int default_value, const TITLE &title)
A name server address and optional port.
bool operator==(const DnsAddress &) const =default
Json::Value to_json() const
void from_json(const Json::Value &root, const std::string &title)
void validate(const std::string &title) const
std::string to_string() const
Return string representation of the DnsAddress object.
bool operator==(const DnsDomain &) const =default
void validate(const std::string &title) const
std::string to_string() const
Return string representation of the DnsDomain object.
Json::Value to_json() const
void from_json(const Json::Value &value, const std::string &title)
All DNS options set with the –dns or –dhcp-option directive.
std::map< int, DnsServer > servers
DnsServer & get_server(const int priority)
void from_json(const Json::Value &root, const std::string &title)
std::vector< DnsDomain > search_domains
bool operator==(const DnsOptions &at) const =default
std::string to_string() const
Json::Value to_json() const
DNS settings for a name server.
std::vector< DnsAddress > addresses
std::vector< DnsDomain > domains
std::string transport_string(const Transport transport) const
std::string dnssec_string(const Security dnssec) const
std::string to_string(const char *prefix="") const
bool operator==(const DnsServer &at) const =default
Json::Value to_json() const
void from_json(const Json::Value &root, const std::string &title)