diff options
Diffstat (limited to 'src/main/java/com/juick/xmpp/s2s/DNSQueries.java')
-rw-r--r-- | src/main/java/com/juick/xmpp/s2s/DNSQueries.java | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/src/main/java/com/juick/xmpp/s2s/DNSQueries.java b/src/main/java/com/juick/xmpp/s2s/DNSQueries.java new file mode 100644 index 00000000..2b2d60e0 --- /dev/null +++ b/src/main/java/com/juick/xmpp/s2s/DNSQueries.java @@ -0,0 +1,46 @@ +package com.juick.xmpp.s2s; + +import java.net.UnknownHostException; +import java.util.Hashtable; +import java.util.Random; +import javax.naming.NamingException; +import javax.naming.directory.Attribute; +import javax.naming.directory.DirContext; +import javax.naming.directory.InitialDirContext; + +/** + * + * @author ugnich + */ +public class DNSQueries { + + private static Random rand = new Random(); + + public static HostnamePort getServerAddress(String hostname) throws UnknownHostException { + + String host = hostname; + int port = 5269; + + try { + Hashtable<String, String> env = new Hashtable<String, String>(5); + env.put("java.naming.factory.initial", "com.sun.jndi.dns.DnsContextFactory"); + DirContext ctx = new InitialDirContext(env); + Attribute att = ctx.getAttributes("_xmpp-server._tcp." + hostname, new String[]{"SRV"}).get("SRV"); + + if (att != null && att.size() > 0) { + int i = rand.nextInt(att.size()); + try { + String srv[] = att.get(i).toString().split(" "); + port = Integer.parseInt(srv[2]); + host = srv[3]; + } catch (Exception e) { + } + } + + ctx.close(); + } catch (NamingException e) { + } + + return new HostnamePort(host, port); + } +} |