blob: 0b7bdbd2493bcff473df4c58b30660c116a4635a [file] [log] [blame]
Paul Stewarte6927402012-01-23 16:11:30 -08001// Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
Chris Masone88cbd5f2011-07-03 14:30:04 -07002// 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
Chris Masone877ff982011-09-21 16:18:24 -07007#include <vector>
8
Chris Masone2ae797d2011-08-23 20:41:00 -07009#include <base/file_path.h>
Paul Stewartc681fa02012-03-02 19:40:04 -080010#include <base/string_number_conversions.h>
Chris Masone2ae797d2011-08-23 20:41:00 -070011#include <base/stringprintf.h>
Chris Masone88cbd5f2011-07-03 14:30:04 -070012#include <chromeos/dbus/service_constants.h>
13
14#include "shill/adaptor_interfaces.h"
15#include "shill/control_interface.h"
16#include "shill/manager.h"
Paul Stewarte6927402012-01-23 16:11:30 -080017#include "shill/portal_detector.h"
Paul Stewartbf667612012-06-29 14:49:54 -070018#include "shill/resolver.h"
Chris Masoneaa482372011-09-14 16:40:37 -070019#include "shill/store_interface.h"
Chris Masone88cbd5f2011-07-03 14:30:04 -070020
Paul Stewartd0a3b812012-03-28 22:48:22 -070021using std::string;
Chris Masone877ff982011-09-21 16:18:24 -070022using std::vector;
23
Chris Masone88cbd5f2011-07-03 14:30:04 -070024namespace shill {
Chris Masoneaa482372011-09-14 16:40:37 -070025// static
Chris Masone7df0c672011-07-15 10:24:54 -070026const char DefaultProfile::kDefaultId[] = "default";
Chris Masoneaa482372011-09-14 16:40:37 -070027// static
28const char DefaultProfile::kStorageId[] = "global";
29// static
Paul Stewartd408fdf2012-05-07 17:15:57 -070030const char DefaultProfile::kStorageArpGateway[] = "ArpGateway";
31// static
Chris Masoneaa482372011-09-14 16:40:37 -070032const char DefaultProfile::kStorageCheckPortalList[] = "CheckPortalList";
33// static
Paul Stewartd32f4842012-01-11 16:08:13 -080034const char DefaultProfile::kStorageHostName[] = "HostName";
35// static
Chris Masoneaa482372011-09-14 16:40:37 -070036const char DefaultProfile::kStorageName[] = "Name";
37// static
38const char DefaultProfile::kStorageOfflineMode[] = "OfflineMode";
Paul Stewarte6927402012-01-23 16:11:30 -080039// static
40const char DefaultProfile::kStoragePortalURL[] = "PortalURL";
Paul Stewartc681fa02012-03-02 19:40:04 -080041// static
42const char DefaultProfile::kStoragePortalCheckInterval[] =
43 "PortalCheckInterval";
Paul Stewartbf667612012-06-29 14:49:54 -070044// static
45const char DefaultProfile::kStorageShortDNSTimeoutTechnologies[] =
46 "ShortDNSTimeoutTechnologies";
Chris Masone88cbd5f2011-07-03 14:30:04 -070047
Chris Masone2ae797d2011-08-23 20:41:00 -070048DefaultProfile::DefaultProfile(ControlInterface *control,
Chris Masone6791a432011-07-12 13:23:19 -070049 Manager *manager,
Chris Masone2ae797d2011-08-23 20:41:00 -070050 const FilePath &storage_path,
Paul Stewartd0a3b812012-03-28 22:48:22 -070051 const string &profile_id,
Chris Masone88cbd5f2011-07-03 14:30:04 -070052 const Manager::Properties &manager_props)
Paul Stewartd0a3b812012-03-28 22:48:22 -070053 : Profile(control, manager, Identifier(profile_id), "", true),
Chris Masoneaa482372011-09-14 16:40:37 -070054 storage_path_(storage_path),
Paul Stewartd0a3b812012-03-28 22:48:22 -070055 profile_id_(profile_id),
Chris Masoneaa482372011-09-14 16:40:37 -070056 props_(manager_props) {
mukesh agrawalde29fa82011-09-16 16:16:36 -070057 PropertyStore *store = this->mutable_store();
Paul Stewartd408fdf2012-05-07 17:15:57 -070058 store->RegisterConstBool(flimflam::kArpGatewayProperty,
59 &manager_props.arp_gateway);
Paul Stewartac4ac002011-08-26 12:04:26 -070060 store->RegisterConstString(flimflam::kCheckPortalListProperty,
Chris Masone88cbd5f2011-07-03 14:30:04 -070061 &manager_props.check_portal_list);
Paul Stewartac4ac002011-08-26 12:04:26 -070062 store->RegisterConstString(flimflam::kCountryProperty,
Chris Masone88cbd5f2011-07-03 14:30:04 -070063 &manager_props.country);
Paul Stewartac4ac002011-08-26 12:04:26 -070064 store->RegisterConstBool(flimflam::kOfflineModeProperty,
Chris Masone88cbd5f2011-07-03 14:30:04 -070065 &manager_props.offline_mode);
Paul Stewartac4ac002011-08-26 12:04:26 -070066 store->RegisterConstString(flimflam::kPortalURLProperty,
Chris Masone88cbd5f2011-07-03 14:30:04 -070067 &manager_props.portal_url);
Paul Stewartc681fa02012-03-02 19:40:04 -080068 store->RegisterConstInt32(shill::kPortalCheckIntervalProperty,
69 &manager_props.portal_check_interval_seconds);
Paul Stewartbf667612012-06-29 14:49:54 -070070 store->RegisterConstString(shill::kShortDNSTimeoutTechnologiesProperty,
71 &manager_props.short_dns_timeout_technologies);
Chris Masone88cbd5f2011-07-03 14:30:04 -070072}
73
74DefaultProfile::~DefaultProfile() {}
75
Paul Stewart870523b2012-01-11 17:00:42 -080076bool DefaultProfile::LoadManagerProperties(Manager::Properties *manager_props) {
Paul Stewartd408fdf2012-05-07 17:15:57 -070077 storage()->GetBool(kStorageId, kStorageArpGateway,
78 &manager_props->arp_gateway);
Paul Stewartd32f4842012-01-11 16:08:13 -080079 storage()->GetString(kStorageId, kStorageHostName, &manager_props->host_name);
Paul Stewart870523b2012-01-11 17:00:42 -080080 storage()->GetBool(kStorageId, kStorageOfflineMode,
81 &manager_props->offline_mode);
Paul Stewartf555cf82012-03-15 14:42:43 -070082 if (!storage()->GetString(kStorageId,
83 kStorageCheckPortalList,
84 &manager_props->check_portal_list)) {
85 manager_props->check_portal_list = PortalDetector::kDefaultCheckPortalList;
86 }
Paul Stewarte6927402012-01-23 16:11:30 -080087 if (!storage()->GetString(kStorageId, kStoragePortalURL,
88 &manager_props->portal_url)) {
89 manager_props->portal_url = PortalDetector::kDefaultURL;
90 }
Paul Stewartc681fa02012-03-02 19:40:04 -080091 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 }
Paul Stewartbf667612012-06-29 14:49:54 -070099 if (!storage()->GetString(kStorageId,
100 kStorageShortDNSTimeoutTechnologies,
101 &manager_props->short_dns_timeout_technologies)) {
102 manager_props->short_dns_timeout_technologies =
103 Resolver::kDefaultShortTimeoutTechnologies;
104 }
Paul Stewart870523b2012-01-11 17:00:42 -0800105 return true;
106}
107
Paul Stewartf284a232012-05-01 10:24:37 -0700108bool 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
Chris Masoneb9c00592011-10-06 13:10:39 -0700123bool DefaultProfile::Save() {
Paul Stewartd408fdf2012-05-07 17:15:57 -0700124 storage()->SetBool(kStorageId, kStorageArpGateway, props_.arp_gateway);
Paul Stewartd32f4842012-01-11 16:08:13 -0800125 storage()->SetString(kStorageId, kStorageHostName, props_.host_name);
Chris Masoneb9c00592011-10-06 13:10:39 -0700126 storage()->SetString(kStorageId, kStorageName, GetFriendlyName());
127 storage()->SetBool(kStorageId, kStorageOfflineMode, props_.offline_mode);
128 storage()->SetString(kStorageId,
129 kStorageCheckPortalList,
130 props_.check_portal_list);
Paul Stewarte6927402012-01-23 16:11:30 -0800131 storage()->SetString(kStorageId,
132 kStoragePortalURL,
133 props_.portal_url);
Paul Stewartc681fa02012-03-02 19:40:04 -0800134 storage()->SetString(kStorageId,
135 kStoragePortalCheckInterval,
136 base::IntToString(props_.portal_check_interval_seconds));
Paul Stewartbf667612012-06-29 14:49:54 -0700137 storage()->SetString(kStorageId,
138 kStorageShortDNSTimeoutTechnologies,
139 props_.short_dns_timeout_technologies);
Chris Masoneb9c00592011-10-06 13:10:39 -0700140 return Profile::Save();
Chris Masoneaa482372011-09-14 16:40:37 -0700141}
142
Darin Petkove7c6ad32012-06-29 10:22:09 +0200143bool DefaultProfile::UpdateDevice(const DeviceRefPtr &device) {
144 return device->Save(storage()) && storage()->Flush();
145}
146
Chris Masone2ae797d2011-08-23 20:41:00 -0700147bool DefaultProfile::GetStoragePath(FilePath *path) {
Paul Stewartd0a3b812012-03-28 22:48:22 -0700148 *path = storage_path_.Append(base::StringPrintf("%s.profile",
149 profile_id_.c_str()));
Chris Masone2ae797d2011-08-23 20:41:00 -0700150 return true;
151}
152
Chris Masone88cbd5f2011-07-03 14:30:04 -0700153} // namespace shill