ResolverManager.java :  » HTTP » cipango » org » cipango » dns » Java Open Source

Java Open Source » HTTP » cipango 
cipango » org » cipango » dns » ResolverManager.java
// ========================================================================
// Copyright 2011 NEXCOM Systems
// ------------------------------------------------------------------------
// 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.cipango.dns;

import java.io.IOException;
import java.net.SocketTimeoutException;
import java.util.ArrayList;
import java.util.List;

import org.cipango.dns.bio.UdpConnector;
import org.eclipse.jetty.util.component.AbstractLifeCycle;

public class ResolverManager extends AbstractLifeCycle
{

  private List<Resolver> _resolvers = new ArrayList<Resolver>();
  
  private List<DnsConnector> _connectors = new ArrayList<DnsConnector>();
  
  
  @Override
  protected void doStart() throws Exception
  {
    if (_resolvers.isEmpty())
    {
      sun.net.dns.ResolverConfiguration resolverConfiguration = sun.net.dns.ResolverConfiguration.open();
      @SuppressWarnings({ "unchecked" })
      List<String> servers = resolverConfiguration.nameservers();
      int attemps = resolverConfiguration.options().attempts();
      int retrans = resolverConfiguration.options().retrans();
      
      for (String server: servers)
      {
        Resolver resolver = new Resolver();
        resolver.setHost(server);
        if (attemps != -1)
          resolver.setAttemps(attemps);
        if (retrans != -1)
          resolver.setTimeout(retrans);
        addResolver(resolver);
      }
    }
    
    if (_connectors.isEmpty())
      addConnector(new UdpConnector());
  }
  
  public DnsMessage resolve(DnsMessage query) throws IOException
  {
    SocketTimeoutException e = null;
    for (Resolver resolver : _resolvers)
    {
      try
      {
        return resolver.resolve(query);
      }
      catch (SocketTimeoutException e1) {
        e = e1;
      }
    }
    if (e == null)
      throw new IOException("No resovler");
    else
      throw e;
  }
  
  public void addResolver(int index, Resolver resolver)
  {
    _resolvers.add(index, resolver);
    resolver.setResolverManager(this);
  }
  
  public void addResolver(Resolver resolver)
  {
    _resolvers.add(resolver);
    resolver.setResolverManager(this);
  }
  
  public void addConnector(DnsConnector connector)
  {
    _connectors.add(connector);
  }
  
  public DnsConnector getDefaultConnector()
  {
    return _connectors.get(0);
  }

  public List<Resolver> getResolvers()
  {
    return _resolvers;
  }

  public List<DnsConnector> getConnectors()
  {
    return _connectors;
  }
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.