def IDchanged(changes): s = set(changes) if s.intersection([ 'transport.transport-tcp.transport-tcp-enable', 'transport.transport-tcp.transport-tcp-receiving-enable', 'transport.transport-udp.transport-udp-enable', 'transport.transport-udp.transport-udp-receiving-enable', 'transport.transport-cspace.transport-cspace-enable', 'transport.transport-cspace.transport-cspace-receiving-enable', # 'transport.transport-ssh.transport-ssh-enable', # 'transport.transport-http.transport-http-enable', # 'transport.transport-email.transport-email-enable', # 'transport.transport-q2q.transport-q2q-enable', # 'transport.transport-skype.transport-skype-enable', ]): return True if 'transport.transport-tcp.transport-tcp-port' in s and settings.enableTCP(): return True if 'transport.transport-udp.transport-udp-port' in s and settings.enableUDP(): return True if 'transport.transport-ssh.transport-ssh-port' in s and settings.enableSSH(): return True if 'transport.transport-q2q.transport-q2q-username' in s and settings.enableQ2Q(): return True if 'transport.transport-cspace.transport-cspace-key-id' in s and settings.enableCSpace(): return True if 'transport.transport-http.transport-http-server-port' in s and settings.enableHTTP(): return True if 'transport.transport-tcp.transport-tcp-port' in s and settings.enableTCP(): return True return False
def CreateNewIdentity(): global _NewIdentity dhncrypto.InitMyKey() misc.loadLocalIdentity() if misc.isLocalIdentityReady(): try: lid = misc.getLocalIdentity() lid.sign() # misc.setLocalIdentity(lid) # misc.saveLocalIdentity() valid = lid.Valid() except: valid = False dhnio.DprintException() if valid: _NewIdentity = lid return dhnio.Dprint(2, 'identity_registrator.CreateNewIdentity existing local identity is not VALID') login = dhnio.ReadTextFile(settings.UserNameFilename()) externalIP = dhnio.ReadTextFile(settings.ExternalIPFilename()) localIP = dhnio.ReadTextFile(settings.LocalIPFilename()) dhnio.Dprint(4, 'identity_registrator.CreateNewIdentity %s %s ' % (login, externalIP)) idurl = 'http://'+settings.IdentityServerName()+'/'+login.lower()+'.xml' ident = identity.identity( ) ident.sources.append(idurl) cdict = {} if settings.enableTCP(): cdict['tcp'] = 'tcp://'+externalIP+':'+settings.getTCPPort() if settings.enableCSpace() and transport_control._TransportCSpaceEnable: cdict['cspace'] = 'cspace://' if settings.getCSpaceKeyID() != '': cdict['cspace'] += settings.getCSpaceKeyID() if settings.enableUDP() and transport_control._TransportUDPEnable: if stun.getUDPClient() is not None: if stun.getUDPClient().externalAddress is not None: # _altStunAddress cdict['udp'] = 'udp://'+stun.getUDPClient().externalAddress[0]+':'+str(stun.getUDPClient().externalAddress[1]) for c in misc.validTransports: if cdict.has_key(c): ident.contacts.append(cdict[c]) ident.publickey = dhncrypto.MyPublicKey() ident.date = time.ctime() #time.strftime('%b %d, %Y') revnum = dhnio.ReadTextFile(settings.RevisionNumberFile()).strip() repo, location = misc.ReadRepoLocation() ident.version = (revnum.strip() + ' ' + repo.strip() + ' ' + dhnio.osinfo().strip()).strip() ident.sign() dhnio.WriteFile(settings.LocalIdentityFilename()+'.new', ident.serialize()) _NewIdentity = ident
def UpdateUPNP(): #global _UpnpResult dhnio.Dprint(8, 'network_connector.UpdateUPNP ') # protos_need_upnp = set(['tcp', 'ssh', 'http']) protos_need_upnp = set(['tcp',]) #we want to update only enabled protocols if not settings.enableTCP(): protos_need_upnp.discard('tcp') # if not settings.enableSSH() or not transport_control._TransportSSHEnable: # protos_need_upnp.discard('ssh') # if not settings.enableHTTPServer() or not transport_control._TransportHTTPEnable: # protos_need_upnp.discard('http') def _update_next_proto(): if len(protos_need_upnp) == 0: #dhnio.Dprint(4, 'network_connector.update_upnp done: ' + str(_UpnpResult)) A('upnp-done') return dhnio.Dprint(14, 'network_connector.UpdateUPNP._update_next_proto ' + str(protos_need_upnp)) proto = protos_need_upnp.pop() protos_need_upnp.add(proto) if proto == 'tcp': port = settings.getTCPPort() elif proto == 'ssh': port = settings.getSSHPort() elif proto == 'http': port = settings.getHTTPPort() d = threads.deferToThread(_call_upnp, port) d.addCallback(_upnp_proto_done, proto) def _call_upnp(port): # start messing with upnp settings # success can be false if you're behind a router that doesn't support upnp # or if you are not behind a router at all and have an external ip address shutdowner.A('block') success, port = run_upnpc.update(port) shutdowner.A('unblock') return (success, port) def _upnp_proto_done(result, proto): dhnio.Dprint(4, 'network_connector.UpdateUPNP._upnp_proto_done %s: %s' % (proto, str(result))) #_UpnpResult[proto] = result[0] #if _UpnpResult[proto] == 'upnp-done': if result[0] == 'upnp-done': if proto == 'tcp': settings.setTCPPort(result[1]) elif proto == 'ssh': settings.setSSHPort(result[1]) elif proto == 'http': settings.setHTTPPort(result[1]) protos_need_upnp.discard(proto) reactor.callLater(0, _update_next_proto) _update_next_proto()