def _send_new_identity(self): """ Send created identity to the identity server to register it. TODO: need to close transport and gateway after that """ lg.out(4, 'id_registrator._send_new_identity ') from transport import gateway from transport import network_transport from transport.tcp import tcp_interface gateway.init() interface = tcp_interface.GateInterface() transport = network_transport.NetworkTransport('tcp', interface) transport.automat('init', gateway.listener()) transport.automat('start') gateway.start() sendfilename = settings.LocalIdentityFilename() + '.new' dlist = [] for idurl in self.new_identity.sources: self.free_idurls.remove(idurl) _, host, _, _ = nameurl.UrlParse(idurl) _, tcpport = known_servers.by_host().get( host, (settings.IdentityWebPort(), settings.IdentityServerPort())) srvhost = '%s:%d' % (host, tcpport) dlist.append(gateway.send_file_single( idurl, 'tcp', srvhost, sendfilename, 'Identity')) assert len(self.free_idurls) == 0 return DeferredList(dlist)
def doPingServers(self, arg): """ Action method. """ lg.out(4, 'id_registrator.doPingServers %d in list' % len(self.discovered_servers)) def _cb(htmlsrc, id_server_host): lg.out(4, ' RESPONDED: %s' % id_server_host) if self.preferred_server and id_server_host == self.preferred_server: self.good_servers.insert(0, id_server_host) else: self.good_servers.append(id_server_host) self.discovered_servers.remove(id_server_host) self.automat('id-server-response', (id_server_host, htmlsrc)) def _eb(err, id_server_host): lg.out(4, ' FAILED: %s' % id_server_host) self.discovered_servers.remove(id_server_host) self.automat('id-server-failed', (id_server_host, err)) for host in self.discovered_servers: webport, tcpport = known_servers.by_host().get(host, (settings.IdentityWebPort(), settings.IdentityServerPort())) if webport == 80: webport = '' server_url = nameurl.UrlMake('http', host, webport, '') d = net_misc.getPageTwisted(server_url, timeout=10) d.addCallback(_cb, host) d.addErrback(_eb, host)
def doRequestServers(self, arg): """ Action method. """ login = bpio.ReadTextFile(settings.UserNameFilename()) def _cb(xmlsrc, idurl, host): lg.out(4, ' EXIST: %s' % idurl) self.registrations.remove(idurl) self.automat('id-exist', idurl) def _eb(err, idurl, host): lg.out(4, ' NOT EXIST: %s' % idurl) if self.preferred_server and self.preferred_server == host: self.free_idurls.insert(0, idurl) else: self.free_idurls.append(idurl) self.registrations.remove(idurl) self.automat('id-not-exist', idurl) for host in self.good_servers: webport, tcpport = known_servers.by_host().get( host, (settings.IdentityWebPort(), settings.IdentityServerPort())) if webport == 80: webport = '' idurl = nameurl.UrlMake('http', host, webport, login + '.xml') lg.out(4, ' %s' % idurl) d = net_misc.getPageTwisted(idurl, timeout=10) d.addCallback(_cb, idurl, host) d.addErrback(_eb, idurl, host) self.registrations.append(idurl) lg.out(4, 'id_registrator.doRequestServers login=%s registrations=%d' % (login, len(self.registrations)))
def _send_new_identity(self): """ Send created identity to the identity server to register it. TODO: need to close transport and gateway after that """ lg.out(4, 'id_registrator._send_new_identity ') from transport import gateway from transport import network_transport from transport.tcp import tcp_interface gateway.init() interface = tcp_interface.GateInterface() transport = network_transport.NetworkTransport('tcp', interface) transport.automat('init', gateway.listener()) transport.automat('start') gateway.start() sendfilename = settings.LocalIdentityFilename() + '.new' dlist = [] for idurl in self.new_identity.sources: self.free_idurls.remove(idurl) _, host, _, _ = nameurl.UrlParse(idurl) _, tcpport = known_servers.by_host().get( host, (settings.IdentityWebPort(), settings.IdentityServerPort())) srvhost = '%s:%d' % (host, tcpport) dlist.append(gateway.send_file_single(idurl, 'tcp', srvhost, sendfilename, 'Identity')) assert len(self.free_idurls) == 0 return DeferredList(dlist)
def doPingServers(self, arg): """ Action method. """ lg.out(4, 'id_registrator.doPingServers %d in list' % len(self.discovered_servers)) def _cb(htmlsrc, id_server_host): lg.out(4, ' RESPONDED: %s' % id_server_host) if self.preferred_servers and id_server_host in self.preferred_servers: self.good_servers.insert(0, id_server_host) else: self.good_servers.append(id_server_host) self.discovered_servers.remove(id_server_host) self.automat('id-server-response', (id_server_host, htmlsrc)) def _eb(err, id_server_host): lg.out(4, ' FAILED: %s' % id_server_host) self.discovered_servers.remove(id_server_host) self.automat('id-server-failed', (id_server_host, err)) for host in self.discovered_servers: webport, tcpport = known_servers.by_host().get(host, (settings.IdentityWebPort(), settings.IdentityServerPort())) if webport == 80: webport = '' server_url = nameurl.UrlMake('http', host, webport, '') d = net_misc.getPageTwisted(server_url, timeout=10) d.addCallback(_cb, host) d.addErrback(_eb, host)
def doSaveMyName(self, arg): """ Action method. """ try: login = arg['username'] except: login = arg[0] if len(arg) > 1: self.preferred_servers = map(lambda s: s.strip(), arg[1].split(',')) if not self.known_servers: self.known_servers = known_servers.by_host() if not self.preferred_servers: try: from main import config for srv in str(config.conf().getData('services/identity-propagate/preferred-servers')).split(','): if srv.strip(): self.preferred_servers.append(srv.strip()) except: pass self.min_servers = max( settings.MinimumIdentitySources(), config.conf().getInt('services/identity-propagate/min-servers') or settings.MinimumIdentitySources()) self.max_servers = min( settings.MaximumIdentitySources(), config.conf().getInt('services/identity-propagate/max-servers') or settings.MaximumIdentitySources()) lg.out(4, 'id_registrator.doSaveMyName [%s]' % login) lg.out(4, ' known_servers=%s' % self.known_servers) lg.out(4, ' preferred_servers=%s' % self.preferred_servers) lg.out(4, ' min_servers=%s' % self.min_servers) lg.out(4, ' max_servers=%s' % self.max_servers) bpio.WriteFile(settings.UserNameFilename(), login)
def doSelectRandomServers(self, arg): """ Action method. """ if self.preferred_server is not None: self.discovered_servers.append(self.preferred_server) # In future we can do search such peers in DHT. for i in range(3): s = set(known_servers.by_host().keys()) s.difference_update(self.discovered_servers) if len(s) > 0: self.discovered_servers.append(random.choice(list(s))) lg.out(4, 'id_registrator.doSelectRandomServers %s' % str(self.discovered_servers))
def doRequestServers(self, arg): """ Action method. """ login = bpio.ReadTextFile(settings.UserNameFilename()) def _cb(xmlsrc, idurl, host): if not xmlsrc: if self.preferred_servers and host in self.preferred_servers: self.free_idurls.insert(0, idurl) else: self.free_idurls.append(idurl) self.registrations.remove(idurl) self.automat('id-not-exist', idurl) else: lg.out(4, ' EXIST: %s' % idurl) self.registrations.remove(idurl) self.automat('id-exist', idurl) def _eb(err, idurl, host): lg.out(4, ' NOT EXIST: %s' % idurl) if self.preferred_servers and host in self.preferred_servers: self.free_idurls.insert(0, idurl) else: self.free_idurls.append(idurl) self.registrations.remove(idurl) self.automat('id-not-exist', idurl) for host in self.good_servers: webport, tcpport = known_servers.by_host().get( host, (settings.IdentityWebPort(), settings.IdentityServerPort())) if webport == 80: webport = '' idurl = nameurl.UrlMake('http', host, webport, login + '.xml') lg.out(4, ' %s' % idurl) d = net_misc.getPageTwisted(idurl, timeout=10) d.addCallback(_cb, idurl, host) d.addErrback(_eb, idurl, host) self.registrations.append(idurl) lg.out( 4, 'id_registrator.doRequestServers login=%s registrations=%d' % (login, len(self.registrations)))