Esempio n. 1
0
    def deal_with_message(self, data):
        messages_to_send_list = []
        if self.message_buffer:
            self.message_buffer.extend(bytearray(data))
        else:
            self.message_buffer = bytearray(data)
        if self.message_buffer[1:20].lower() == "bittorrent protocol":
            print "Handshake Received!"
            self.decode_handshake(
                self.factory.active_torrent.torrent_info)  #compare info-hash
            self.message_buffer = self.message_buffer[68:]
            messages_to_send_list.append(messages.Interested(
            ))  #we send interested when we receive handhake
            self.interested = True
        if len(self.message_buffer) >= 4:
            message_length = messages.bytes_to_number(
                self.message_buffer[0:4]) + 4
            while len(self.message_buffer) >= message_length:
                messages_to_send_list = self.parse_messages(
                    messages_to_send_list)
                message_length = messages.bytes_to_number(
                    self.message_buffer[0:4]) + 4

        #print messages_to_send_list[0]
        return messages_to_send_list
Esempio n. 2
0
 def write_block(self,block):
     block_num_in_piece = bytes_to_number(block.begin) / constants.REQUEST_LENGTH
     piece_num = bytes_to_number(block.index)
     mypiece = self.file_downloading.piece_list[piece_num]
     block_num_overall = self.piece_and_index_to_overall_index(block_num_in_piece, piece_num) 
     if not self.have_blocks[block_num_overall]:
         mypiece.write(block_num_in_piece, block.block)
         self.have_blocks[block_num_overall] = 1  #add block to have list
         #print '\npiece ' + str(piece_num) +' and block '+ str(block_num_in_piece) + ' received'
     if block_num_overall in self.pending_timeout: #remove block from timeout pending dict
         del self.pending_timeout[block_num_overall]
     if mypiece.check_if_full() and not mypiece.written:
         self.check_hash(mypiece,piece_num)
Esempio n. 3
0
 def write_block(self,block):                             # called by bittorrenter!
     block_num_in_piece = bytes_to_number(block.begin) / constants.REQUEST_LENGTH
     piece_num = bytes_to_number(block.index)
     mypiece = self.file_downloading.piece_list[piece_num]
     block_num_overall = self.piece_and_index_to_overall_index(block_num_in_piece, piece_num) 
     if not self.have_blocks[block_num_overall]:
         mypiece.write(block_num_in_piece, block.block)
         self.have_blocks[block_num_overall] = 1  #add block to have list
         #print '\npiece ' + str(piece_num) +' and block '+ str(block_num_in_piece) + ' received'
     if block_num_overall in self.pending_timeout: #remove block from timeout pending dict
         del self.pending_timeout[block_num_overall]
     if mypiece.check_if_full() and not mypiece.written:
         percentage=self.check_hash(mypiece,piece_num)# check hash value of piece when piece is downloaded fuly
         return percentage
Esempio n. 4
0
 def deal_with_message(self,data):
     messages_to_send_list = []
     if self.message_buffer:
         self.message_buffer.extend(bytearray(data))
     else:
         self.message_buffer = bytearray(data)
     if self.message_buffer[1:20].lower() == "bittorrent protocol":
         print "handshake received"
         self.decode_handshake(self.factory.active_torrent.torrent_info)
         self.message_buffer = self.message_buffer[68:]
         messages_to_send_list.append(messages.Interested())
         self.interested = True
     if len(self.message_buffer) >= 4:
         message_length = messages.bytes_to_number(self.message_buffer[0:4]) + 4
         while len(self.message_buffer) >= message_length:
             messages_to_send_list = self.parse_messages(messages_to_send_list)
             message_length = messages.bytes_to_number(self.message_buffer[0:4])+4
     return messages_to_send_list
