// Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef SHILL_DNS_CLIENT_FACTORY_H_
#define SHILL_DNS_CLIENT_FACTORY_H_

#include <string>
#include <vector>

#include <base/lazy_instance.h>

#include "shill/dns_client.h"
#include "shill/event_dispatcher.h"
#include "shill/ip_address.h"

namespace shill {

class DNSClientFactory {
 public:
  virtual ~DNSClientFactory();

  // This is a singleton. Use DNSClientFactory::GetInstance()->Foo()
  static DNSClientFactory *GetInstance();

  virtual DNSClient *CreateDNSClient(
      IPAddress::Family family,
      const std::string &interface_name,
      const std::vector<std::string> &dns_servers,
      int timeout_ms,
      EventDispatcher *dispatcher,
      const DNSClient::ClientCallback &callback);

 protected:
  DNSClientFactory();

 private:
  friend struct base::DefaultLazyInstanceTraits<DNSClientFactory>;

  DISALLOW_COPY_AND_ASSIGN(DNSClientFactory);
};

}  // namespace shill

#endif  // SHILL_DNS_CLIENT_FACTORY_H_
