001 package net.minecraft.client.multiplayer; 002 003 import cpw.mods.fml.relauncher.Side; 004 import cpw.mods.fml.relauncher.SideOnly; 005 import java.util.Hashtable; 006 import javax.naming.directory.Attributes; 007 import javax.naming.directory.InitialDirContext; 008 009 @SideOnly(Side.CLIENT) 010 public class ServerAddress 011 { 012 private final String ipAddress; 013 private final int serverPort; 014 015 private ServerAddress(String par1Str, int par2) 016 { 017 this.ipAddress = par1Str; 018 this.serverPort = par2; 019 } 020 021 public String getIP() 022 { 023 return this.ipAddress; 024 } 025 026 public int getPort() 027 { 028 return this.serverPort; 029 } 030 031 public static ServerAddress func_78860_a(String par0Str) 032 { 033 if (par0Str == null) 034 { 035 return null; 036 } 037 else 038 { 039 String[] var1 = par0Str.split(":"); 040 041 if (par0Str.startsWith("[")) 042 { 043 int var2 = par0Str.indexOf("]"); 044 045 if (var2 > 0) 046 { 047 String var3 = par0Str.substring(1, var2); 048 String var4 = par0Str.substring(var2 + 1).trim(); 049 050 if (var4.startsWith(":") && var4.length() > 0) 051 { 052 var4 = var4.substring(1); 053 var1 = new String[] {var3, var4}; 054 } 055 else 056 { 057 var1 = new String[] {var3}; 058 } 059 } 060 } 061 062 if (var1.length > 2) 063 { 064 var1 = new String[] {par0Str}; 065 } 066 067 String var5 = var1[0]; 068 int var6 = var1.length > 1 ? parseIntWithDefault(var1[1], 25565) : 25565; 069 070 if (var6 == 25565) 071 { 072 String[] var7 = getServerAddress(var5); 073 var5 = var7[0]; 074 var6 = parseIntWithDefault(var7[1], 25565); 075 } 076 077 return new ServerAddress(var5, var6); 078 } 079 } 080 081 /** 082 * Returns a server's address and port for the specified hostname, looking up the SRV record if possible 083 */ 084 private static String[] getServerAddress(String par0Str) 085 { 086 try 087 { 088 Class.forName("com.sun.jndi.dns.DnsContextFactory"); 089 Hashtable var2 = new Hashtable(); 090 var2.put("java.naming.factory.initial", "com.sun.jndi.dns.DnsContextFactory"); 091 var2.put("java.naming.provider.url", "dns:"); 092 InitialDirContext var3 = new InitialDirContext(var2); 093 Attributes var4 = var3.getAttributes("_minecraft._tcp." + par0Str, new String[] {"SRV"}); 094 String[] var5 = var4.get("srv").get().toString().split(" ", 4); 095 return new String[] {var5[3], var5[2]}; 096 } 097 catch (Throwable var6) 098 { 099 return new String[] {par0Str, Integer.toString(25565)}; 100 } 101 } 102 103 private static int parseIntWithDefault(String par0Str, int par1) 104 { 105 try 106 { 107 return Integer.parseInt(par0Str.trim()); 108 } 109 catch (Exception var3) 110 { 111 return par1; 112 } 113 } 114 }