Esempio n. 5
0
    def parse_messages(self, messages_to_send_list):
        message_obj = self.parse_message_from_response()
        if isinstance(message_obj, messages.Choke):
            print 'messages.Choked'
            self.choked = True
        elif isinstance(message_obj, messages.Unchoke):
            print 'messages.Unchoked!'
            self.choked = False
            if self.interested:
                for i in range(5):
                    messages_to_send_list.append(self.get_next_request())
        elif isinstance(message_obj, messages.Interested):
            self.peer_interested = True
        elif isinstance(message_obj, messages.Interested):
            self.peer_interested = False
        elif isinstance(message_obj, messages.Have):
            piece_index = messages.bytes_to_number(message_obj.index)
            self.peer_has_pieces[piece_index] = 1
            if self.interested and not self.choked:
                messages_to_send_list.append(self.get_next_request())

        elif isinstance(message_obj, messages.Bitfield):
            bitarray = BitArray(bytes=message_obj.bitfield)
            self.peer_has_pieces = bitarray[:len(self.peer_has_pieces)]
            if self.interested and not self.choked:
                messages_to_send_list.append(self.get_next_request())

        elif isinstance(message_obj, messages.Request):
            print 'request'
            pass  #send piece
        elif isinstance(message_obj, messages.Piece):
            self.pending_requests -= 1
            percentage = self.factory.active_torrent.write_block(message_obj)
            #print percentage
            if self.interested and not self.choked:
                messages_to_send_list.append(self.get_next_request())
        elif isinstance(message_obj, messages.Cancel):
            print 'cancel'
        elif isinstance(message_obj, messages.Port):
            print 'port'
            #parse port and switch connection to that port
        return messages_to_send_list
Esempio n. 6
0
    def parse_messages(self, messages_to_send_list):
        message_obj = self.parse_message_from_response()
        if isinstance(message_obj, messages.Choke):
            print 'messages.Choked'
            self.choked = True
        elif isinstance(message_obj, messages.Unchoke):
            print 'messages.Unchoked!'
            self.choked = False
            if self.interested:
                for i in range(5):
                    messages_to_send_list.append(self.get_next_request())
        elif isinstance(message_obj, messages.Interested):
            self.peer_interested = True
        elif isinstance(message_obj, messages.Interested):
            self.peer_interested = False
        elif isinstance(message_obj, messages.Have):
            piece_index = messages.bytes_to_number(message_obj.index)
            self.peer_has_pieces[piece_index] = 1
            if self.interested and not self.choked:
                messages_to_send_list.append(self.get_next_request())
                
        elif isinstance(message_obj, messages.Bitfield):
            bitarray = BitArray(bytes=message_obj.bitfield)
            self.peer_has_pieces = bitarray[:len(self.peer_has_pieces)]
            if self.interested and not self.choked:
                messages_to_send_list.append(self.get_next_request())

        elif isinstance(message_obj, messages.Request):
            print 'request'
            pass  #send piece
        elif isinstance(message_obj, messages.Piece):
            self.pending_requests -= 1
            percentage=self.factory.active_torrent.write_block(message_obj)
            #print percentage
            if self.interested and not self.choked:
                messages_to_send_list.append(self.get_next_request())
        elif isinstance(message_obj, messages.Cancel):
            print 'cancel'
        elif isinstance(message_obj, messages.Port):
            print 'port'
            #parse port and switch connection to that port
        return messages_to_send_list
Esempio n. 7
0
 def parse_message_from_response(self):
     length = messages.bytes_to_number(self.message_buffer[0:4]) + 4  #length indicated by the first 4 bytes + 4 for those first 4 bytes
     bytestring = self.message_buffer[:length]
     if self.message_buffer[0:4] == '\x00\x00\x00\x00':  #no msg_id
         message_obj = KeepAlive(response=bytestring)
     else:
         message_obj  = {
           0: lambda: messages.Choke(response=bytestring),
           1: lambda: messages.Unchoke(response=bytestring),
           2: lambda: messages.Interested(response=bytestring),
           3: lambda: messaged.Interested(response=bytestring),
           4: lambda: messages.Have(response=bytestring),
           5: lambda: messages.Bitfield(response=bytestring),
           6: lambda: messages.Request(response=bytestring),
           7: lambda: messages.Piece(response=bytestring),
           8: lambda: messages.Cancel(response=bytestring),
           9: lambda: messages.Port(response=bytestring),
         }[self.message_buffer[4]]()     #response[4] is the msg_id
     self.message_buffer = self.message_buffer[length:]
     return message_obj
