default_profile.cc revision 036dba0c6641acdbe02d52260c6fa6dca84b1af2
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/link_monitor.h" 17#include "shill/manager.h" 18#include "shill/portal_detector.h" 19#include "shill/resolver.h" 20#include "shill/store_interface.h" 21 22using std::string; 23using std::vector; 24 25namespace shill { 26// static 27const char DefaultProfile::kDefaultId[] = "default"; 28// static 29const char DefaultProfile::kStorageId[] = "global"; 30// static 31const char DefaultProfile::kStorageArpGateway[] = "ArpGateway"; 32// static 33const char DefaultProfile::kStorageCheckPortalList[] = "CheckPortalList"; 34// static 35const char DefaultProfile::kStorageHostName[] = "HostName"; 36// static 37const char DefaultProfile::kStorageLinkMonitorTechnologies[] = 38 "LinkMonitorTechnologies"; 39// static 40const char DefaultProfile::kStorageName[] = "Name"; 41// static 42const char DefaultProfile::kStorageOfflineMode[] = "OfflineMode"; 43// static 44const char DefaultProfile::kStoragePortalURL[] = "PortalURL"; 45// static 46const char DefaultProfile::kStoragePortalCheckInterval[] = 47 "PortalCheckInterval"; 48// static 49const char DefaultProfile::kStorageShortDNSTimeoutTechnologies[] = 50 "ShortDNSTimeoutTechnologies"; 51 52DefaultProfile::DefaultProfile(ControlInterface *control, 53 Manager *manager, 54 const FilePath &storage_path, 55 const string &profile_id, 56 const Manager::Properties &manager_props) 57 : Profile(control, manager, Identifier(profile_id), "", true), 58 storage_path_(storage_path), 59 profile_id_(profile_id), 60 props_(manager_props) { 61 PropertyStore *store = this->mutable_store(); 62 store->RegisterConstBool(flimflam::kArpGatewayProperty, 63 &manager_props.arp_gateway); 64 store->RegisterConstString(flimflam::kCheckPortalListProperty, 65 &manager_props.check_portal_list); 66 store->RegisterConstString(flimflam::kCountryProperty, 67 &manager_props.country); 68 store->RegisterConstString(shill::kLinkMonitorTechnologiesProperty, 69 &manager_props.link_monitor_technologies); 70 store->RegisterConstBool(flimflam::kOfflineModeProperty, 71 &manager_props.offline_mode); 72 store->RegisterConstString(flimflam::kPortalURLProperty, 73 &manager_props.portal_url); 74 store->RegisterConstInt32(shill::kPortalCheckIntervalProperty, 75 &manager_props.portal_check_interval_seconds); 76 store->RegisterConstString(shill::kShortDNSTimeoutTechnologiesProperty, 77 &manager_props.short_dns_timeout_technologies); 78} 79 80DefaultProfile::~DefaultProfile() {} 81 82bool DefaultProfile::LoadManagerProperties(Manager::Properties *manager_props) { 83 storage()->GetBool(kStorageId, kStorageArpGateway, 84 &manager_props->arp_gateway); 85 storage()->GetString(kStorageId, kStorageHostName, &manager_props->host_name); 86 storage()->GetBool(kStorageId, kStorageOfflineMode, 87 &manager_props->offline_mode); 88 if (!storage()->GetString(kStorageId, 89 kStorageCheckPortalList, 90 &manager_props->check_portal_list)) { 91 manager_props->check_portal_list = PortalDetector::kDefaultCheckPortalList; 92 } 93 if (!storage()->GetString(kStorageId, 94 kStorageLinkMonitorTechnologies, 95 &manager_props->link_monitor_technologies)) { 96 manager_props->link_monitor_technologies = 97 LinkMonitor::kDefaultLinkMonitorTechnologies; 98 } 99 if (!storage()->GetString(kStorageId, kStoragePortalURL, 100 &manager_props->portal_url)) { 101 manager_props->portal_url = PortalDetector::kDefaultURL; 102 } 103 std::string check_interval; 104 if (!storage()->GetString(kStorageId, kStoragePortalCheckInterval, 105 &check_interval) || 106 !base::StringToInt(check_interval, 107 &manager_props->portal_check_interval_seconds)) { 108 manager_props->portal_check_interval_seconds = 109 PortalDetector::kDefaultCheckIntervalSeconds; 110 } 111 if (!storage()->GetString(kStorageId, 112 kStorageShortDNSTimeoutTechnologies, 113 &manager_props->short_dns_timeout_technologies)) { 114 manager_props->short_dns_timeout_technologies = 115 Resolver::kDefaultShortTimeoutTechnologies; 116 } 117 return true; 118} 119 120bool DefaultProfile::ConfigureService(const ServiceRefPtr &service) { 121 if (Profile::ConfigureService(service)) { 122 return true; 123 } 124 if (service->technology() == Technology::kEthernet) { 125 // Ethernet services should have an affinity towards the default profile, 126 // so even if a new Ethernet service has no known configuration, accept 127 // it anyway. 128 UpdateService(service); 129 service->set_profile(this); 130 return true; 131 } 132 return false; 133} 134 135bool DefaultProfile::Save() { 136 storage()->SetBool(kStorageId, kStorageArpGateway, props_.arp_gateway); 137 storage()->SetString(kStorageId, kStorageHostName, props_.host_name); 138 storage()->SetString(kStorageId, kStorageName, GetFriendlyName()); 139 storage()->SetBool(kStorageId, kStorageOfflineMode, props_.offline_mode); 140 storage()->SetString(kStorageId, 141 kStorageCheckPortalList, 142 props_.check_portal_list); 143 storage()->SetString(kStorageId, 144 kStorageLinkMonitorTechnologies, 145 props_.link_monitor_technologies); 146 storage()->SetString(kStorageId, 147 kStoragePortalURL, 148 props_.portal_url); 149 storage()->SetString(kStorageId, 150 kStoragePortalCheckInterval, 151 base::IntToString(props_.portal_check_interval_seconds)); 152 storage()->SetString(kStorageId, 153 kStorageShortDNSTimeoutTechnologies, 154 props_.short_dns_timeout_technologies); 155 return Profile::Save(); 156} 157 158bool DefaultProfile::UpdateDevice(const DeviceRefPtr &device) { 159 return device->Save(storage()) && storage()->Flush(); 160} 161 162bool DefaultProfile::GetStoragePath(FilePath *path) { 163 *path = storage_path_.Append(base::StringPrintf("%s.profile", 164 profile_id_.c_str())); 165 return true; 166} 167 168} // namespace shill 169