Example #1
0
 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 []
Example #2
0
 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"]}
Example #3
0
 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"]}