- private class Host {
- private URI uri;
- private InetAddress ia;
- private Status status;
-
- public Host(InetAddress inetAddress, int port, String suffix) throws URISyntaxException {
- ia = inetAddress;
- uri = new URI(protocol,null,inetAddress.getHostAddress(),port,suffix,null,null);
- status = Status.UNTRIED;
- }
- }
-
- private class DLItem implements Item {
- public DLItem(int i) {
- cnt = i;
- }
+ @Override
+ public boolean refresh() {
+ try {
+ InetAddress[] ias = InetAddress.getAllByName(host);
+ Host[] temp = new Host[ias.length * (1 + endPort - startPort)];
+ int cnt = -1;
+ for (int j=startPort; j<=endPort; ++j) {
+ for (int i=0;i<ias.length;++i) {
+ temp[++cnt] = new Host(ias[i], j, suffix);
+ }
+ }
+ hosts = temp;
+ return true;
+ } catch (Exception e) {
+ access.log(Level.ERROR, e);
+ }
+ return false;
+ }
+
+ private String parseHostAndPorts(String aaf_locate, int _start, int defaultPort) throws LocatorException {
+ int slash, start;
+ 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) {
+ int right = aaf_locate.indexOf(']', left + 1);
+ if (right < 0) {
+ throw new LocatorException("Missing closing bracket in DNSLocator constructor. (requested URL " + aaf_locate + ')');
+ } else if (right == (left + 1)) {
+ throw new LocatorException("Missing ports in brackets in DNSLocator constructor. (requested URL " + aaf_locate + ')');
+ }
+ int dash = aaf_locate.indexOf('-', left + 1);
+ if (dash == (right - 1) || dash == (left + 1)) {
+ throw new LocatorException("Missing ports in brackets in DNSLocator constructor. (requested URL " + aaf_locate + ')');
+ }
+ if (dash < 0) {
+ startPort = endPort = Integer.parseInt(aaf_locate.substring(left + 1, right));
+ } else {
+ 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);
+ if (slash == start) {
+ throw new LocatorException("Missing port before '/' in DNSLocator constructor. (requested URL " + aaf_locate + ')');
+ }
+ if (slash < 0) {
+ 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;
+ }