package net.minecraft.client.multiplayer; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import java.util.Hashtable; import javax.naming.directory.Attributes; import javax.naming.directory.InitialDirContext; @SideOnly(Side.CLIENT) public class ServerAddress { private final String ipAddress; private final int serverPort; private ServerAddress(String par1Str, int par2) { this.ipAddress = par1Str; this.serverPort = par2; } public String getIP() { return this.ipAddress; } public int getPort() { return this.serverPort; } public static ServerAddress func_78860_a(String par0Str) { if (par0Str == null) { return null; } else { String[] astring = par0Str.split(":"); if (par0Str.startsWith("[")) { int i = par0Str.indexOf("]"); if (i > 0) { String s1 = par0Str.substring(1, i); String s2 = par0Str.substring(i + 1).trim(); if (s2.startsWith(":") && s2.length() > 0) { s2 = s2.substring(1); astring = new String[] {s1, s2}; } else { astring = new String[] {s1}; } } } if (astring.length > 2) { astring = new String[] {par0Str}; } String s3 = astring[0]; int j = astring.length > 1 ? parseIntWithDefault(astring[1], 25565) : 25565; if (j == 25565) { String[] astring1 = getServerAddress(s3); s3 = astring1[0]; j = parseIntWithDefault(astring1[1], 25565); } return new ServerAddress(s3, j); } } /** * Returns a server's address and port for the specified hostname, looking up the SRV record if possible */ private static String[] getServerAddress(String par0Str) { try { Class.forName("com.sun.jndi.dns.DnsContextFactory"); Hashtable hashtable = new Hashtable(); hashtable.put("java.naming.factory.initial", "com.sun.jndi.dns.DnsContextFactory"); hashtable.put("java.naming.provider.url", "dns:"); hashtable.put("com.sun.jndi.dns.timeout.retries", "1"); InitialDirContext initialdircontext = new InitialDirContext(hashtable); Attributes attributes = initialdircontext.getAttributes("_minecraft._tcp." + par0Str, new String[] {"SRV"}); String[] astring = attributes.get("srv").get().toString().split(" ", 4); return new String[] {astring[3], astring[2]}; } catch (Throwable throwable) { return new String[] {par0Str, Integer.toString(25565)}; } } private static int parseIntWithDefault(String par0Str, int par1) { try { return Integer.parseInt(par0Str.trim()); } catch (Exception exception) { return par1; } } }