示例#1
0
 def unregister_file(self, file):
     my_superpeer = UsersManager.get_superpeer()
     sock = connect_socket(my_superpeer.ip, 80)#my_superpeer.port)
     local_ip = get_local_ip(sock.getsockname()[0])
     sock.send("DEFF" + UsersManager.get_my_session_id())
     sock.send(decode_md5(file.hash))
     sock.close()
示例#2
0
    def search_for_files(self, query, ttl = TTL_FOR_FILES_SEARCH ):
        p_id = generate_packet_id(16)
        PacketsManager.add_new_generated_packet(p_id)

        if UsersManager.is_super_node():
            # We need to search both locally and in the network
            PacketsManager.register_packet_id_as_local_search(p_id)

            # Perform a local search here.
            for file in FilesManager.find_files_by_query(query):
                owner = UsersManager.find_user_by_session_id(file.session_id)
                if owner:
                    self.ui_handler.add_new_result_file(file.filename, owner.ip, owner.port, file.hash)

            # ...and send a QUER in the network, its results will be handled properly and should not interfere with
            # the ones of the local search
            for superpeer in PeersManager.find_known_peers():
                sock = connect_socket(superpeer.ip, superpeer.port)
                local_ip = get_local_ip(sock.getsockname()[0])
                sock.send("QUER" + p_id + format_ip_address(local_ip) + format_port_number(self.local_port) + format_ttl(ttl) + format_query(query))
                sock.close()
            klog("Started query flooding for files: %s ttl: %s" %(query,ttl) )
        else:
            my_superpeer = UsersManager.get_superpeer()
            if my_superpeer:
                sock = connect_socket(my_superpeer.ip, 80)#my_superpeer.port)
                sock.send("FIND" + UsersManager.get_my_session_id() + format_query(query))
                klog("Started FIND for files: %s ttl: %s" %(query,ttl) )
                # We need also some handling for those stupid peers that do not close the socket...
                #time.sleep(5)
                if read_from_socket(sock, 4) == 'AFIN':
                    ServiceThread.afin_received(sock, self.ui_handler)
示例#3
0
 def logout(self):
     my_superpeer = UsersManager.get_superpeer()
     sock = connect_socket(my_superpeer.ip, 80)#my_superpeer.port)
     sock.send("LOGO" + UsersManager.get_my_session_id())
     response = read_from_socket(sock, 4)
     num_file_deleted = -1
     if response == "ALGO":
         num_file_deleted = int(read_from_socket(sock, 3))
         klog("LOGOUT Done. Deleted %d files" % num_file_deleted)
     else:
         klog("LOGOUT non eseguito")
     sock.close()
     return num_file_deleted