Commit 231e21eb authored by Joanne Hugé's avatar Joanne Hugé

Make nodes ask registry for their country

parent d20879fd
......@@ -213,17 +213,24 @@ class BaseTunnelManager(object):
address_dict = defaultdict(list)
for family, address in address:
address_dict[family] += address
if any(address_dict.itervalues()):
del cache.my_address
else:
address = cache.my_address
if address:
for address in utils.parse_address(address):
# Cache may contain our country, we want to use it if possible to
# prevent interaction with registry
cache_dict = defaultdict(list)
cache_address = cache.my_address
if cache_address:
for address in utils.parse_address(cache_address):
try:
proto = proto_dict[address[2]]
except KeyError:
continue
address_dict[proto[0]].append(address)
cache_dict[proto[0]].append(address)
if {proto: cache_dict[proto][:3] for proto in cache_dict
} == address_dict:
address_dict = cache_dict
else:
del cache.my_address
db = os.getenv('GEOIP2_MMDB')
if db:
from geoip2 import database, errors
......@@ -244,6 +251,7 @@ class BaseTunnelManager(object):
self._address = {family: utils.dump_address(address)
for family, address in address_dict.iteritems()
if address}
self.cache.my_address = ';'.join(self._address.itervalues())
self.sock = socket.socket(socket.AF_INET6,
socket.SOCK_DGRAM | socket.SOCK_CLOEXEC)
......@@ -664,7 +672,12 @@ class BaseTunnelManager(object):
for a in address:
family, ip = resolve(*a[:3])
for ip in ip:
country = a[3] if len(a) > 3 else self._geoiplookup(ip)
try:
country = a[3] if len(a) > 3 \
else self.cache._registry.getCountry(self._prefix, ip)
except (socket.error, subprocess.CalledProcessError, ValueError), e:
logging.warning('Failed to get country (%s)', ip)
country = None
if country:
if self._country.get(family) != country:
self._country[family] = country
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment