Example #1
0
    def import_peers(self):
        '''Import hard-coded peers from a file or the coin defaults.'''
        self.add_peers([self.myself])
        coin_peers = self.env.coin.PEERS
        self.onion_peers = [Peer.from_real_name(rn, 'coins.py')
                            for rn in coin_peers if '.onion ' in rn]

        # If we don't have many peers in the peers file, add
        # hard-coded ones
        self.read_peers_file()
        if len(self.peers) < 5:
            peers = [Peer.from_real_name(real_name, 'coins.py')
                     for real_name in coin_peers]
            self.add_peers(peers, limit=None)
Example #2
0
    def check_remote_peers(self, updates):
        '''When a peer gives us a peer update.

        Each update is expected to be of the form:
            [ip_addr, hostname, ['v1.0', 't51001', 's51002']]

        Return True if we're in the list of peers.
        '''
        try:
            real_names = [' '.join([u[1]] + u[2]) for u in updates]
            peers = [Peer.from_real_name(real_name, str(self.peer))
                     for real_name in real_names]
        except Exception:
            self.log_error('bad server.peers.subscribe response')
            return False

        self.peer_mgr.add_peers(peers)
        my = self.peer_mgr.myself
        for peer in my.matches(peers):
            if peer.tcp_port == my.tcp_port and peer.ssl_port == my.ssl_port:
                return

        # Announce ourself if not present
        self.log_info('registering with server.add_peer')
        self.send_request(self.on_add_peer, 'server.add_peer', [my.features])
Example #3
0
    def check_remote_peers(self):
        '''Check the peers list we got from a remote peer.

        Each update is expected to be of the form:
            [ip_addr, hostname, ['v1.0', 't51001', 's51002']]

        Call add_peer if the remote doesn't appear to know about us.
        '''
        try:
            real_names = [' '.join([u[1]] + u[2]) for u in self.remote_peers]
            peers = [
                Peer.from_real_name(real_name, str(self.peer))
                for real_name in real_names
            ]
        except Exception:
            self.log_error('bad server.peers.subscribe response')
            return

        self.peer_mgr.add_peers(peers)

        # Announce ourself if not present.  Don't if disabled, we
        # are a non-public IP address, or to ourselves.
        if not self.peer_mgr.env.peer_announce:
            return
        if self.peer in self.peer_mgr.myselves:
            return
        my = self.peer_mgr.my_clearnet_peer()
        if not my or not my.is_public:
            return
        for peer in my.matches(peers):
            if peer.tcp_port == my.tcp_port and peer.ssl_port == my.ssl_port:
                return

        self.log_info('registering ourself with server.add_peer')
        self.send_request(self.on_add_peer, 'server.add_peer', [my.features])
Example #4
0
    def check_remote_peers(self, updates):
        '''When a peer gives us a peer update.

        Each update is expected to be of the form:
            [ip_addr, hostname, ['v1.0', 't51001', 's51002']]
        '''
        try:
            real_names = [' '.join([u[1]] + u[2]) for u in updates]
            peers = [Peer.from_real_name(real_name, str(self.peer))
                     for real_name in real_names]
        except Exception:
            self.log_error('bad server.peers.subscribe response')
            return

        self.peer_mgr.add_peers(peers)

        # Announce ourself if not present.  Don't if disabled or we
        # are a non-public IP address.
        if not self.peer_mgr.env.peer_announce:
            return
        my = self.peer_mgr.my_clearnet_peer()
        if not my.is_public:
            return
        for peer in my.matches(peers):
            if peer.tcp_port == my.tcp_port and peer.ssl_port == my.ssl_port:
                return

        self.log_info('registering ourself with server.add_peer')
        self.send_request(self.on_add_peer, 'server.add_peer', [my.features])
Example #5
0
    def on_peers_subscribe(self, request):
        '''Handle the response to the peers.subcribe message.'''
        if not self.is_good(request, list):
            return

        # Check the peers list we got from a remote peer.
        # Each is expected to be of the form:
        #    [ip_addr, hostname, ['v1.0', 't51001', 's51002']]
        # Call add_peer if the remote doesn't appear to know about us.
        raw_peers = request.result()
        try:
            real_names = [' '.join([u[1]] + u[2]) for u in raw_peers]
            peers = [
                Peer.from_real_name(real_name, str(self.peer))
                for real_name in real_names
            ]
        except Exception:
            self.bad('bad server.peers.subscribe response')
            return

        features = self.peer_mgr.features_to_register(self.peer, peers)
        if features:
            self.logger.info(f'registering ourself with "server.add_peer"')
            self.send_request('server.add_peer', [features],
                              self.on_add_peer,
                              timeout=self.timeout)
        else:
            self.maybe_close()
Example #6
0
    def rpc_add_peer(self, real_name):
        '''Add a peer.

        real_name: a real name, as would appear on IRC
        '''
        peer = Peer.from_real_name(real_name, 'RPC')
        self.peer_mgr.add_peers([peer])
        return "peer '{}' added".format(real_name)
 def import_peers(self):
     '''Import hard-coded peers from a file or the coin defaults.'''
     self.add_peers(self.myselves)
     coin_peers = self.env.coin.PEERS
     # Add the hard-coded ones
     peers = [Peer.from_real_name(real_name, 'coins.py')
              for real_name in coin_peers]
     self.add_peers(peers, limit=None)
Example #8
0
    def import_peers(self):
        '''Import hard-coded peers from a file or the coin defaults.'''
        self.add_peers(self.myselves)

        # Add the hard-coded ones unless only returning self
        if self.env.peer_discovery != self.env.PD_SELF:
            coin_peers = self.env.coin.PEERS
            peers = [Peer.from_real_name(real_name, 'coins.py')
                     for real_name in coin_peers]
            self.add_peers(peers, limit=None)
Example #9
0
 def add_irc_peer(self, nick, real_name):
     '''Add an IRC peer.'''
     peer = Peer.from_real_name(real_name, '{}'.format(nick))
     self.add_peers([peer])