default_profile.cc revision bf667617d573e3af4b808ed317b1d6ca04747ee4
1// Copyright (c) 2012 The Chromium OS Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "shill/default_profile.h" 6 7#include <vector> 8 9#include <base/file_path.h> 10#include <base/string_number_conversions.h> 11#include <base/stringprintf.h> 12#include <chromeos/dbus/service_constants.h> 13 14#include "shill/adaptor_interfaces.h" 15#include "shill/control_interface.h" 16#include "shill/manager.h" 17#include "shill/portal_detector.h" 18#include "shill/resolver.h" 19#include "shill/store_interface.h" 20 21using std::string; 22using std::vector; 23 24namespace shill { 25// static 26const char DefaultProfile::kDefaultId[] = "default"; 27// static 28const char DefaultProfile::kStorageId[] = "global"; 29// static 30const char DefaultProfile::kStorageArpGateway[] = "ArpGateway"; 31// static 32const char DefaultProfile::kStorageCheckPortalList[] = "CheckPortalList"; 33// static 34const char DefaultProfile::kStorageHostName[] = "HostName"; 35// static 36const char DefaultProfile::kStorageName[] = "Name"; 37// static 38const char DefaultProfile::kStorageOfflineMode[] = "OfflineMode"; 39// static 40const char DefaultProfile::kStoragePortalURL[] = "PortalURL"; 41// static 42const char DefaultProfile::kStoragePortalCheckInterval[] = 43 "PortalCheckInterval"; 44// static 45const char DefaultProfile::kStorageShortDNSTimeoutTechnologies[] = 46 "ShortDNSTimeoutTechnologies"; 47 48DefaultProfile::DefaultProfile(ControlInterface *control, 49 Manager *manager, 50 const FilePath &storage_path, 51 const string &profile_id, 52 const Manager::Properties &manager_props) 53 : Profile(control, manager, Identifier(profile_id), "", true), 54 storage_path_(storage_path), 55 profile_id_(profile_id), 56 props_(manager_props) { 57 PropertyStore *store = this->mutable_store(); 58 store->RegisterConstBool(flimflam::kArpGatewayProperty, 59 &manager_props.arp_gateway); 60 store->RegisterConstString(flimflam::kCheckPortalListProperty, 61 &manager_props.check_portal_list); 62 store->RegisterConstString(flimflam::kCountryProperty, 63 &manager_props.country); 64 store->RegisterConstBool(flimflam::kOfflineModeProperty, 65 &manager_props.offline_mode); 66 store->RegisterConstString(flimflam::kPortalURLProperty, 67 &manager_props.portal_url); 68 store->RegisterConstInt32(shill::kPortalCheckIntervalProperty, 69 &manager_props.portal_check_interval_seconds); 70 store->RegisterConstString(shill::kShortDNSTimeoutTechnologiesProperty, 71 &manager_props.short_dns_timeout_technologies); 72} 73 74DefaultProfile::~DefaultProfile() {} 75 76bool DefaultProfile::LoadManagerProperties(Manager::Properties *manager_props) { 77 storage()->GetBool(kStorageId, kStorageArpGateway, 78 &manager_props->arp_gateway); 79 storage()->GetString(kStorageId, kStorageHostName, &manager_props->host_name); 80 storage()->GetBool(kStorageId, kStorageOfflineMode, 81 &manager_props->offline_mode); 82 if (!storage()->GetString(kStorageId, 83 kStorageCheckPortalList, 84 &manager_props->check_portal_list)) { 85 manager_props->check_portal_list = PortalDetector::kDefaultCheckPortalList; 86 } 87 if (!storage()->GetString(kStorageId, kStoragePortalURL, 88 &manager_props->portal_url)) { 89 manager_props->portal_url = PortalDetector::kDefaultURL; 90 } 91 std::string check_interval; 92 if (!storage()->GetString(kStorageId, kStoragePortalCheckInterval, 93 &check_interval) || 94 !base::StringToInt(check_interval, 95 &manager_props->portal_check_interval_seconds)) { 96 manager_props->portal_check_interval_seconds = 97 PortalDetector::kDefaultCheckIntervalSeconds; 98 } 99 if (!storage()->GetString(kStorageId, 100 kStorageShortDNSTimeoutTechnologies, 101 &manager_props->short_dns_timeout_technologies)) { 102 manager_props->short_dns_timeout_technologies = 103 Resolver::kDefaultShortTimeoutTechnologies; 104 } 105 return true; 106} 107 108bool DefaultProfile::ConfigureService(const ServiceRefPtr &service) { 109 if (Profile::ConfigureService(service)) { 110 return true; 111 } 112 if (service->technology() == Technology::kEthernet) { 113 // Ethernet services should have an affinity towards the default profile, 114 // so even if a new Ethernet service has no known configuration, accept 115 // it anyway. 116 UpdateService(service); 117 service->set_profile(this); 118 return true; 119 } 120 return false; 121} 122 123bool DefaultProfile::Save() { 124 storage()->SetBool(kStorageId, kStorageArpGateway, props_.arp_gateway); 125 storage()->SetString(kStorageId, kStorageHostName, props_.host_name); 126 storage()->SetString(kStorageId, kStorageName, GetFriendlyName()); 127 storage()->SetBool(kStorageId, kStorageOfflineMode, props_.offline_mode); 128 storage()->SetString(kStorageId, 129 kStorageCheckPortalList, 130 props_.check_portal_list); 131 storage()->SetString(kStorageId, 132 kStoragePortalURL, 133 props_.portal_url); 134 storage()->SetString(kStorageId, 135 kStoragePortalCheckInterval, 136 base::IntToString(props_.portal_check_interval_seconds)); 137 storage()->SetString(kStorageId, 138 kStorageShortDNSTimeoutTechnologies, 139 props_.short_dns_timeout_technologies); 140 return Profile::Save(); 141} 142 143bool DefaultProfile::UpdateDevice(const DeviceRefPtr &device) { 144 return device->Save(storage()) && storage()->Flush(); 145} 146 147bool DefaultProfile::GetStoragePath(FilePath *path) { 148 *path = storage_path_.Append(base::StringPrintf("%s.profile", 149 profile_id_.c_str())); 150 return true; 151} 152 153} // namespace shill 154