def doReportSuccess(self, *args, **kwargs): """ Action method. """ try: min_port = min( [addr[1] for addr in list(self.stun_results.values())]) max_port = max( [addr[1] for addr in list(self.stun_results.values())]) my_ip = strng.to_text(list(self.stun_results.values())[0][0]) if min_port == max_port: result = ('stun-success', 'non-symmetric', my_ip, min_port) else: result = ('stun-success', 'symmetric', my_ip, self.stun_results) self.my_address = (my_ip, min_port) except: lg.exc() result = ('stun-failed', None, None, []) self.my_address = None if self.my_address: bpio.WriteTextFile(settings.ExternalIPFilename(), self.my_address[0]) bpio.WriteTextFile(settings.ExternalUDPPortFilename(), str(self.my_address[1])) if _Debug: lg.out( _DebugLevel, 'stun_client.doReportSuccess based on %d nodes: %s' % (len(self.stun_results), str(self.my_address))) if _Debug: lg.out(_DebugLevel + 10, ' %s' % str(result)) for cb in self.callbacks: cb(result[0], result[1], result[2], result[3]) self.callbacks = []
def save(result): lg.out(4, ' external IP : %s' % result) if result['result'] != 'stun-success': self.automat('stun-failed') return ip = result['ip'] bpio.WriteTextFile(settings.ExternalIPFilename(), ip) self.automat('stun-success', ip)
def doReportSuccess(self, *args, **kwargs): """ Action method. """ try: min_port = min( [addr[1] for addr in list(self.stun_results.values())]) max_port = max( [addr[1] for addr in list(self.stun_results.values())]) my_ip = strng.to_text(list(self.stun_results.values())[0][0]) if min_port == max_port: result = ('stun-success', 'non-symmetric', my_ip, min_port) else: result = ('stun-success', 'symmetric', my_ip, self.stun_results) self.my_address = (my_ip, min_port) except: lg.exc() result = ('stun-failed', None, None, []) self.my_address = None if _Debug: lg.out( _DebugLevel, 'stun_client.doReportSuccess based on %d nodes: %r' % ( len(self.stun_results), result, )) if self.my_address: current_external_ip = misc.readExternalIP() if current_external_ip != self.my_address[0]: events.send('my-external-ip-changed', data=dict( old=current_external_ip, new=self.my_address[0], )) bpio.WriteTextFile(settings.ExternalIPFilename(), self.my_address[0]) bpio.WriteTextFile(settings.ExternalUDPPortFilename(), str(self.my_address[1])) for cb in self.callbacks: cb(result[0], result[1], result[2], result[3]) self.callbacks = []
def readExternalIP(): """ Read external IP stored in the file [BitDust data dir]/metadata/externalip. """ return bpio.ReadTextFile(settings.ExternalIPFilename()).strip()