aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/com/juick/xmpp/s2s/DNSQueries.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/juick/xmpp/s2s/DNSQueries.java')
-rw-r--r--src/main/java/com/juick/xmpp/s2s/DNSQueries.java46
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);
+ }
+}