-/*******************************************************************************\r
- * ============LICENSE_START==================================================\r
- * * org.onap.dmaap\r
- * * ===========================================================================\r
- * * Copyright © 2017 AT&T Intellectual Property. All rights reserved.\r
- * * ===========================================================================\r
- * * Licensed under the Apache License, Version 2.0 (the "License");\r
- * * you may not use this file except in compliance with the License.\r
- * * You may obtain a copy of the License at\r
- * * \r
- * * http://www.apache.org/licenses/LICENSE-2.0\r
- * * \r
- * * Unless required by applicable law or agreed to in writing, software\r
- * * distributed under the License is distributed on an "AS IS" BASIS,\r
- * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
- * * See the License for the specific language governing permissions and\r
- * * limitations under the License.\r
- * * ============LICENSE_END====================================================\r
- * *\r
- * * ECOMP is a trademark and service mark of AT&T Intellectual Property.\r
- * *\r
- ******************************************************************************/\r
-\r
-\r
-package org.onap.dmaap.datarouter.node;\r
-\r
-import java.util.*;\r
-import java.net.*;\r
-\r
-/**\r
- * Determine if an IP address is from a machine\r
- */\r
-public class IsFrom {\r
- private long nextcheck;\r
- private String[] ips;\r
- private String fqdn;\r
- /**\r
- * Configure the JVM DNS cache to have a 10 second TTL. This needs to be called very very early or it won't have any effect.\r
- */\r
- public static void setDNSCache() {\r
- java.security.Security.setProperty("networkaddress.cache.ttl", "10");\r
- }\r
- /**\r
- * Create an IsFrom for the specified fully qualified domain name.\r
- */\r
- public IsFrom(String fqdn) {\r
- this.fqdn = fqdn;\r
- }\r
- /**\r
- * Check if an IP address matches. If it has been more than\r
- * 10 seconds since DNS was last checked for changes to the\r
- * IP address(es) of this FQDN, check again. Then check\r
- * if the specified IP address belongs to the FQDN.\r
- */\r
- public synchronized boolean isFrom(String ip) {\r
- long now = System.currentTimeMillis();\r
- if (now > nextcheck) {\r
- nextcheck = now + 10000;\r
- Vector<String> v = new Vector<String>();\r
- try {\r
- InetAddress[] addrs = InetAddress.getAllByName(fqdn);\r
- for (InetAddress a: addrs) {\r
- v.add(a.getHostAddress());\r
- }\r
- } catch (Exception e) {\r
- }\r
- ips = v.toArray(new String[v.size()]);\r
- }\r
- for (String s: ips) {\r
- if (s.equals(ip)) {\r
- return(true);\r
- }\r
- }\r
- return(false);\r
- }\r
- /**\r
- * Return the fully qualified domain name\r
- */\r
- public String toString() {\r
- return(fqdn);\r
- }\r
-}\r
+/*******************************************************************************
+ * ============LICENSE_START==================================================
+ * * org.onap.dmaap
+ * * ===========================================================================
+ * * Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+ * * ===========================================================================
+ * * 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 org.onap.dmaap.datarouter.node;
+
+import org.apache.log4j.Logger;
+
+import java.io.IOException;
+import java.util.*;
+import java.net.*;
+
+/**
+ * Determine if an IP address is from a machine
+ */
+public class IsFrom {
+ private long nextcheck;
+ private String[] ips;
+ private String fqdn;
+ private static Logger logger = Logger.getLogger("org.onap.dmaap.datarouter.node.IsFrom");
+
+ /**
+ * Configure the JVM DNS cache to have a 10 second TTL. This needs to be called very very early or it won't have any effect.
+ */
+ public static void setDNSCache() {
+ java.security.Security.setProperty("networkaddress.cache.ttl", "10");
+ }
+
+ /**
+ * Create an IsFrom for the specified fully qualified domain name.
+ */
+ public IsFrom(String fqdn) {
+ this.fqdn = fqdn;
+ }
+
+ /**
+ * Check if an IP address matches. If it has been more than
+ * 10 seconds since DNS was last checked for changes to the
+ * IP address(es) of this FQDN, check again. Then check
+ * if the specified IP address belongs to the FQDN.
+ */
+ public synchronized boolean isFrom(String ip) {
+ long now = System.currentTimeMillis();
+ if (now > nextcheck) {
+ nextcheck = now + 10000;
+ ArrayList<String> hostAddrArray = new ArrayList<>();
+ try {
+ InetAddress[] addrs = InetAddress.getAllByName(fqdn);
+ for (InetAddress addr : addrs) {
+ hostAddrArray.add(addr.getHostAddress());
+ }
+ } catch (UnknownHostException e) {
+ logger.debug("IsFrom: UnknownHostEx: " + e.toString(), e);
+ }
+ ips = hostAddrArray.toArray(new String[0]);
+ logger.info("IsFrom: DNS ENTRIES FOR FQDN " + fqdn + " : " + Arrays.toString(ips));
+ }
+ for (String ipAddr : ips) {
+ if (ipAddr.equals(ip)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ synchronized boolean isReachable(String ip) {
+ try {
+ if (InetAddress.getByName(ip).isReachable(1000)) {
+ return true;
+ }
+ } catch (UnknownHostException e) {
+ logger.debug("IsFrom: UnknownHostEx: " + e.toString(), e);
+ } catch (IOException e) {
+ logger.debug("IsFrom: Failed to parse IP : " + ip + " : " + e.toString(), e);
+ }
+ return false;
+ }
+
+ /**
+ * Return the fully qualified domain name
+ */
+ public String toString() {
+ return (fqdn);
+ }
+}