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;
      }
   }
}