diff --git a/smack-core/src/main/java/org/jivesoftware/smack/util/DNSUtil.java b/smack-core/src/main/java/org/jivesoftware/smack/util/DNSUtil.java index dcd2d60de..b241b7d3d 100644 --- a/smack-core/src/main/java/org/jivesoftware/smack/util/DNSUtil.java +++ b/smack-core/src/main/java/org/jivesoftware/smack/util/DNSUtil.java @@ -85,24 +85,19 @@ public class DNSUtil { } /** - * Returns a list of HostAddresses under which the specified XMPP server can be - * reached at for client-to-server communication. A DNS lookup for a SRV - * record in the form "_xmpp-client._tcp.example.com" is attempted, according - * to section 14.4 of RFC 3920. If that lookup fails, a lookup in the older form - * of "_jabber._tcp.example.com" is attempted since servers that implement an - * older version of the protocol may be listed using that notation. If that - * lookup fails as well, it's assumed that the XMPP server lives at the - * host resolved by a DNS lookup at the specified domain on the default port - * of 5222.

- * + * Returns a list of HostAddresses under which the specified XMPP server can be reached at for client-to-server + * communication. A DNS lookup for a SRV record in the form "_xmpp-client._tcp.example.com" is attempted, according + * to section 3.2.1 of RFC 6120. If that lookup fails, it's assumed that the XMPP server lives at the host resolved + * by a DNS lookup at the specified domain on the default port of 5222. + *

* As an example, a lookup for "example.com" may return "im.example.com:5269". + *

* * @param domain the domain. - * @return List of HostAddress, which encompasses the hostname and port that the - * XMPP server can be reached at for the specified domain. - * @throws Exception + * @return List of HostAddress, which encompasses the hostname and port that the XMPP server can be reached at for + * the specified domain. */ - public static List resolveXMPPDomain(final String domain) throws Exception { + public static List resolveXMPPDomain(final String domain) { if (dnsResolver == null) { List addresses = new ArrayList(1); addresses.add(new HostAddress(domain, 5222)); @@ -112,24 +107,19 @@ public class DNSUtil { } /** - * Returns a list of HostAddresses under which the specified XMPP server can be - * reached at for server-to-server communication. A DNS lookup for a SRV - * record in the form "_xmpp-server._tcp.example.com" is attempted, according - * to section 14.4 of RFC 3920. If that lookup fails, a lookup in the older form - * of "_jabber._tcp.example.com" is attempted since servers that implement an - * older version of the protocol may be listed using that notation. If that - * lookup fails as well, it's assumed that the XMPP server lives at the - * host resolved by a DNS lookup at the specified domain on the default port - * of 5269.

- * + * Returns a list of HostAddresses under which the specified XMPP server can be reached at for server-to-server + * communication. A DNS lookup for a SRV record in the form "_xmpp-server._tcp.example.com" is attempted, according + * to section 3.2.1 of RFC 6120. If that lookup fails , it's assumed that the XMPP server lives at the host resolved + * by a DNS lookup at the specified domain on the default port of 5269. + *

* As an example, a lookup for "example.com" may return "im.example.com:5269". + *

* * @param domain the domain. - * @return List of HostAddress, which encompasses the hostname and port that the - * XMPP server can be reached at for the specified domain. - * @throws Exception + * @return List of HostAddress, which encompasses the hostname and port that the XMPP server can be reached at for + * the specified domain. */ - public static List resolveXMPPServerDomain(final String domain) throws Exception { + public static List resolveXMPPServerDomain(final String domain) { if (dnsResolver == null) { List addresses = new ArrayList(1); addresses.add(new HostAddress(domain, 5269)); @@ -138,7 +128,7 @@ public class DNSUtil { return resolveDomain(domain, 's'); } - private static List resolveDomain(String domain, char keyPrefix) throws Exception { + private static List resolveDomain(String domain, char keyPrefix) { List addresses = new ArrayList(); // Step one: Do SRV lookups @@ -150,15 +140,21 @@ public class DNSUtil { } else { srvDomain = domain; } - List srvRecords = dnsResolver.lookupSRVRecords(srvDomain); - if (LOGGER.isLoggable(Level.FINE)) { - String logMessage = "Resolved SRV RR for " + srvDomain + ":"; - for (SRVRecord r : srvRecords) - logMessage += " " + r; - LOGGER.fine(logMessage); + try { + List srvRecords = dnsResolver.lookupSRVRecords(srvDomain); + if (LOGGER.isLoggable(Level.FINE)) { + String logMessage = "Resolved SRV RR for " + srvDomain + ":"; + for (SRVRecord r : srvRecords) + logMessage += " " + r; + LOGGER.fine(logMessage); + } + List sortedRecords = sortSRVRecords(srvRecords); + addresses.addAll(sortedRecords); + } + catch (Exception e) { + LOGGER.log(Level.WARNING, "Exception while resovling SRV records for " + domain + + ". Consider adding '_xmpp-(server|client)._tcp' DNS SRV Records"); } - List sortedRecords = sortSRVRecords(srvRecords); - addresses.addAll(sortedRecords); // Step two: Add the hostname to the end of the list addresses.add(new HostAddress(domain));