/******************************************************************************* * ============LICENSE_START==================================================== * * org.onap.aai * * =========================================================================== * * Copyright © 2017 AT&T Intellectual Property. All rights reserved. * * Copyright © 2017 Amdocs * * =========================================================================== * * Licensed under the Apache License, Version 2.0 (the "License"); * * you may not use this file except in compliance with the License. * * You may obtain a copy of the License at * * * * http://www.apache.org/licenses/LICENSE-2.0 * * * * Unless required by applicable law or agreed to in writing, software * * distributed under the License is distributed on an "AS IS" BASIS, * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * * See the License for the specific language governing permissions and * * limitations under the License. * * ============LICENSE_END==================================================== * * * * ECOMP is a trademark and service mark of AT&T Intellectual Property. * * ******************************************************************************/ package com.att.cadi.dnsloc; import java.io.IOException; import java.net.InetAddress; import java.net.URI; import java.net.URISyntaxException; import com.att.cadi.Access; import com.att.cadi.Access.Level; import com.att.cadi.Locator; import com.att.cadi.LocatorException; public class DNSLocator implements Locator { private static enum Status {UNTRIED, OK, INVALID, SLOW}; private static final int CHECK_TIME = 3000; private String host, protocol; private Access access; private Host[] hosts; private int startPort, endPort; private String suffix; public DNSLocator(Access access, String protocol, String host, String range) { this.host = host; this.protocol = protocol; this.access = access; int dash = range.indexOf('-'); if(dash<0) { startPort = endPort = Integer.parseInt(range); } else { startPort = Integer.parseInt(range.substring(0,dash)); endPort = Integer.parseInt(range.substring(dash + 1)); } refresh(); } @Override public URI get(Item item) throws LocatorException { return hosts[((DLItem)item).cnt].uri; } @Override public boolean hasItems() { for(Host h : hosts) { if(h.status==Status.OK) { return true; } } return false; } @Override public void invalidate(Item item) { DLItem di = (DLItem)item; hosts[di.cnt].status = Status.INVALID; } @Override public Item best() throws LocatorException { // not a good "best" for(int i=0;i