def get_online_file_owner(cls, my_uid, file_hash): assert len(file_hash) > 0 assert my_uid >= 0 online_owners = filter(UserIPCache.user_online, ResourcesCache.get_resource_owners(file_hash)) # if online_owners.count(my_uid): # remove myself # online_owners.remove(my_uid) if (UserIPCache.user_online(my_uid)): my_ip = UserIPCache.get_user_ip(my_uid) is_ipv4 = IP.is_valid_ipv4_address(my_ip) if is_ipv4: same_ip_users = filter(lambda user: UserIPCache.get_user_ip(user) == my_ip, online_owners) v4_owners = [user for user in same_ip_users if IP.is_valid_ipv4_address(HttpServerInfoCache.get_user_ipv4(user))] grep_owners = [{"uid": user, "host": HttpServerInfoCache.get_user_ipv4(user), "port": 8884} for user in v4_owners] return grep_owners else: v6_owners = [user for user in online_owners if IP.is_valid_ipv6_address(HttpServerInfoCache.get_user_ipv6(user))] grep_owners = [{"uid": user, "host": HttpServerInfoCache.get_user_ipv6(user), "port": 8886} for user in v6_owners] return grep_owners else: return []
def get_matched_online_owners(cls, my_uid, res_users, allowV4Download=False, need_romove_self=False): assert my_uid > 0 online_owners = filter(UserIPCache.user_online, res_users) if need_romove_self: if online_owners.count(my_uid): # remove myself online_owners.remove(my_uid) if len(online_owners): if (UserIPCache.user_online(my_uid)): shouldCheckV4 = True my_ipv6_addrs = HttpServerInfoCache.get_user_ipv6(my_uid) if isinstance(my_ipv6_addrs, set): assert len(my_ipv6_addrs) > 0 v6_owners = [] for user in online_owners: v6_addrs = HttpServerInfoCache.get_user_ipv6(user) if isinstance(v6_addrs, set): for addr in v6_addrs: if isinstance(addr, Address): assert IP.is_valid_ipv6_address( addr.get_host()) v6_owners.append({ "uid": user, "host": addr.get_host(), "port": addr.get_port() }) else: assert IP.is_valid_ipv6_address(addr) v6_owners.append({ "uid": user, "host": addr, "port": 8886 }) if len(v6_owners): return { "owners": v6_owners, "download_type": cls.download_type["V6"] } elif not allowV4Download: shouldCheckV4 = False if shouldCheckV4: my_ipv4 = UserIPCache.get_user_ip(my_uid) assert IP.is_valid_ipv4_address(my_ipv4) same_ip_users = filter( lambda user: UserIPCache.get_user_ip(user) == my_ipv4, online_owners) if len(same_ip_users): # LAN USER v4_owners = [] for user in same_ip_users: addr = HttpServerInfoCache.get_user_ipv4(user) if addr is not None: if isinstance(addr, Address): if IP.is_valid_ipv4_address( addr.get_host()): v4_owners.append(user) else: if IP.is_valid_ipv4_address(addr): v4_owners.append(user) grep_owners = [] for user in v4_owners: addr = HttpServerInfoCache.get_user_ipv4(user) if addr is not None: if isinstance(addr, Address): grep_owners.append({ "uid": user, "host": addr.get_host(), "port": addr.get_port() }) else: grep_owners.append({ "uid": user, "host": addr, "port": 8884 }) return { "owners": grep_owners, "download_type": cls.download_type["V4_LAN"] } else: # NAT USER #V4 user cant download v6's resource return { "owners": [], "download_type": cls.download_type["None"] } # TODO # valid_v4_owners = [user for user in online_owners if # IP.is_valid_ipv4_address(UserIPCache.get_user_ip( # user))] #and not isinstance(HttpServerInfoCache.get_user_ipv6(user),set)] # grep_owners = [{"uid": user, "host": UserIPCache.get_user_ip(user), "port": 8884} for user in # valid_v4_owners] #CAUTION: if user has a external IP, he cant open local LAN server. SO there must use get_user_ip, but not get_user_ipv4 # return {"owners": grep_owners, "download_type": cls.download_type["V4_NAT"]} else: return { "owners": [], "download_type": cls.download_type["V4_NOT_ALLOW"] } else: return { "owners": [], "download_type": cls.download_type["None"] } else: return {"owners": [], "download_type": cls.download_type["None"]}
def get_matched_online_owners(cls, my_uid, res_users, allowV4Download=False, need_romove_self=False): assert my_uid > 0 online_owners = filter(UserIPCache.user_online, res_users) if need_romove_self: if online_owners.count(my_uid): # remove myself online_owners.remove(my_uid) if len(online_owners): if (UserIPCache.user_online(my_uid)): shouldCheckV4 = True my_ipv6_addrs = HttpServerInfoCache.get_user_ipv6(my_uid) if isinstance(my_ipv6_addrs, set): assert len(my_ipv6_addrs) > 0 v6_owners = [] for user in online_owners: v6_addrs = HttpServerInfoCache.get_user_ipv6(user) if isinstance(v6_addrs, set): for addr in v6_addrs: if isinstance(addr, Address): assert IP.is_valid_ipv6_address(addr.get_host()) v6_owners.append({"uid": user, "host": addr.get_host(), "port": addr.get_port()}) else: assert IP.is_valid_ipv6_address(addr) v6_owners.append({"uid": user, "host": addr, "port": 8886}) if len(v6_owners): return {"owners": v6_owners, "download_type": cls.download_type["V6"]} elif not allowV4Download: shouldCheckV4 = False if shouldCheckV4: my_ipv4 = UserIPCache.get_user_ip(my_uid) assert IP.is_valid_ipv4_address(my_ipv4) same_ip_users = filter(lambda user: UserIPCache.get_user_ip(user) == my_ipv4, online_owners) if len(same_ip_users): # LAN USER v4_owners = [] for user in same_ip_users: addr = HttpServerInfoCache.get_user_ipv4(user) if addr is not None: if isinstance(addr, Address): if IP.is_valid_ipv4_address(addr.get_host()): v4_owners.append(user) else: if IP.is_valid_ipv4_address(addr): v4_owners.append(user) grep_owners = [] for user in v4_owners: addr = HttpServerInfoCache.get_user_ipv4(user) if addr is not None: if isinstance(addr, Address): grep_owners.append({"uid": user, "host": addr.get_host(), "port": addr.get_port()}) else: grep_owners.append({"uid": user, "host": addr, "port": 8884}) return {"owners": grep_owners, "download_type": cls.download_type["V4_LAN"]} else: # NAT USER #V4 user cant download v6's resource return {"owners": [], "download_type": cls.download_type["None"]} # TODO # valid_v4_owners = [user for user in online_owners if # IP.is_valid_ipv4_address(UserIPCache.get_user_ip( # user))] #and not isinstance(HttpServerInfoCache.get_user_ipv6(user),set)] # grep_owners = [{"uid": user, "host": UserIPCache.get_user_ip(user), "port": 8884} for user in # valid_v4_owners] #CAUTION: if user has a external IP, he cant open local LAN server. SO there must use get_user_ip, but not get_user_ipv4 # return {"owners": grep_owners, "download_type": cls.download_type["V4_NAT"]} else: return {"owners": [], "download_type": cls.download_type["V4_NOT_ALLOW"]} else: return {"owners": [], "download_type": cls.download_type["None"]} else: return {"owners": [], "download_type": cls.download_type["None"]}