From b22d1f5287f463df270b39a48eec6b20e66df2e8 Mon Sep 17 00:00:00 2001 From: Calle Wilund Date: Tue, 29 Nov 2016 08:43:30 +0000 Subject: [PATCH] seastar::net::inet_address: Add dns query wrapper functions for "easy" lookup --- configure.py | 2 +- net/dns.cc | 35 +++++++++++++++++++++++++++++++++++ net/inet_address.cc | 2 ++ net/inet_address.hh | 8 ++++++++ 4 files changed, 46 insertions(+), 1 deletion(-) diff --git a/configure.py b/configure.py index 9c30a001b44..92a58554942 100755 --- a/configure.py +++ b/configure.py @@ -274,7 +274,6 @@ def sanitize_vptr_flag(compiler): 'net/tcp.cc', 'net/dhcp.cc', 'net/tls.cc', - 'net/inet_address.cc', 'net/dns.cc', ] @@ -296,6 +295,7 @@ def sanitize_vptr_flag(compiler): 'net/posix-stack.cc', 'net/net.cc', 'net/stack.cc', + 'net/inet_address.cc', 'rpc/rpc.cc', 'rpc/lz4_compressor.cc', ] diff --git a/net/dns.cc b/net/dns.cc index bba7c6324b6..aa4b27884a9 100644 --- a/net/dns.cc +++ b/net/dns.cc @@ -905,3 +905,38 @@ future seastar::net::dns::resolve_name(const sstring future seastar::net::dns::resolve_addr(const inet_address& addr) { return resolver().resolve_addr(addr); } + +future seastar::net::inet_address::hostname() const { + return dns::resolve_addr(*this); +} + +future> seastar::net::inet_address::aliases() const { + return dns::get_host_by_addr(*this).then([](hostent e) { + return make_ready_future>(std::move(e.names)); + }); +} + +future seastar::net::inet_address::find( + const sstring& name) { + return dns::resolve_name(name); +} + +future seastar::net::inet_address::find( + const sstring& name, family f) { + return dns::resolve_name(name, f); +} + +future> seastar::net::inet_address::find_all( + const sstring& name) { + return dns::get_host_by_name(name).then([](hostent e) { + return make_ready_future>(std::move(e.addr_list)); + }); +} + +future> seastar::net::inet_address::find_all( + const sstring& name, family f) { + return dns::get_host_by_name(name, f).then([](hostent e) { + return make_ready_future>(std::move(e.addr_list)); + }); +} + diff --git a/net/inet_address.cc b/net/inet_address.cc index f3a31d9f7b8..807cc3bb055 100644 --- a/net/inet_address.cc +++ b/net/inet_address.cc @@ -24,6 +24,7 @@ #include "inet_address.hh" #include "socket_defs.hh" +#include "dns.hh" seastar::net::inet_address::inet_address() : inet_address(::in_addr{ 0, }) @@ -96,6 +97,7 @@ const void * seastar::net::inet_address::data() const { return &_in; } + std::ostream& seastar::net::operator<<(std::ostream& os, const inet_address& addr) { char buffer[64]; return os << inet_ntop(int(addr.in_family()), addr.data(), buffer, sizeof(buffer)); diff --git a/net/inet_address.hh b/net/inet_address.hh index de978371c35..a2904a5d947 100644 --- a/net/inet_address.hh +++ b/net/inet_address.hh @@ -73,6 +73,14 @@ public: operator const ::in_addr&() const; operator const ::in6_addr&() const; + + future hostname() const; + future> aliases() const; + + static future find(const sstring&); + static future find(const sstring&, family); + static future> find_all(const sstring&); + static future> find_all(const sstring&, family); }; std::ostream& operator<<(std::ostream&, const inet_address&);