From 98a3535e067e1543f8f2e33d5f69a14dbc7b947b Mon Sep 17 00:00:00 2001 From: Jason Volk Date: Fri, 8 Mar 2019 11:46:50 -0800 Subject: [PATCH] ircd::net: Elaborate ipaddr interface; move apropos string utils from ipport.h --- include/ircd/net/ipaddr.h | 32 +++++++++++++++++ include/ircd/net/ipport.h | 10 +++--- ircd/net.cc | 73 +++++++++++++++++++++------------------ 3 files changed, 75 insertions(+), 40 deletions(-) diff --git a/include/ircd/net/ipaddr.h b/include/ircd/net/ipaddr.h index 38b9c8f22..b31f34626 100644 --- a/include/ircd/net/ipaddr.h +++ b/include/ircd/net/ipaddr.h @@ -21,9 +21,17 @@ namespace ircd::net { union ipaddr; + const uint128_t &host6(const ipaddr &); + const uint32_t &host4(const ipaddr &); + uint128_t &host6(ipaddr &); + uint32_t &host4(ipaddr &); + bool operator!(const ipaddr &); bool operator<(const ipaddr &, const ipaddr &); bool operator==(const ipaddr &, const ipaddr &); + + string_view string(const mutable_buffer &out, const uint32_t &); + string_view string(const mutable_buffer &out, const uint128_t &); } union ircd::net::ipaddr @@ -60,3 +68,27 @@ ircd::net::operator!(const ipaddr &a) { return !a.v6; } + +inline uint32_t & +ircd::net::host4(ipaddr &ipaddr) +{ + return ipaddr.v4; +} + +inline ircd::uint128_t & +ircd::net::host6(ipaddr &ipaddr) +{ + return ipaddr.v6; +} + +inline const uint32_t & +ircd::net::host4(const ipaddr &ipaddr) +{ + return ipaddr.v4; +} + +inline const ircd::uint128_t & +ircd::net::host6(const ipaddr &ipaddr) +{ + return ipaddr.v6; +} diff --git a/include/ircd/net/ipport.h b/include/ircd/net/ipport.h index e199d1cdc..65db5eb7f 100644 --- a/include/ircd/net/ipport.h +++ b/include/ircd/net/ipport.h @@ -26,8 +26,6 @@ namespace ircd::net uint128_t &host6(ipport &); uint32_t &host4(ipport &); - string_view string(const mutable_buffer &out, const uint32_t &); - string_view string(const mutable_buffer &out, const uint128_t &); string_view string(const mutable_buffer &out, const ipport &); std::ostream &operator<<(std::ostream &, const ipport &); } @@ -103,13 +101,13 @@ const inline ircd::uint128_t & ircd::net::host6(ipport &ipp) { - return std::get(ipp).v6; + return host6(std::get(ipp)); } inline const ircd::uint128_t & ircd::net::host6(const ipport &ipp) { - return std::get(ipp).v6; + return host6(std::get(ipp)); } inline bool @@ -121,13 +119,13 @@ ircd::net::is_v6(const ipport &ipp) inline uint32_t & ircd::net::host4(ipport &ipp) { - return std::get(ipp).v4; + return host4(std::get(ipp)); } inline const uint32_t & ircd::net::host4(const ipport &ipp) { - return std::get(ipp).v4; + return host4(std::get(ipp)); } inline bool diff --git a/ircd/net.cc b/ircd/net.cc index e0abf00c9..58238f603 100644 --- a/ircd/net.cc +++ b/ircd/net.cc @@ -3186,40 +3186,6 @@ ircd::net::operator<<(std::ostream &s, const ipport &t) return s; } -ircd::string_view -ircd::net::string(const mutable_buffer &buf, - const uint32_t &ip) -{ - const auto len - { - ip::address_v4{ip}.to_string().copy(data(buf), size(buf)) - }; - - return { data(buf), size_t(len) }; -} - -ircd::string_view -ircd::net::string(const mutable_buffer &buf, - const uint128_t &ip) -{ - const auto &pun - { - reinterpret_cast(ip) - }; - - const auto &punpun - { - reinterpret_cast &>(pun) - }; - - const auto len - { - ip::address_v6{punpun}.to_string().copy(data(buf), size(buf)) - }; - - return { data(buf), size_t(len) }; -} - ircd::string_view ircd::net::string(const mutable_buffer &buf, const ipport &ipp) @@ -3386,6 +3352,45 @@ ircd::net::ipport::ipport(const uint128_t &ip, port(*this) = p; } +/////////////////////////////////////////////////////////////////////////////// +// +// net/ipaddr.h +// + +ircd::string_view +ircd::net::string(const mutable_buffer &buf, + const uint32_t &ip) +{ + const auto len + { + ip::address_v4{ip}.to_string().copy(data(buf), size(buf)) + }; + + return { data(buf), size_t(len) }; +} + +ircd::string_view +ircd::net::string(const mutable_buffer &buf, + const uint128_t &ip) +{ + const auto &pun + { + reinterpret_cast(ip) + }; + + const auto &punpun + { + reinterpret_cast &>(pun) + }; + + const auto len + { + ip::address_v6{punpun}.to_string().copy(data(buf), size(buf)) + }; + + return { data(buf), size_t(len) }; +} + /////////////////////////////////////////////////////////////////////////////// // // net/hostport.h