diff --git a/include/ircd/net/ipport.h b/include/ircd/net/ipport.h index 90616012a..733e7a730 100644 --- a/include/ircd/net/ipport.h +++ b/include/ircd/net/ipport.h @@ -75,6 +75,8 @@ struct ircd::net::ipport ipport(const uint32_t &ip, const uint16_t &port); ipport(const uint128_t &ip, const uint16_t &port); ipport(const boost::asio::ip::address &, const uint16_t &port); + ipport(const string_view &ip, const uint16_t &port); + ipport(const string_view &ip, const string_view &port); ipport(); friend std::ostream &operator<<(std::ostream &, const ipport &); diff --git a/ircd/net.cc b/ircd/net.cc index a3fbb75c7..3f62e6afb 100644 --- a/ircd/net.cc +++ b/ircd/net.cc @@ -2218,10 +2218,29 @@ ircd::net::make_endpoint(const ipport &ipport) // ipport // +ircd::net::ipport::ipport(const string_view &ip, + const string_view &port) +:ipport +{ + ip, lex_cast(port) +} +{ +} + +ircd::net::ipport::ipport(const string_view &ip, + const uint16_t &port) +:ipport +{ + asio::ip::make_address(ip), port +} +{ +} + ircd::net::ipport::ipport(const boost::asio::ip::address &address, const uint16_t &port) { std::get(*this) = address.is_v6(); + std::get(*this) = port; if(is_v6(*this)) { @@ -2229,8 +2248,6 @@ ircd::net::ipport::ipport(const boost::asio::ip::address &address, std::reverse(std::get(*this).begin(), std::get(*this).end()); } else host4(*this) = address.to_v4().to_ulong(); - - net::port(*this) = port; } ///////////////////////////////////////////////////////////////////////////////