mirror of
				https://github.com/godotengine/godot.git
				synced 2025-10-26 03:04:31 +00:00 
			
		
		
		
	Fix local ip addresses (interfaces) detection.
Ignore non-IP addresses for both windows and unix
This commit is contained in:
		
							parent
							
								
									020f6a7f20
								
							
						
					
					
						commit
						a1c41be569
					
				
					 1 changed files with 11 additions and 4 deletions
				
			
		|  | @ -77,7 +77,7 @@ static IP_Address _sockaddr2ip(struct sockaddr *p_addr) { | ||||||
| 	if (p_addr->sa_family == AF_INET) { | 	if (p_addr->sa_family == AF_INET) { | ||||||
| 		struct sockaddr_in *addr = (struct sockaddr_in *)p_addr; | 		struct sockaddr_in *addr = (struct sockaddr_in *)p_addr; | ||||||
| 		ip.set_ipv4((uint8_t *)&(addr->sin_addr)); | 		ip.set_ipv4((uint8_t *)&(addr->sin_addr)); | ||||||
| 	} else { | 	} else if (p_addr->sa_family == AF_INET6) { | ||||||
| 		struct sockaddr_in6 *addr6 = (struct sockaddr_in6 *)p_addr; | 		struct sockaddr_in6 *addr6 = (struct sockaddr_in6 *)p_addr; | ||||||
| 		ip.set_ipv6(addr6->sin6_addr.s6_addr); | 		ip.set_ipv6(addr6->sin6_addr.s6_addr); | ||||||
| 	}; | 	}; | ||||||
|  | @ -180,14 +180,15 @@ void IP_Unix::get_local_addresses(List<IP_Address> *r_addresses) const { | ||||||
| 				SOCKADDR_IN *ipv4 = reinterpret_cast<SOCKADDR_IN *>(address->Address.lpSockaddr); | 				SOCKADDR_IN *ipv4 = reinterpret_cast<SOCKADDR_IN *>(address->Address.lpSockaddr); | ||||||
| 
 | 
 | ||||||
| 				ip.set_ipv4((uint8_t *)&(ipv4->sin_addr)); | 				ip.set_ipv4((uint8_t *)&(ipv4->sin_addr)); | ||||||
| 			} else { // ipv6
 | 				r_addresses->push_back(ip); | ||||||
|  | 
 | ||||||
|  | 			} else if (address->Address.lpSockaddr->sa_family == AF_INET6) { // ipv6
 | ||||||
| 
 | 
 | ||||||
| 				SOCKADDR_IN6 *ipv6 = reinterpret_cast<SOCKADDR_IN6 *>(address->Address.lpSockaddr); | 				SOCKADDR_IN6 *ipv6 = reinterpret_cast<SOCKADDR_IN6 *>(address->Address.lpSockaddr); | ||||||
| 
 | 
 | ||||||
| 				ip.set_ipv6(ipv6->sin6_addr.s6_addr); | 				ip.set_ipv6(ipv6->sin6_addr.s6_addr); | ||||||
| 			}; |  | ||||||
| 
 |  | ||||||
| 				r_addresses->push_back(ip); | 				r_addresses->push_back(ip); | ||||||
|  | 			}; | ||||||
| 
 | 
 | ||||||
| 			address = address->Next; | 			address = address->Next; | ||||||
| 		}; | 		}; | ||||||
|  | @ -205,6 +206,7 @@ void IP_Unix::get_local_addresses(List<IP_Address> *r_addresses) const { | ||||||
| 
 | 
 | ||||||
| 	struct ifaddrs *ifAddrStruct = NULL; | 	struct ifaddrs *ifAddrStruct = NULL; | ||||||
| 	struct ifaddrs *ifa = NULL; | 	struct ifaddrs *ifa = NULL; | ||||||
|  | 	int family; | ||||||
| 
 | 
 | ||||||
| 	getifaddrs(&ifAddrStruct); | 	getifaddrs(&ifAddrStruct); | ||||||
| 
 | 
 | ||||||
|  | @ -212,6 +214,11 @@ void IP_Unix::get_local_addresses(List<IP_Address> *r_addresses) const { | ||||||
| 		if (!ifa->ifa_addr) | 		if (!ifa->ifa_addr) | ||||||
| 			continue; | 			continue; | ||||||
| 
 | 
 | ||||||
|  | 		family = ifa->ifa_addr->sa_family; | ||||||
|  | 
 | ||||||
|  | 		if (family != AF_INET && family != AF_INET6) | ||||||
|  | 			continue; | ||||||
|  | 
 | ||||||
| 		IP_Address ip = _sockaddr2ip(ifa->ifa_addr); | 		IP_Address ip = _sockaddr2ip(ifa->ifa_addr); | ||||||
| 		r_addresses->push_back(ip); | 		r_addresses->push_back(ip); | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Fabio Alessandrelli
						Fabio Alessandrelli