From 3d032298a5f1f861bd8305e6e41e9969e4f680c7 Mon Sep 17 00:00:00 2001 From: Florian Schmaus Date: Sun, 2 Jul 2017 18:09:15 +0200 Subject: [PATCH] Deal with cases wehre HostAddress.fqdn is null Fixes SMACK-772 --- .../smack/util/dns/HostAddress.java | 22 ++++++++++++++++--- .../smack/tcp/XMPPTCPConnection.java | 2 +- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/smack-core/src/main/java/org/jivesoftware/smack/util/dns/HostAddress.java b/smack-core/src/main/java/org/jivesoftware/smack/util/dns/HostAddress.java index 9d7f263a1..66a6d018a 100644 --- a/smack-core/src/main/java/org/jivesoftware/smack/util/dns/HostAddress.java +++ b/smack-core/src/main/java/org/jivesoftware/smack/util/dns/HostAddress.java @@ -75,6 +75,22 @@ public class HostAddress { setException(e); } + public String getHost() { + if (fqdn != null) { + return fqdn; + } + + // In this case, the HostAddress(int, InetAddress) constructor must been used. We have no FQDN. And + // inetAddresses.size() must be exactly one. + assert inetAddresses.size() == 1; + return inetAddresses.get(0).getHostAddress(); + } + + /** + * Return the fully qualified domain name. This may return null in case there host address is only numeric, i.e. an IP address. + * + * @return the fully qualified domain name or null + */ public String getFQDN() { return fqdn; } @@ -109,7 +125,7 @@ public class HostAddress { @Override public String toString() { - return fqdn + ":" + port; + return getHost() + ":" + port; } @Override @@ -123,7 +139,7 @@ public class HostAddress { final HostAddress address = (HostAddress) o; - if (!fqdn.equals(address.fqdn)) { + if (!getHost().equals(address.getHost())) { return false; } return port == address.port; @@ -132,7 +148,7 @@ public class HostAddress { @Override public int hashCode() { int result = 1; - result = 37 * result + fqdn.hashCode(); + result = 37 * result + getHost().hashCode(); return result * 37 + port; } diff --git a/smack-tcp/src/main/java/org/jivesoftware/smack/tcp/XMPPTCPConnection.java b/smack-tcp/src/main/java/org/jivesoftware/smack/tcp/XMPPTCPConnection.java index f38e8987b..67ea8f631 100644 --- a/smack-tcp/src/main/java/org/jivesoftware/smack/tcp/XMPPTCPConnection.java +++ b/smack-tcp/src/main/java/org/jivesoftware/smack/tcp/XMPPTCPConnection.java @@ -563,7 +563,7 @@ public class XMPPTCPConnection extends AbstractXMPPConnection { } for (HostAddress hostAddress : hostAddresses) { Iterator inetAddresses = null; - String host = hostAddress.getFQDN(); + String host = hostAddress.getHost(); int port = hostAddress.getPort(); if (proxyInfo == null) { inetAddresses = hostAddress.getInetAddresses().iterator();