001 package net.minecraft.src;
002
003 import cpw.mods.fml.common.Side;
004 import cpw.mods.fml.common.asm.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 = func_78863_b(var5);
073 var5 = var7[0];
074 var6 = parseIntWithDefault(var7[1], 25565);
075 }
076
077 return new ServerAddress(var5, var6);
078 }
079 }
080
081 private static String[] func_78863_b(String par0Str)
082 {
083 try
084 {
085 Hashtable var1 = new Hashtable();
086 var1.put("java.naming.factory.initial", "com.sun.jndi.dns.DnsContextFactory");
087 var1.put("java.naming.provider.url", "dns:");
088 InitialDirContext var2 = new InitialDirContext(var1);
089 Attributes var3 = var2.getAttributes("_minecraft._tcp." + par0Str, new String[] {"SRV"});
090 String[] var4 = var3.get("srv").get().toString().split(" ", 4);
091 return new String[] {var4[3], var4[2]};
092 }
093 catch (Throwable var5)
094 {
095 return new String[] {par0Str, Integer.toString(25565)};
096 }
097 }
098
099 private static int parseIntWithDefault(String par0Str, int par1)
100 {
101 try
102 {
103 return Integer.parseInt(par0Str.trim());
104 }
105 catch (Exception var3)
106 {
107 return par1;
108 }
109 }
110 }