示例#1
0
    def update_remote_file_data(self, file_id):
        my_tracker = UsersManager.get_tracker()
        try:
            sock = connect_socket(my_tracker.ip, my_tracker.port)
            local_ip = get_local_ip(sock.getsockname()[0])
            sock.send("FCHU" + UsersManager.get_my_session_id())
            sock.send(file_id)
            command = read_from_socket(sock, 4)
            if command == "AFCH":
                hitpeer = read_from_socket(sock, 3)
                for i in range(0, int(hitpeer)):
                    peer_ip = read_from_socket(sock, 15)
                    peer_port = read_from_socket(sock, 5)
                    f = FilesManager.find_file_by_id(file_id)

                    if not f:
                        raise Exception("File %s not found in request emitter" % file_id)

                    mask_length = int(math.ceil(f.parts_count / 8))
                    if f.parts_count % 8 != 0:
                        mask_length += 1
                    klog("MASK_LENGTH = %s" % mask_length)
                    partlist = read_from_socket(sock, mask_length)
                    partlist_array = []
                    for b in partlist:
                        byte = bin(int(binascii.b2a_hex(b),16))
                        byte = byte[2:]
                        byte = format_byte(byte)
                        for i in range(7,-1, -1):
                            partlist_array.append(byte[i])
                    for j in range(len(partlist_array)):
                        #klog("%s PARTE %s: %s" %(file_id,j,partlist_array[j]))
                        FilesManager.update_remote_file_part(file_id, Peer(peer_ip, peer_port), j, bool(int(partlist_array[j])))
        except Exception, ex:
            klog("Exception in updating file data to tracker: %s" % str(ex))
示例#2
0
 def logout(self):
     my_tracker = UsersManager.get_tracker()
     sock = connect_socket(my_tracker.ip, 80)
     sock.send("LOGO" + UsersManager.get_my_session_id())
     response = read_from_socket(sock, 4)
     num_file_deleted = -1
     if response == "ALOG":
         num_file_deleted = int(read_from_socket(sock, 10))
         klog("LOGOUT Done. Deleted %d files" % num_file_deleted)
     elif response == "NLOG":
         num_files = int(read_from_socket(sock, 10))
         klog("LOGOUT refused from directory, you are the source for %d files" % num_files)
     else:
         klog("LOGOUT not working correctly in directory")
     sock.close()
     return num_file_deleted
示例#3
0
 def add_file_to_tracker(self, file):
     my_tracker = UsersManager.get_tracker()
     sock = connect_socket(my_tracker.ip, my_tracker.port)
     local_ip = get_local_ip(sock.getsockname()[0])
     sock.send("ADDR" + UsersManager.get_my_session_id())
     sock.send(file.id)
     sock.send(format_filesize(file.file_size))
     sock.send(format_partsize(file.part_size))
     sock.send(format_filename(file.filename))
     try:
         response = read_from_socket(sock, 4)
         if response == "AADR":
             part_num = read_from_socket(sock, 8)
             if int(part_num) == int(file.parts_count):
                 klog("File %s successfully added to directory service" % file.filename)
             else:
                 klog("Wrong partnumber received from directory")
         else:
             klog("wrong ack received from directory service")
     except Exception, ex:
         klog("Exception in adding file to tracker: %s" % str(ex))
示例#4
0
    def register_part_to_tracker(self, file, part_num):
        my_tracker = UsersManager.get_tracker()
        sock = connect_socket(my_tracker.ip, my_tracker.port)
        local_ip = get_local_ip(sock.getsockname()[0])
        sock.send("RPAD" + UsersManager.get_my_session_id())
        sock.send(file.id)
        sock.send(format_partnum(part_num))

        try:
            response = read_from_socket(sock,4)
            if response == "APAD":
                part_num = int(read_from_socket(sock, 8))
                klog("Part num from tracker: %s" %str(part_num))
                if part_num == FilesManager.get_completed_file_parts_nums_count(file.id):
                    klog("Part succesfully registered")
                else:
                    klog("Wrong partnumber from directory received %s but i have %s" %(str(part_num), str(FilesManager.get_completed_file_parts_nums_count(file.id))))
            else:
                klog("Wrong ack received from directory service when trying to register a part")

        except Exception, ex:
            klog("Exception in registering a downloaded part on the tracker: %s" %str(ex))
示例#5
0
    def search_for_files(self, query):
        my_tracker = UsersManager.get_tracker()

        try:
            sock = connect_socket(my_tracker.ip, my_tracker.port)
            sock.send("LOOK" + UsersManager.get_my_session_id() + format_query(query))
            klog("Started LOOK for file: %s" %query)

            if read_from_socket(sock, 4) == 'ALOO':
                files_count = int(read_from_socket(sock, 3))
                for i in range(0, files_count):
                    file_id = read_from_socket(sock, 16)
                    file_name = read_from_socket(sock, 100).strip(' ')
                    file_size = read_from_socket(sock, 10)
                    part_size = read_from_socket(sock, 6)
                    FilesManager.add_new_remote_file(file_name, file_id, file_size, part_size)
                    self.ui_handler.add_new_result_file(file_name, file_id, file_size, part_size)

            else:
                raise Exception("Response command error: %s. Wanted LOOK" % response)

        except Exception, ex:
            klog(str(ex))