org.esigate.extension.http.CustomizableDNSResolver.java Source code

Java tutorial

Introduction

Here is the source code for org.esigate.extension.http.CustomizableDNSResolver.java

Source

/*
 * 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.
 *
 */
package org.esigate.extension.http;

import org.apache.http.impl.conn.SystemDefaultDnsResolver;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;

/**
 * DNS resolver that will resolve the host names against a collection held in-memory and fallback to an OS resolution
 * 
 * @author Alexis Thaveau on 26/01/16.
 */
public class CustomizableDNSResolver extends SystemDefaultDnsResolver {

    /**
     * Logger associated to this class.
     */
    private static final Logger LOG = LoggerFactory.getLogger(CustomizableDNSResolver.class);

    /**
     * In-memory collection that will hold the associations between a host name and an array of InetAddress instances.
     */
    private final Map<String, InetAddress[]> dnsMap = new HashMap<>();

    /**
     *
     */
    public CustomizableDNSResolver() {
    }

    /**
     * Associates the given array of IP addresses to the given host in this DNS overrider. The IP addresses are assumed
     * to be already resolved.
     * 
     * @param host
     *            The host name to be associated with the given IP.
     * @param ips
     *            array of IP addresses to be resolved by this DNS overrider to the given host name.
     */
    public void add(final String host, final InetAddress... ips) {
        dnsMap.put(host, ips);
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public InetAddress[] resolve(final String host) throws UnknownHostException {
        InetAddress[] resolvedAddresses = dnsMap.get(host);
        if (LOG.isInfoEnabled()) {
            LOG.info("Resolving {} to {}", host, Arrays.deepToString(resolvedAddresses));
        }
        if (resolvedAddresses == null) {
            resolvedAddresses = super.resolve(host);
        }
        return resolvedAddresses;
    }

}