X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=cadi%2Fclient%2Fsrc%2Fmain%2Fjava%2Forg%2Fonap%2Faaf%2Fcadi%2Flocator%2FDNSLocator.java;h=66ef4b1e190a0357c6148cc7500d48691d8c8d7e;hb=b5d91a686cede2fcf45e2b16e0141689d6c35a3f;hp=8357129fe407a0fc9e3bd0aca66a58786dcce52f;hpb=7e966914050e66219689001ff4ab601a49eef0ac;p=aaf%2Fauthz.git diff --git a/cadi/client/src/main/java/org/onap/aaf/cadi/locator/DNSLocator.java b/cadi/client/src/main/java/org/onap/aaf/cadi/locator/DNSLocator.java index 8357129f..66ef4b1e 100644 --- a/cadi/client/src/main/java/org/onap/aaf/cadi/locator/DNSLocator.java +++ b/cadi/client/src/main/java/org/onap/aaf/cadi/locator/DNSLocator.java @@ -60,23 +60,27 @@ public class DNSLocator implements Locator { if (aaf_locate==null) { throw new LocatorException("Null passed into DNSLocator constructor"); } - int start, port; + int start, defPort; if (aaf_locate.startsWith("https:")) { - protocol = "https:"; - start = 9; // https:// - port = 443; + protocol = "https"; + start = 8; // https:// + defPort = 443; } else if (aaf_locate.startsWith("http:")) { - protocol = "http:"; - start = 8; // http:// - port = 80; + protocol = "http"; + start = 7; // http:// + defPort = 80; } else { throw new LocatorException("DNSLocator accepts only https or http protocols. (requested URL " + aaf_locate + ')'); } - - parsePorts(aaf_locate.substring(start), port); + host = parseHostAndPorts(aaf_locate, start, defPort); + refresh(); } - @Override + public static DNSLocator create(Access access, String url) throws LocatorException { + return new DNSLocator(access, url); + } + + @Override public URI get(Item item) throws LocatorException { return hosts[((DLItem)item).cnt].uri; } @@ -159,10 +163,11 @@ public class DNSLocator implements Locator { return false; } - private void parsePorts(String aaf_locate, int defaultPort) throws LocatorException { + private String parseHostAndPorts(String aaf_locate, int _start, int defaultPort) throws LocatorException { int slash, start; - int colon = aaf_locate.indexOf(':'); + int colon = aaf_locate.indexOf(':',_start); if (colon > 0) { + host = aaf_locate.substring(_start,colon); start = colon + 1; int left = aaf_locate.indexOf('[', start); if (left > 0) { @@ -182,6 +187,10 @@ public class DNSLocator implements Locator { startPort = Integer.parseInt(aaf_locate.substring(left + 1, dash)); endPort = Integer.parseInt(aaf_locate.substring(dash + 1, right)); } + slash = aaf_locate.indexOf('/', start); + if(slash>=0) { + suffix = aaf_locate.substring(slash); + } } else { slash = aaf_locate.indexOf('/', start); @@ -192,11 +201,16 @@ public class DNSLocator implements Locator { startPort = endPort = Integer.parseInt(aaf_locate.substring(start)); } else { startPort = endPort = Integer.parseInt(aaf_locate.substring(start, slash)); + suffix = aaf_locate.substring(slash); } } } else { + slash = aaf_locate.indexOf('/', _start); + host = slash<_start?aaf_locate.substring(_start):aaf_locate.substring(_start,slash); startPort = endPort = defaultPort; - } + } + + return host; } private class Host { @@ -206,9 +220,13 @@ public class DNSLocator implements Locator { public Host(InetAddress inetAddress, int port, String suffix) throws URISyntaxException { ia = inetAddress; - uri = new URI(protocol,null,inetAddress.getHostAddress(),port,suffix,null,null); + uri = new URI(protocol,null,inetAddress.getCanonicalHostName(),port,suffix,null,null); status = Status.UNTRIED; } + + public String toString() { + return uri.toString() + " - " + status.name(); + } } private class DLItem implements Item {