25 int address_type, std::string* address) {
28 for (
size_t i = 0u; i < address_list.size(); ++i) {
29 if (address_list[i].first == address_type) {
30 *address = address_list[i].second;
43 : download_manager_(download_manager),
44 external_download_manager_(external_download_manager) {}
50 bool* clear_handler) {
53 if (!addresses.empty()) {
57 *clear_handler =
false;
68 const std::string& resolv_file,
AddressList* addresses) {
72 FILE* f = std::fopen(resolv_file.c_str(),
"r");
75 "ResolvConfEventHandler - Could not open: %s",
82 std::vector<std::string> key_val =
SplitString(line,
' ');
83 if (key_val.size() == 2 && key_val[0] ==
"nameserver") {
87 addresses->push_back(std::make_pair(4, key_val[1]));
90 addresses->push_back(std::make_pair(6, key_val[1]));
103 const int address_type =
106 std::string new_address;
109 "ResolvConfEventhandler - resolv.conf file changed. "
110 "Setting new DNS address: %s",
111 new_address.c_str());
ResolvConfEventHandler(download::DownloadManager *download_manager, download::DownloadManager *external_download_manager)
static void SetDnsAddress(download::DownloadManager *download_manager, const AddressList &addresses)
download::DownloadManager * external_download_manager_
download::DownloadManager * download_manager_
void SetDnsServer(const std::string &address)
bool GetLineFile(FILE *f, std::string *line)
vector< string > SplitString(const string &str, char delim)
dns::IpPreference opt_ip_preference() const
bool GetFirstAddress(const ResolvConfEventHandler::AddressList &address_list, int address_type, std::string *address)
static void GetDnsAddresses(const std::string &resolv_file, AddressList *addresses)
std::vector< std::pair< int, std::string > > AddressList
virtual ~ResolvConfEventHandler()
virtual bool Handle(const std::string &file_path, file_watcher::Event event, bool *clear_handler)
CVMFS_EXPORT void LogCvmfs(const LogSource source, const int mask, const char *format,...)