This is an automated email from the ASF dual-hosted git repository. mblow pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/asterixdb.git
commit a548307b9f537d50aa0a385ecd5c5357249175d3 Author: Michael Blow <[email protected]> AuthorDate: Thu May 28 09:24:40 2020 -0400 [NO ISSUE][HYR][NET] NetworkUtil enhhancements Change-Id: I9c0d24100b653015233fc5a08554983d0a0185e1 Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/6544 Integration-Tests: Jenkins <[email protected]> Tested-by: Jenkins <[email protected]> Reviewed-by: Michael Blow <[email protected]> Reviewed-by: Ali Alsuliman <[email protected]> --- .../java/org/apache/hyracks/util/NetworkUtil.java | 32 +++++++++++++++++----- 1 file changed, 25 insertions(+), 7 deletions(-) diff --git a/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/NetworkUtil.java b/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/NetworkUtil.java index 1b56440..1780d9c 100644 --- a/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/NetworkUtil.java +++ b/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/NetworkUtil.java @@ -32,6 +32,7 @@ import java.util.Objects; import javax.net.ssl.SSLEngine; +import org.apache.commons.lang3.tuple.Pair; import org.apache.http.HttpHost; import org.apache.http.client.utils.URIBuilder; import org.apache.http.conn.util.InetAddressUtils; @@ -104,13 +105,30 @@ public class NetworkUtil { } public static String defaultPort(String maybeHostPort, int defaultPort) { - String encodedInput = encodeIPv6LiteralHost(maybeHostPort); - int lastColon = encodedInput.lastIndexOf(':'); - int closeBracket = encodedInput.lastIndexOf(']'); - if (lastColon > 0 && lastColon > closeBracket) { - return maybeHostPort; - } else { - return encodedInput + ":" + defaultPort; + Pair<String, Integer> decoded = extractHostPort(maybeHostPort, defaultPort); + return encodeIPv6LiteralHost(decoded.getLeft()) + ":" + decoded.getRight(); + } + + public static Pair<String, Integer> extractHostPort(String maybeHostPort, int defaultPort) { + try { + int lastColon = maybeHostPort.lastIndexOf(':'); + if (lastColon == -1) { + return Pair.of(maybeHostPort, defaultPort); + } + int closeBracket = maybeHostPort.lastIndexOf(']'); + if (closeBracket == -1) { + if (InetAddressUtils.isIPv6Address(maybeHostPort)) { + return Pair.of(maybeHostPort, defaultPort); + } + return Pair.of(maybeHostPort.substring(0, lastColon), + Integer.parseInt(maybeHostPort.substring(lastColon + 1))); + } else if (closeBracket < lastColon) { + return Pair.of(decodeIPv6LiteralHost(maybeHostPort.substring(0, lastColon)), + Integer.parseInt(maybeHostPort.substring(lastColon + 1))); + } + return Pair.of(decodeIPv6LiteralHost(maybeHostPort), defaultPort); + } catch (Exception e) { + throw new IllegalArgumentException(e); } }
