1c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// 2c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// Copyright (C) 2011 The Android Open Source Project 3c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// 4c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// Licensed under the Apache License, Version 2.0 (the "License"); 5c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// you may not use this file except in compliance with the License. 6c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// You may obtain a copy of the License at 7c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// 8c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// http://www.apache.org/licenses/LICENSE-2.0 9c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// 10c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// Unless required by applicable law or agreed to in writing, software 11c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// distributed under the License is distributed on an "AS IS" BASIS, 12c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// See the License for the specific language governing permissions and 14c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// limitations under the License. 15c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// 16b6063942a712bc2825e78dc026a24a5d7b6131fcPaul Stewart 17c45688bb3881f0c2216e6ec0e19ebda0be33e871Ben Chan#ifndef SHILL_RESOLVER_H_ 18c45688bb3881f0c2216e6ec0e19ebda0be33e871Ben Chan#define SHILL_RESOLVER_H_ 19b6063942a712bc2825e78dc026a24a5d7b6131fcPaul Stewart 20ed2c28c6e3c0bc2f9d8832fee083868304178f08Hristo Stefanov#include <string> 21ed2c28c6e3c0bc2f9d8832fee083868304178f08Hristo Stefanov#include <vector> 22ed2c28c6e3c0bc2f9d8832fee083868304178f08Hristo Stefanov 23a0ddf46e466bd4ba3d20952f0a6988c680c1af14Ben Chan#include <base/files/file_path.h> 240d2ada3971075e78fb9900d0753c9ad94c15add4Paul Stewart#include <base/lazy_instance.h> 25b6063942a712bc2825e78dc026a24a5d7b6131fcPaul Stewart#include <base/memory/ref_counted.h> 26b6063942a712bc2825e78dc026a24a5d7b6131fcPaul Stewart 27b6063942a712bc2825e78dc026a24a5d7b6131fcPaul Stewart#include "shill/refptr_types.h" 28b6063942a712bc2825e78dc026a24a5d7b6131fcPaul Stewart 29b6063942a712bc2825e78dc026a24a5d7b6131fcPaul Stewartnamespace shill { 30b6063942a712bc2825e78dc026a24a5d7b6131fcPaul Stewart 31b6063942a712bc2825e78dc026a24a5d7b6131fcPaul Stewart// This provides a static function for dumping the DNS information out 32b6063942a712bc2825e78dc026a24a5d7b6131fcPaul Stewart// of an ipconfig into a "resolv.conf" formatted file. 33b6063942a712bc2825e78dc026a24a5d7b6131fcPaul Stewartclass Resolver { 34b6063942a712bc2825e78dc026a24a5d7b6131fcPaul Stewart public: 354d5efb7d5d130e3e6e52ab732127a273bcb95261Paul Stewart // The default comma-separated list of search-list prefixes that 364d5efb7d5d130e3e6e52ab732127a273bcb95261Paul Stewart // should be ignored when writing out a DNS configuration. These 374d5efb7d5d130e3e6e52ab732127a273bcb95261Paul Stewart // are usually preconfigured by a DHCP server and are not of real 384d5efb7d5d130e3e6e52ab732127a273bcb95261Paul Stewart // value to the user. This will release DNS bandwidth for searches 394d5efb7d5d130e3e6e52ab732127a273bcb95261Paul Stewart // we expect will have a better chance of getting what the user is 404d5efb7d5d130e3e6e52ab732127a273bcb95261Paul Stewart // looking for. 414d5efb7d5d130e3e6e52ab732127a273bcb95261Paul Stewart static const char kDefaultIgnoredSearchList[]; 424d5efb7d5d130e3e6e52ab732127a273bcb95261Paul Stewart 430d2ada3971075e78fb9900d0753c9ad94c15add4Paul Stewart virtual ~Resolver(); 440d2ada3971075e78fb9900d0753c9ad94c15add4Paul Stewart 45f407d5934100e6f2106aeeede46bafb0074cee35mukesh agrawal // Since this is a singleton, use Resolver::GetInstance()->Foo(). 461a212a6b98b22ad1d69652bb26a9e94138635476Paul Stewart static Resolver* GetInstance(); 47b6063942a712bc2825e78dc026a24a5d7b6131fcPaul Stewart 481a212a6b98b22ad1d69652bb26a9e94138635476Paul Stewart virtual void set_path(const base::FilePath& path) { path_ = path; } 49b6063942a712bc2825e78dc026a24a5d7b6131fcPaul Stewart 506f65c0b387f6dde8113f52745b758ca1c4f349bePaul Stewart // Install domain name service parameters, given a list of 5123ac6b72d44c446bca88175883ba26b39c5ed817mukesh agrawal // DNS servers in |dns_servers|, and a list of DNS search suffixes in 5223ac6b72d44c446bca88175883ba26b39c5ed817mukesh agrawal // |domain_search|. 531a212a6b98b22ad1d69652bb26a9e94138635476Paul Stewart virtual bool SetDNSFromLists(const std::vector<std::string>& dns_servers, 541a212a6b98b22ad1d69652bb26a9e94138635476Paul Stewart const std::vector<std::string>& domain_search); 55b6063942a712bc2825e78dc026a24a5d7b6131fcPaul Stewart 56bf667617d573e3af4b808ed317b1d6ca04747ee4Paul Stewart // Remove any created domain name service file. 57dd60e4549cc8898f7f517283eacc58f67570bd1fPaul Stewart virtual bool ClearDNS(); 58b6063942a712bc2825e78dc026a24a5d7b6131fcPaul Stewart 594d5efb7d5d130e3e6e52ab732127a273bcb95261Paul Stewart // Sets the list of ignored DNS search suffixes. This list will be used 604d5efb7d5d130e3e6e52ab732127a273bcb95261Paul Stewart // to filter the domain_search parameter of later SetDNSFromLists() calls. 614d5efb7d5d130e3e6e52ab732127a273bcb95261Paul Stewart virtual void set_ignored_search_list( 621a212a6b98b22ad1d69652bb26a9e94138635476Paul Stewart const std::vector<std::string>& ignored_list) { 634d5efb7d5d130e3e6e52ab732127a273bcb95261Paul Stewart ignored_search_list_ = ignored_list; 644d5efb7d5d130e3e6e52ab732127a273bcb95261Paul Stewart } 654d5efb7d5d130e3e6e52ab732127a273bcb95261Paul Stewart 660d2ada3971075e78fb9900d0753c9ad94c15add4Paul Stewart protected: 670d2ada3971075e78fb9900d0753c9ad94c15add4Paul Stewart Resolver(); 680d2ada3971075e78fb9900d0753c9ad94c15add4Paul Stewart 69b6063942a712bc2825e78dc026a24a5d7b6131fcPaul Stewart private: 700d2ada3971075e78fb9900d0753c9ad94c15add4Paul Stewart friend struct base::DefaultLazyInstanceTraits<Resolver>; 71b6063942a712bc2825e78dc026a24a5d7b6131fcPaul Stewart friend class ResolverTest; 72b6063942a712bc2825e78dc026a24a5d7b6131fcPaul Stewart 730e1cdeae24dd678a5fe27c840802582c0ca45ec0Albert Chaulk base::FilePath path_; 744d5efb7d5d130e3e6e52ab732127a273bcb95261Paul Stewart std::vector<std::string> ignored_search_list_; 75b6063942a712bc2825e78dc026a24a5d7b6131fcPaul Stewart 76b6063942a712bc2825e78dc026a24a5d7b6131fcPaul Stewart DISALLOW_COPY_AND_ASSIGN(Resolver); 77b6063942a712bc2825e78dc026a24a5d7b6131fcPaul Stewart}; 78b6063942a712bc2825e78dc026a24a5d7b6131fcPaul Stewart 79b6063942a712bc2825e78dc026a24a5d7b6131fcPaul Stewart} // namespace shill 80b6063942a712bc2825e78dc026a24a5d7b6131fcPaul Stewart 81c45688bb3881f0c2216e6ec0e19ebda0be33e871Ben Chan#endif // SHILL_RESOLVER_H_ 82