Exemple #1
0
    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))
Exemple #2
0
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
Exemple #4
0
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
Exemple #5
0
    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)