Пример #1
0
 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 = []
Пример #2
0
 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)
Пример #3
0
 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 = []
Пример #4
0
def readExternalIP():
    """
    Read external IP stored in the file [BitDust data dir]/metadata/externalip.
    """
    return bpio.ReadTextFile(settings.ExternalIPFilename()).strip()