diff options
author | Vitaly Takmazov | 2016-07-07 15:13:47 +0300 |
---|---|---|
committer | Vitaly Takmazov | 2016-07-07 15:13:47 +0300 |
commit | e5c8298beee5dde90ca98cc4707faac4bf0e2f0c (patch) | |
tree | 10178a0103ae8ac17849e56914b87b0ee681d0ba /juick-www/src/main/java/com/juick/xmpp/s2s/DNSQueries.java | |
parent | d85424021a63c1519e18bd6518ad3424de61fb9f (diff) |
reorganize project
Diffstat (limited to 'juick-www/src/main/java/com/juick/xmpp/s2s/DNSQueries.java')
-rw-r--r-- | juick-www/src/main/java/com/juick/xmpp/s2s/DNSQueries.java | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/juick-www/src/main/java/com/juick/xmpp/s2s/DNSQueries.java b/juick-www/src/main/java/com/juick/xmpp/s2s/DNSQueries.java new file mode 100644 index 00000000..e4c5f085 --- /dev/null +++ b/juick-www/src/main/java/com/juick/xmpp/s2s/DNSQueries.java @@ -0,0 +1,47 @@ +package com.juick.xmpp.s2s; + +import java.net.InetSocketAddress; +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 InetSocketAddress 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 InetSocketAddress(host, port); + } +} |