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    }