""" Onionr - Private P2P Communication. Lookup new peer transport addresses using the communicator """ import logger from onionrutils import stringvalidators from communicator import peeraction, onlinepeers from utils import gettransports import onionrexceptions """ This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . """ def lookup_new_peer_transports_with_communicator(comm_inst): logger.info('Looking up new addresses...') tryAmount = 1 newPeers = [] transports = gettransports.get() for i in range(tryAmount): # Download new peer address list from random online peers if len(newPeers) > 10000: # Don't get new peers if we have too many queued up break try: peer = onlinepeers.pick_online_peer(comm_inst) newAdders = peeraction.peer_action(comm_inst, peer, action='pex') except onionrexceptions.OnlinePeerNeeded: continue try: newPeers = newAdders.split(',') except AttributeError: pass else: # Validate new peers are good format and not already in queue invalid = [] for x in newPeers: x = x.strip() if not stringvalidators.validate_transport(x) \ or x in comm_inst.newPeers or x in transports: # avoid adding if its our address invalid.append(x) for x in invalid: try: newPeers.remove(x) except ValueError: pass comm_inst.newPeers.extend(newPeers) comm_inst.decrementThreadCount( 'lookup_new_peer_transports_with_communicator')