Ejemplo n.º 1
0
    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)
Ejemplo n.º 2
0
    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)
Ejemplo n.º 3
0
    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)))
Ejemplo n.º 4
0
    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)
Ejemplo n.º 5
0
    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)
Ejemplo n.º 6
0
 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)
Ejemplo n.º 7
0
 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))
Ejemplo n.º 8
0
    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)))