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()
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)
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