diff --git a/core/io/ip_address.cpp b/core/io/ip_address.cpp index 594edbf8e27..fa0eab4f0d3 100644 --- a/core/io/ip_address.cpp +++ b/core/io/ip_address.cpp @@ -174,6 +174,7 @@ void IP_Address::clear() { memset(&field8[0], 0, sizeof(field8)); valid = false; + wildcard = false; }; bool IP_Address::is_ipv4() const { @@ -206,10 +207,16 @@ void IP_Address::set_ipv6(const uint8_t *p_buf) { IP_Address::IP_Address(const String &p_string) { clear(); - if (p_string.find(":") >= 0) { + + if (p_string == "*") { + // Wildcard (not a vaild IP) + wildcard = true; + + } else if (p_string.find(":") >= 0) { // IPv6 _parse_ipv6(p_string); valid = true; + } else if (p_string.get_slice_count(".") == 4) { // IPv4 (mapped to IPv6 internally) field16[5] = 0xffff; diff --git a/core/io/ip_address.h b/core/io/ip_address.h index 2ed77cc3b40..52d6974d5eb 100644 --- a/core/io/ip_address.h +++ b/core/io/ip_address.h @@ -41,6 +41,7 @@ private: }; bool valid; + bool wildcard; protected: void _parse_ipv6(const String &p_string); @@ -66,6 +67,7 @@ public: } void clear(); + bool is_wildcard() const { return wildcard; } bool is_valid() const { return valid; } bool is_ipv4() const; const uint8_t *get_ipv4() const;