def extract_peers(self): announce_list = [] if 'announce-list' in self.torrent_tracker: announce_list = self.torrent_tracker['announce-list'] else: announce_list.append([self.torrent_tracker['announce']]) for announce in announce_list: announce = announce[0] if announce.startswith('http'): piece_length = str(self.torrent_tracker['info']['piece length']) response = self.scrape_http(announce, self.file_hash, self.id, piece_length) elif announce.startswith('udp'): response = self.scrape_udp(announce, self.file_hash, self.id) if response: break for data_chunk in self.chunk_to_six_bytes(response): ip = [] port = None for index in range(0, 4): ip.append(str(data_chunk[index])) port = data_chunk[4] * 256 + data_chunk[5] socket8 = socket.socket(socket.AF_INET, socket.SOCK_STREAM) socket8.setblocking(0) ip = '.'.join(ip) peer = Peer(ip, port, socket8, self.file_hash, self.id) self.peers.append(peer) print('Total of peers: ', len(self.peers))
def find_new_peers(): urls = get_initial_peer_urls() for url in urls: peer = session.query(Peer).filter_by(url=url).one_or_none() if peer is None: peer = Peer(url=url) session.add(peer) session.commit() print('Added {}'.format(url))
def setUp(self): """create test client, add sample data""" s = Stock(stock_symbol="AAPL", stock_name="Apple") p = Peer(lead_stock_symbol=s.stock_symbol, peer_stock_symbol='MSFT') p.id = 9876 db.session.add_all([s, p]) db.session.commit() self.p = p
def handle_started(values, user, peer): if peer is not None: return None, 'You are already on this torrent' new_peer = Peer(info_hash=values['info_hash'], peer_id=values['peer_id'], port=values['port'], user=user, key=values['key']) if values['amount_left'] == 0: new_peer.state = settings.MAGIC_VALUES['seed'] else: new_peer.state = settings.MAGIC_VALUES['peer'] new_peer.save() return new_peer, None
async def accept(self, reader, writer): addr = writer.get_extra_info('peername') peer = Peer(addr[0], addr[1]) self.addr = addr client = PeerTCP(self.peer_id, peer) self.client = client try: info_hash = await client.accept(reader, writer) if info_hash not in self.torrent_managers: raise ValueError('Unknown info hash') except Exception as e: client.close() if isinstance(e, asyncio.CancelledError): raise else: print('{} was not accepted because of {}'.format( peer, repr(e))) else: self.torrent_managers[info_hash].accept_client(peer, client)