forked from KNEMC/KLALB
UPDATE 2.2
This commit is contained in:
@@ -0,0 +1,119 @@
|
||||
package org.kne.cloud.network.minecraft;
|
||||
|
||||
import java.net.IDN;
|
||||
import java.util.Hashtable;
|
||||
import javax.naming.directory.Attributes;
|
||||
import javax.naming.directory.DirContext;
|
||||
import javax.naming.directory.InitialDirContext;
|
||||
|
||||
import org.kne.cloud.network.MultipurposeSocketAddress;
|
||||
|
||||
public class MinecraftServerAddress extends MultipurposeSocketAddress
|
||||
{
|
||||
|
||||
private String originAddr;
|
||||
private int originPort;
|
||||
private String originStr;
|
||||
public int getOriginPort() {
|
||||
return originPort;
|
||||
}
|
||||
public String getOriginAddr() {
|
||||
return originAddr;
|
||||
}
|
||||
public String toOriginString() {
|
||||
return originStr;
|
||||
}
|
||||
private MinecraftServerAddress(String ip, int port,String originaddr, int originPort, String addr)
|
||||
{
|
||||
super(IDN.toASCII(ip),port);
|
||||
this.originAddr=originaddr;
|
||||
this.originPort=originPort;
|
||||
this.originStr=addr;
|
||||
}
|
||||
public static MinecraftServerAddress findAddress(String addr)
|
||||
{
|
||||
if (addr == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
else
|
||||
{
|
||||
String[] astring = addr.split(":");
|
||||
|
||||
if (addr.startsWith("["))
|
||||
{
|
||||
int i = addr.indexOf("]");
|
||||
|
||||
if (i > 0)
|
||||
{
|
||||
String s = addr.substring(1, i);
|
||||
String s1 = addr.substring(i + 1).trim();
|
||||
|
||||
if (s1.startsWith(":") && s1.length() > 0)
|
||||
{
|
||||
s1 = s1.substring(1);
|
||||
astring = new String[] {s, s1};
|
||||
}
|
||||
else
|
||||
{
|
||||
astring = new String[] {s};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (astring.length > 2)
|
||||
{
|
||||
astring = new String[] {addr};
|
||||
}
|
||||
|
||||
String s2 = astring[0];
|
||||
String oaddr=s2;
|
||||
int j = astring.length > 1 ? parseIntWithDefault(astring[1], 25565) : 25565;
|
||||
int oport=j;
|
||||
if (j == 25565)
|
||||
{
|
||||
String[] astring1 = getServerAddress(s2);
|
||||
s2 = astring1[0];
|
||||
j = parseIntWithDefault(astring1[1], 25565);
|
||||
}
|
||||
|
||||
return new MinecraftServerAddress(s2, j,oaddr,oport,addr);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a server's address and port for the specified hostname, looking up the SRV record if possible
|
||||
*/
|
||||
private static String[] getServerAddress(String p_78863_0_)
|
||||
{
|
||||
try
|
||||
{
|
||||
String s = "com.sun.jndi.dns.DnsContextFactory";
|
||||
Class.forName("com.sun.jndi.dns.DnsContextFactory");
|
||||
Hashtable<String, String> 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");
|
||||
DirContext dircontext = new InitialDirContext(hashtable);
|
||||
Attributes attributes = dircontext.getAttributes("_minecraft._tcp." + p_78863_0_, new String[] {"SRV"});
|
||||
String[] astring = attributes.get("srv").get().toString().split(" ", 4);
|
||||
return new String[] {astring[3], astring[2]};
|
||||
}
|
||||
catch (Throwable var6)
|
||||
{
|
||||
return new String[] {p_78863_0_, Integer.toString(25565)};
|
||||
}
|
||||
}
|
||||
|
||||
private static int parseIntWithDefault(String str, int def)
|
||||
{
|
||||
try
|
||||
{
|
||||
return Integer.parseInt(str.trim());
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
return def;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user