Esempio n. 8
0
 def parse_message_from_response(self):
     length = messages.bytes_to_number(
         self.message_buffer[0:4]
     ) + 4  #length indicated by the first 4 bytes + 4 for those first 4 bytes
     bytestring = self.message_buffer[:length]
     if self.message_buffer[0:4] == '\x00\x00\x00\x00':  #no msg_id
         message_obj = KeepAlive(response=bytestring)
     else:
         message_obj = {
             0: lambda: messages.Choke(response=bytestring),
             1: lambda: messages.Unchoke(response=bytestring),
             2: lambda: messages.Interested(response=bytestring),
             3: lambda: messaged.Interested(response=bytestring),
             4: lambda: messages.Have(response=bytestring),
             5: lambda: messages.Bitfield(response=bytestring),
             6: lambda: messages.Request(response=bytestring),
             7: lambda: messages.Piece(response=bytestring),
             8: lambda: messages.Cancel(response=bytestring),
             9: lambda: messages.Port(response=bytestring),
         }[self.message_buffer[4]]()  #response[4] is the msg_id
     self.message_buffer = self.message_buffer[length:]
     return message_obj
Esempio n. 9
0
    def __repr__(self):
        to_print = ''.join(repr(block) for block in self.block_list)
        return to_print

class TorrentFile(object):
    def __init__(self, overall_length, piece_size):
        self.number_pieces = overall_length / piece_size
        self.piece_list = []
        for piece in range(self.number_pieces):
            self.piece_list.append(MyPiece(piece_size))
        if overall_length % piece_size != 0:
            print 'extra smaller piece for this file'
            last_piece_size = overall_length % piece_size
            self.piece_list.append(MyPiece(last_piece_size))
            self.number_pieces += 1

if __name__ == "__main__":
    print 'testing blocks and pieces'
    print 'LENGTH:',len('\x00\x00\x06\x18')
    block = Block(bytes_to_number('\x00\x00\x06\x18'),'\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff')
    #print 'block: ' + repr(block)
    #piece = MyPiece(1048576)
    piece = MyPiece(2**3 * 10+4)
    print 'number:',(2**3 * 10+4)
    print 'length:',(84/REQUEST_LENGTH)
    print 'index:',bytes_to_number('\x00\x00\x00\x41')
    #print 'index:',bytes_to_number('\x01\x01\x01\x01\x05\x01\x01\x09')
    #piece.write(bytes_to_number('\x00\x00\x00\x41'), '\x01\x01\x01\x01\x05\x01\x01\x09')
    #print repr(piece)
Esempio n. 10
0
    def __repr__(self):
        to_print = ''.join(repr(block) for block in self.block_list)
        return to_print


class TorrentFile(object):
    def __init__(self, overall_length, piece_size):
        self.number_pieces = overall_length / piece_size
        self.piece_list = []
        for piece in range(self.number_pieces):
            self.piece_list.append(MyPiece(piece_size))
        if overall_length % piece_size != 0:
            print 'extra smaller piece for this file'
            last_piece_size = overall_length % piece_size
            self.piece_list.append(MyPiece(last_piece_size))
            self.number_pieces += 1


if __name__ == "__main__":
    print 'testing blocks and pieces'
    block = Block(
        bytes_to_number('\x00\x00\x06\x18'),
        '\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff'
    )
    #print 'block: ' + repr(block)
    #piece = MyPiece(1048576)
    piece = MyPiece(2**3 * 10 + 4)
    piece.write(bytes_to_number('\x00\x00\x00\x41'),
                '\x01\x01\x01\x01\x05\x01\x01\x09')
    print repr(piece)
Esempio n. 11
0
        self.block_list[block_index].write(bytestring)

    def return_block(self, piece_offset):
        block_index = piece_offset / self.block_size
        return self.block_list[block_index].bytestring

    def __repr__(self):
        to_print = ''.join(repr(block) for block in self.block_list)
        return to_print

class TorrentFile(object):
    def __init__(self, overall_length, piece_size):
        self.number_pieces = overall_length / piece_size
        self.piece_list = []
        for piece in range(self.number_pieces):
            self.piece_list.append(MyPiece(piece_size))
        if overall_length % piece_size != 0:
            print 'extra smaller piece for this file'
            last_piece_size = overall_length % piece_size
            self.piece_list.append(MyPiece(last_piece_size))
            self.number_pieces += 1

if __name__ == "__main__":
    print 'testing blocks and pieces'
    block = Block(bytes_to_number('\x00\x00\x06\x18'),'\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x9d\xff\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff')
    #print 'block: ' + repr(block)
    #piece = MyPiece(1048576)
    piece = MyPiece(2**3 * 10+4)
    piece.write(bytes_to_number('\x00\x00\x00\x41'), '\x01\x01\x01\x01\x05\x01\x01\x09')
    print repr(piece)