blob: a3c8be86b348c06dc6eba8779d7de32c3b75307d [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"
Chris Masoneaa482372011-09-14 16:40:37 -070018#include "shill/store_interface.h"
Chris Masone88cbd5f2011-07-03 14:30:04 -070019
Paul Stewartd0a3b812012-03-28 22:48:22 -070020using std::string;
Chris Masone877ff982011-09-21 16:18:24 -070021using std::vector;
22
Chris Masone88cbd5f2011-07-03 14:30:04 -070023namespace shill {
Chris Masoneaa482372011-09-14 16:40:37 -070024// static
Chris Masone7df0c672011-07-15 10:24:54 -070025const char DefaultProfile::kDefaultId[] = "default";
Chris Masoneaa482372011-09-14 16:40:37 -070026// static
27const char DefaultProfile::kStorageId[] = "global";
28// static
29const char DefaultProfile::kStorageCheckPortalList[] = "CheckPortalList";
30// static
Paul Stewartd32f4842012-01-11 16:08:13 -080031const char DefaultProfile::kStorageHostName[] = "HostName";
32// static
Chris Masoneaa482372011-09-14 16:40:37 -070033const char DefaultProfile::kStorageName[] = "Name";
34// static
35const char DefaultProfile::kStorageOfflineMode[] = "OfflineMode";
Paul Stewarte6927402012-01-23 16:11:30 -080036// static
37const char DefaultProfile::kStoragePortalURL[] = "PortalURL";
Paul Stewartc681fa02012-03-02 19:40:04 -080038// static
39const char DefaultProfile::kStoragePortalCheckInterval[] =
40 "PortalCheckInterval";
Chris Masone88cbd5f2011-07-03 14:30:04 -070041
Chris Masone2ae797d2011-08-23 20:41:00 -070042DefaultProfile::DefaultProfile(ControlInterface *control,
Chris Masone6791a432011-07-12 13:23:19 -070043 Manager *manager,
Chris Masone2ae797d2011-08-23 20:41:00 -070044 const FilePath &storage_path,
Paul Stewartd0a3b812012-03-28 22:48:22 -070045 const string &profile_id,
Chris Masone88cbd5f2011-07-03 14:30:04 -070046 const Manager::Properties &manager_props)
Paul Stewartd0a3b812012-03-28 22:48:22 -070047 : Profile(control, manager, Identifier(profile_id), "", true),
Chris Masoneaa482372011-09-14 16:40:37 -070048 storage_path_(storage_path),
Paul Stewartd0a3b812012-03-28 22:48:22 -070049 profile_id_(profile_id),
Chris Masoneaa482372011-09-14 16:40:37 -070050 props_(manager_props) {
mukesh agrawalde29fa82011-09-16 16:16:36 -070051 PropertyStore *store = this->mutable_store();
Paul Stewartac4ac002011-08-26 12:04:26 -070052 store->RegisterConstString(flimflam::kCheckPortalListProperty,
Chris Masone88cbd5f2011-07-03 14:30:04 -070053 &manager_props.check_portal_list);
Paul Stewartac4ac002011-08-26 12:04:26 -070054 store->RegisterConstString(flimflam::kCountryProperty,
Chris Masone88cbd5f2011-07-03 14:30:04 -070055 &manager_props.country);
Paul Stewartac4ac002011-08-26 12:04:26 -070056 store->RegisterConstBool(flimflam::kOfflineModeProperty,
Chris Masone88cbd5f2011-07-03 14:30:04 -070057 &manager_props.offline_mode);
Paul Stewartac4ac002011-08-26 12:04:26 -070058 store->RegisterConstString(flimflam::kPortalURLProperty,
Chris Masone88cbd5f2011-07-03 14:30:04 -070059 &manager_props.portal_url);
Paul Stewartc681fa02012-03-02 19:40:04 -080060 store->RegisterConstInt32(shill::kPortalCheckIntervalProperty,
61 &manager_props.portal_check_interval_seconds);
Chris Masone88cbd5f2011-07-03 14:30:04 -070062}
63
64DefaultProfile::~DefaultProfile() {}
65
Paul Stewart870523b2012-01-11 17:00:42 -080066bool DefaultProfile::LoadManagerProperties(Manager::Properties *manager_props) {
Paul Stewartd32f4842012-01-11 16:08:13 -080067 storage()->GetString(kStorageId, kStorageHostName, &manager_props->host_name);
Paul Stewart870523b2012-01-11 17:00:42 -080068 storage()->GetBool(kStorageId, kStorageOfflineMode,
69 &manager_props->offline_mode);
Paul Stewartf555cf82012-03-15 14:42:43 -070070 if (!storage()->GetString(kStorageId,
71 kStorageCheckPortalList,
72 &manager_props->check_portal_list)) {
73 manager_props->check_portal_list = PortalDetector::kDefaultCheckPortalList;
74 }
Paul Stewarte6927402012-01-23 16:11:30 -080075 if (!storage()->GetString(kStorageId, kStoragePortalURL,
76 &manager_props->portal_url)) {
77 manager_props->portal_url = PortalDetector::kDefaultURL;
78 }
Paul Stewartc681fa02012-03-02 19:40:04 -080079 std::string check_interval;
80 if (!storage()->GetString(kStorageId, kStoragePortalCheckInterval,
81 &check_interval) ||
82 !base::StringToInt(check_interval,
83 &manager_props->portal_check_interval_seconds)) {
84 manager_props->portal_check_interval_seconds =
85 PortalDetector::kDefaultCheckIntervalSeconds;
86 }
Paul Stewart870523b2012-01-11 17:00:42 -080087 return true;
88}
89
Chris Masoneb9c00592011-10-06 13:10:39 -070090bool DefaultProfile::Save() {
Paul Stewartd32f4842012-01-11 16:08:13 -080091 storage()->SetString(kStorageId, kStorageHostName, props_.host_name);
Chris Masoneb9c00592011-10-06 13:10:39 -070092 storage()->SetString(kStorageId, kStorageName, GetFriendlyName());
93 storage()->SetBool(kStorageId, kStorageOfflineMode, props_.offline_mode);
94 storage()->SetString(kStorageId,
95 kStorageCheckPortalList,
96 props_.check_portal_list);
Paul Stewarte6927402012-01-23 16:11:30 -080097 storage()->SetString(kStorageId,
98 kStoragePortalURL,
99 props_.portal_url);
Paul Stewartc681fa02012-03-02 19:40:04 -0800100 storage()->SetString(kStorageId,
101 kStoragePortalCheckInterval,
102 base::IntToString(props_.portal_check_interval_seconds));
Chris Masone877ff982011-09-21 16:18:24 -0700103 vector<DeviceRefPtr>::iterator it;
104 for (it = manager()->devices_begin(); it != manager()->devices_end(); ++it) {
Chris Masoneb9c00592011-10-06 13:10:39 -0700105 if (!(*it)->Save(storage())) {
Chris Masone877ff982011-09-21 16:18:24 -0700106 LOG(ERROR) << "Could not save " << (*it)->UniqueName();
107 return false;
108 }
109 }
Chris Masoneb9c00592011-10-06 13:10:39 -0700110 return Profile::Save();
Chris Masoneaa482372011-09-14 16:40:37 -0700111}
112
Chris Masone2ae797d2011-08-23 20:41:00 -0700113bool DefaultProfile::GetStoragePath(FilePath *path) {
Paul Stewartd0a3b812012-03-28 22:48:22 -0700114 *path = storage_path_.Append(base::StringPrintf("%s.profile",
115 profile_id_.c_str()));
Chris Masone2ae797d2011-08-23 20:41:00 -0700116 return true;
117}
118
Chris Masone88cbd5f2011-07-03 14:30:04 -0700119} // namespace shill