diff options
author | Ariel Manzur <ariel@godotengine.org> | 2016-10-20 07:04:10 -0300 |
---|---|---|
committer | Ariel Manzur <ariel@godotengine.org> | 2016-10-20 07:04:10 -0300 |
commit | 672225b710815865449e7930255468d1c085b137 (patch) | |
tree | 995f4e845e0d908fd27a2dcc583a5a2bd3dbb672 /core/io | |
parent | 1c2ac490cf157402cac7f9dbc2a293d0c922def8 (diff) |
added windows support for ipv6, cleaned up unix code
Diffstat (limited to 'core/io')
-rw-r--r-- | core/io/ip.cpp | 15 | ||||
-rw-r--r-- | core/io/ip.h | 2 |
2 files changed, 15 insertions, 2 deletions
diff --git a/core/io/ip.cpp b/core/io/ip.cpp index aba55687a5..4ee1b281c4 100644 --- a/core/io/ip.cpp +++ b/core/io/ip.cpp @@ -117,7 +117,9 @@ IP_Address IP::resolve_hostname(const String& p_hostname, IP_Address::AddrType p GLOBAL_LOCK_FUNCTION; if (resolver->cache.has(p_hostname)) - return resolver->cache[p_hostname]; + if (resolver->cache[p_hostname].type & p_type != 0) + return resolver->cache[p_hostname]; + // requested type is different from type in cache. continue resolution, if successful it'll overwrite cache IP_Address res = _resolve_hostname(p_hostname, p_type); resolver->cache[p_hostname]=res; @@ -137,7 +139,7 @@ IP::ResolverID IP::resolve_hostname_queue_item(const String& p_hostname, IP_Addr resolver->queue[id].hostname=p_hostname; resolver->queue[id].type = p_type; - if (resolver->cache.has(p_hostname)) { + if (resolver->cache.has(p_hostname) && (resolver->cache[p_hostname].type & p_type) != 0) { resolver->queue[id].response=resolver->cache[p_hostname]; resolver->queue[id].status=IP::RESOLVER_STATUS_DONE; } else { @@ -187,6 +189,14 @@ void IP::erase_resolve_item(ResolverID p_id) { } +void IP::clear_cache(const String &p_hostname) { + + if (p_hostname.empty()) { + resolver->cache.clear(); + } else { + resolver->cache.erase(p_hostname); + } +}; Array IP::_get_local_addresses() const { @@ -208,6 +218,7 @@ void IP::_bind_methods() { ObjectTypeDB::bind_method(_MD("get_resolve_item_address","id"),&IP::get_resolve_item_address); ObjectTypeDB::bind_method(_MD("erase_resolve_item","id"),&IP::erase_resolve_item); ObjectTypeDB::bind_method(_MD("get_local_addresses"),&IP::_get_local_addresses); + ObjectTypeDB::bind_method(_MD("clear_cache"),&IP::clear_cache, DEFVAL("")); BIND_CONSTANT( RESOLVER_STATUS_NONE ); BIND_CONSTANT( RESOLVER_STATUS_WAITING ); diff --git a/core/io/ip.h b/core/io/ip.h index 9ffe01b1af..742dd0e740 100644 --- a/core/io/ip.h +++ b/core/io/ip.h @@ -89,6 +89,8 @@ public: virtual void get_local_addresses(List<IP_Address> *r_addresses) const=0; void erase_resolve_item(ResolverID p_id); + void clear_cache(const String& p_hostname = ""); + static IP* get_singleton(); static IP* create(); |