AddressType enum
Пакет: com.hypixel.hytale.common.util
Файл: com/hypixel/hytale/common/util/NetworkUtil.java
Поля (1)
| Модификаторы | Тип | Имя |
|---|---|---|
|
private final Predicate<InetAddress> |
predicate |
Методы (1)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
abstract |
|
MC_ORG_LOCAL MC_ORG_LOCAL(InetAddress::isMCOrgLocal) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.common.util;
class="kw">import java.io.BufferedReader;
class="kw">import java.io.IOException;
class="kw">import java.net.Inet4Address;
class="kw">import java.net.Inet6Address;
class="kw">import java.net.InetAddress;
class="kw">import java.net.InetSocketAddress;
class="kw">import java.net.NetworkInterface;
class="kw">import java.net.SocketException;
class="kw">import java.net.UnknownHostException;
class="kw">import java.nio.charset.StandardCharsets;
class="kw">import java.nio.file.Files;
class="kw">import java.nio.file.Path;
class="kw">import java.util.Enumeration;
class="kw">import java.util.Locale;
class="kw">import java.util.function.Predicate;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">public class NetworkUtil {
class="kw">public class="kw">static Inet6Address ANY_IPV6_ADDRESS;
class="kw">public class="kw">static Inet4Address ANY_IPV4_ADDRESS;
class="kw">public class="kw">static Inet6Address LOOPBACK_IPV6_ADDRESS;
class="kw">public class="kw">static Inet4Address LOOPBACK_IPV4_ADDRESS;
class="kw">public NetworkUtil() {
}
@Nullable
class="kw">public class="kw">static InetAddress getFirstNonLoopbackAddress() class="kw">throws SocketException {
InetAddress var0 = null;
Enumeration var1 = NetworkInterface.getNetworkInterfaces();
while (var1.hasMoreElements()) {
NetworkInterface var2 = var1.nextElement();
if (!var2.isLoopback() && var2.isUp()) {
Enumeration var3 = var2.getInetAddresses();
while (var3.hasMoreElements()) {
InetAddress var4 = var3.nextElement();
if (!var4.isLoopbackAddress() && !var4.isAnyLocalAddress() && !var4.isLinkLocalAddress()) {
if (var4 class="kw">instanceof Inet4Address) {
class="kw">return var4;
}
if (var4 class="kw">instanceof Inet6Address && var0 == null) {
var0 = var4;
}
}
}
}
}
class="kw">return var0;
}
@Nullable
class="kw">public class="kw">static InetAddress getFirstAddressWith(NetworkUtil.AddressType... var0) class="kw">throws SocketException {
class="kw">return getFirstAddressWith(var0, null);
}
@Nullable
class="kw">public class="kw">static InetAddress getFirstAddressWithout(NetworkUtil.AddressType... var0) class="kw">throws SocketException {
class="kw">return getFirstAddressWith(null, var0);
}
@Nullable
class="kw">public class="kw">static InetAddress getFirstAddressWith(@Nullable NetworkUtil.AddressType[] var0, @Nullable NetworkUtil.AddressType[] var1) class="kw">throws SocketException {
InetAddress var2 = null;
Enumeration var3 = NetworkInterface.getNetworkInterfaces();
while (var3.hasMoreElements()) {
NetworkInterface var4 = var3.nextElement();
if (!var4.isLoopback() && var4.isUp()) {
Enumeration var5 = var4.getInetAddresses();
label70:
while (var5.hasMoreElements()) {
InetAddress var6 = var5.nextElement();
if (var0 != null) {
for (NetworkUtil.AddressType var10 : var0) {
if (!var10.predicate.test(var6)) {
class="kw">continue label70;
}
}
}
if (var1 != null) {
for (NetworkUtil.AddressType var14 : var1) {
if (var14.predicate.test(var6)) {
class="kw">continue label70;
}
}
}
if (var6 class="kw">instanceof Inet4Address) {
class="kw">return var6;
}
if (var6 class="kw">instanceof Inet6Address && var2 == null) {
var2 = var6;
}
}
}
}
class="kw">return var2;
}
class="kw">public class="kw">static boolean addressMatchesAll(InetAddress var0, @Nonnull NetworkUtil.AddressType... var1) {
for (NetworkUtil.AddressType var5 : var1) {
if (!var5.predicate.test(var0)) {
class="kw">return false;
}
}
class="kw">return true;
}
class="kw">public class="kw">static boolean addressMatchesAny(InetAddress var0) {
class="kw">return addressMatchesAny(var0, NetworkUtil.AddressType.values());
}
class="kw">public class="kw">static boolean addressMatchesAny(InetAddress var0, @Nonnull NetworkUtil.AddressType... var1) {
for (NetworkUtil.AddressType var5 : var1) {
if (var5.predicate.test(var0)) {
class="kw">return true;
}
}
class="kw">return false;
}
@Nonnull
class="kw">public class="kw">static String toSocketString(@Nonnull InetSocketAddress var0) {
String var3;
if (var0.getAddress() class="kw">instanceof Inet6Address) {
String var2 = var0.getHostString();
if (var2.indexOf(58) >= 0) {
var3 = "[" + var2 + "]";
} else {
var3 = var2;
}
var3 = var3 + ":" + var0.getPort();
} else {
var3 = var0.getHostString() + ":" + var0.getPort();
}
class="kw">return var3;
}
@Nullable
class="kw">public class="kw">static String getHostName() {
String var0 = null;
try {
InetAddress var1 = InetAddress.getLocalHost();
var0 = var1.getHostName();
if (isAcceptableHostName(var0)) {
class="kw">return var0;
}
String var2 = var1.getCanonicalHostName();
if (isAcceptableHostName(var2)) {
class="kw">return var2;
}
} catch (UnknownHostException var10) {
}
String var13 = System.getenv("HOSTNAME");
if (isAcceptableHostName(var13)) {
class="kw">return var13;
}
var13 = System.getenv("COMPUTERNAME");
if (isAcceptableHostName(var13)) {
class="kw">return var13;
}
var13 = firstLineIfExists("/etc/hostname");
if (isAcceptableHostName(var13)) {
class="kw">return var13;
}
var13 = firstLineIfExists("/proc/sys/kernel/hostname");
if (isAcceptableHostName(var13)) {
class="kw">return var13;
}
try {
Enumeration var17 = NetworkInterface.getNetworkInterfaces();
while (var17.hasMoreElements()) {
NetworkInterface var3 = var17.nextElement();
if (var3.isUp() && !var3.isLoopback() && !var3.isPointToPoint()) {
String var4 = var3.getName().toLowerCase(Locale.ROOT);
if (!var4.startsWith("lo")
&& !var4.startsWith("docker")
&& !var4.startsWith("br-")
&& !var4.startsWith("veth")
&& !var4.startsWith("virbr")
&& !var4.startsWith("utun")
&& !var4.startsWith("wg")
&& !var4.startsWith("zt")) {
Enumeration var5 = var3.getInetAddresses();
while (var5.hasMoreElements()) {
InetAddress var6 = var5.nextElement();
if (!var6.isLoopbackAddress() && !var6.isLinkLocalAddress() && !var6.isAnyLocalAddress()) {
String var7 = var6.getHostAddress();
String var8 = var6.getHostName();
if (var8 != null && !var8.equals(var7) && isAcceptableHostName(var8)) {
class="kw">return var8;
}
String var9 = var6.getCanonicalHostName();
if (var9 != null && !var9.equals(var7) && isAcceptableHostName(var9)) {
class="kw">return var9;
}
}
}
}
}
}
} catch (SocketException var11) {
}
class="kw">return null;
}
@Nullable
class="kw">private class="kw">static String firstLineIfExists(String var0) {
try {
Path var1 = Path.of(var0);
if (!Files.isRegularFile(var1)) {
class="kw">return null;
}
try (BufferedReader var2 = Files.newBufferedReader(var1, StandardCharsets.UTF_8)) {
String var3 = var2.readLine();
class="kw">return var3 == null ? null : var3.trim();
}
} catch (IOException var7) {
class="kw">return null;
}
}
class="kw">private class="kw">static boolean isAcceptableHostName(@Nullable String var0) {
if (var0 == null) {
class="kw">return false;
} else {
var0 = var0.trim();
if (var0.isEmpty()) {
class="kw">return false;
} else {
String var1 = var0.toLowerCase(Locale.ROOT);
if (isIPv4Literal(var1) || isLikelyIPv6Literal(var1)) {
class="kw">return false;
} else if ("localhost".equals(var1) || "ip6-localhost".equals(var1) || "ip6-loopback".equals(var1) || "docker-desktop".equals(var1)) {
class="kw">return false;
} else {
class="kw">return !var1.contains("docker") && !var1.contains("wsl") && !var1.endsWith(".internal") && !var1.endsWith(".localdomain")
? !var1.endsWith(".local")
: false;
}
}
}
}
class="kw">private class="kw">static boolean isIPv4Literal(@Nonnull String var0) {
int var1 = 0;
int var2 = -1;
int var3 = 0;
for (int var4 = 0; var4 < var0.length(); var4++) {
char var5 = var0.charAt(var4);
if (var5 >= '0' && var5 <= '9') {
if (var2 == -1) {
var2 = 0;
}
var3 = var3 * 10 + (var5 - '0');
if (var3 > 255) {
class="kw">return false;
}
if (++var2 > 3) {
class="kw">return false;
}
} else {
if (var5 != '.') {
class="kw">return false;
}
if (var2 <= 0) {
class="kw">return false;
}
var1++;
var2 = -1;
var3 = 0;
if (var1 > 3) {
class="kw">return false;
}
}
}
class="kw">return var1 == 3 && var2 > 0;
}
class="kw">private class="kw">static boolean isLikelyIPv6Literal(@Nonnull String var0) {
boolean var1 = false;
for (int var2 = 0; var2 < var0.length(); var2++) {
char var3 = var0.charAt(var2);
if (var3 == ':') {
var1 = true;
} else if ((var3 < '0' || var3 > '9') && (var3 < 'a' || var3 > 'f') && (var3 < 'A' || var3 > 'F')) {
class="kw">return false;
}
}
class="kw">return var1;
}
class="kw">static {
try {
ANY_IPV6_ADDRESS = Inet6Address.getByAddress("::", new byte[16], null);
ANY_IPV4_ADDRESS = (Inet4Address)Inet4Address.getByAddress("0.0.0.0", new byte[4]);
LOOPBACK_IPV6_ADDRESS = Inet6Address.getByAddress("::1", new byte[]{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, null);
LOOPBACK_IPV4_ADDRESS = (Inet4Address)Inet4Address.getByAddress("127.0.0.1", new byte[]{127, 0, 0, 1});
} catch (UnknownHostException var1) {
throw new RuntimeException(var1);
}
}
class="kw">public enum AddressType {
MULTICAST(InetAddress::isMulticastAddress),
ANY_LOCAL(InetAddress::isAnyLocalAddress),
LOOPBACK(InetAddress::isLoopbackAddress),
LINK_LOCAL(InetAddress::isLinkLocalAddress),
SITE_LOCAL(InetAddress::isSiteLocalAddress),
MC_GLOBAL(InetAddress::isMCGlobal),
MC_SITE_LOCAL(InetAddress::isMCSiteLocal),
MC_ORG_LOCAL(InetAddress::isMCOrgLocal);
class="kw">private class="kw">final Predicate<InetAddress> predicate;
AddressType(Predicate<InetAddress> nullxx) {
this.predicate = nullxx;
}
}
}