diff --git a/tdnet/td/net/GetHostByNameActor.cpp b/tdnet/td/net/GetHostByNameActor.cpp index 5c949db9..7ac5bac4 100644 --- a/tdnet/td/net/GetHostByNameActor.cpp +++ b/tdnet/td/net/GetHostByNameActor.cpp @@ -34,12 +34,7 @@ class GoogleDnsResolver : public Actor { double begin_time_ = 0; void start_up() override { - auto r_address = IPAddress::get_ipv4_address(host_); - if (r_address.is_ok()) { - promise_.set_value(r_address.move_as_ok()); - return stop(); - } - r_address = IPAddress::get_ipv6_address(host_); + auto r_address = IPAddress::get_ip_address(host_); if (r_address.is_ok()) { promise_.set_value(r_address.move_as_ok()); return stop(); diff --git a/tdutils/td/utils/port/IPAddress.cpp b/tdutils/td/utils/port/IPAddress.cpp index d7bca42c..57b9f5a1 100644 --- a/tdutils/td/utils/port/IPAddress.cpp +++ b/tdutils/td/utils/port/IPAddress.cpp @@ -350,6 +350,18 @@ Status IPAddress::init_ipv4_port(CSlice ipv4, int port) { return Status::OK(); } +Result IPAddress::get_ip_address(CSlice host) { + auto r_address = get_ipv4_address(host); + if (r_address.is_ok()) { + return r_address.move_as_ok(); + } + r_address = get_ipv6_address(host); + if (r_address.is_ok()) { + return r_address.move_as_ok(); + } + return Status::Error("Not a valid IP address"); +} + Result IPAddress::get_ipv4_address(CSlice host) { // sometimes inet_addr allows much more valid IPv4 hosts than inet_pton, // like 0x12.0x34.0x56.0x78, or 0x12345678, or 0x7f.001 diff --git a/tdutils/td/utils/port/IPAddress.h b/tdutils/td/utils/port/IPAddress.h index 7d61b7a1..edb770a0 100644 --- a/tdutils/td/utils/port/IPAddress.h +++ b/tdutils/td/utils/port/IPAddress.h @@ -51,6 +51,7 @@ class IPAddress { static Result get_ipv4_address(CSlice host); static Result get_ipv6_address(CSlice host); + static Result get_ip_address(CSlice host); // host must be any IPv4 or IPv6 Status init_ipv6_port(CSlice ipv6, int port) TD_WARN_UNUSED_RESULT; Status init_ipv6_as_ipv4_port(CSlice ipv4, int port) TD_WARN_UNUSED_RESULT;