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)
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])
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])
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])
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()
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)
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)
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])