blob: 2aeb4a74251ec2644aa8fca39cddcb82ce3e226e [file] [log] [blame]
Paul Stewartbf667612012-06-29 14:49:54 -07001// Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
Paul Stewartb6063942011-08-05 10:17:29 -07002// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef SHILL_RESOLVER_
6#define SHILL_RESOLVER_
7
Hristo Stefanoved2c28c2011-11-29 15:37:30 -08008#include <string>
9#include <vector>
10
Paul Stewartb6063942011-08-05 10:17:29 -070011#include <base/file_path.h>
Paul Stewart0d2ada32011-08-09 17:01:57 -070012#include <base/lazy_instance.h>
Paul Stewartb6063942011-08-05 10:17:29 -070013#include <base/memory/ref_counted.h>
Paul Stewartb6063942011-08-05 10:17:29 -070014
15#include "shill/refptr_types.h"
16
17namespace shill {
18
19// This provides a static function for dumping the DNS information out
20// of an ipconfig into a "resolv.conf" formatted file.
21class Resolver {
22 public:
Paul Stewartbf667612012-06-29 14:49:54 -070023 enum TimeoutParameters {
24 kDefaultTimeout,
25 kShortTimeout
26 };
27
28 // The default comma-separated list of technologies for which short
29 // DNS timeouts should be enabled.
30 static const char kDefaultShortTimeoutTechnologies[];
31
Paul Stewart0d2ada32011-08-09 17:01:57 -070032 virtual ~Resolver();
33
Paul Stewartb6063942011-08-05 10:17:29 -070034 // Since this is a singleton, use Resolver::GetInstance()->Foo()
35 static Resolver *GetInstance();
36
Paul Stewartdd60e452011-08-08 11:38:36 -070037 virtual void set_path(const FilePath &path) { path_ = path; }
Paul Stewartb6063942011-08-05 10:17:29 -070038
Paul Stewart6f65c0b2012-09-11 14:57:32 -070039 // Install domain name service parameters, given a list of
40 // DNS servers in |dns_servers|, a list of DNS search suffixes in
41 // |domain_search| and a DNS timeout parameter in |timeout|.
Paul Stewartdd60e452011-08-08 11:38:36 -070042 virtual bool SetDNSFromLists(const std::vector<std::string> &dns_servers,
Paul Stewartbf667612012-06-29 14:49:54 -070043 const std::vector<std::string> &domain_search,
44 TimeoutParameters timeout);
Paul Stewartb6063942011-08-05 10:17:29 -070045
Paul Stewartbf667612012-06-29 14:49:54 -070046 // Remove any created domain name service file.
Paul Stewartdd60e452011-08-08 11:38:36 -070047 virtual bool ClearDNS();
Paul Stewartb6063942011-08-05 10:17:29 -070048
Paul Stewart0d2ada32011-08-09 17:01:57 -070049 protected:
Paul Stewartb6063942011-08-05 10:17:29 -070050 Resolver();
Paul Stewart0d2ada32011-08-09 17:01:57 -070051
52 private:
53 friend struct base::DefaultLazyInstanceTraits<Resolver>;
54 friend class ResolverTest;
Paul Stewartb6063942011-08-05 10:17:29 -070055
Paul Stewartbf667612012-06-29 14:49:54 -070056 static const char kDefaultTimeoutOptions[];
57 static const char kShortTimeoutOptions[];
58
Paul Stewartb6063942011-08-05 10:17:29 -070059 FilePath path_;
60
61 DISALLOW_COPY_AND_ASSIGN(Resolver);
62};
63
64} // namespace shill
65
66#endif // SHILL_RESOLVER_