default_profile.cc revision e692740c0623d4cb5d92d36214982ee45a03a5db
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/stringprintf.h>
11#include <chromeos/dbus/service_constants.h>
12
13#include "shill/adaptor_interfaces.h"
14#include "shill/control_interface.h"
15#include "shill/manager.h"
16#include "shill/portal_detector.h"
17#include "shill/store_interface.h"
18
19using std::vector;
20
21namespace shill {
22// static
23const char DefaultProfile::kDefaultId[] = "default";
24// static
25const char DefaultProfile::kStorageId[] = "global";
26// static
27const char DefaultProfile::kStorageCheckPortalList[] = "CheckPortalList";
28// static
29const char DefaultProfile::kStorageHostName[] = "HostName";
30// static
31const char DefaultProfile::kStorageName[] = "Name";
32// static
33const char DefaultProfile::kStorageOfflineMode[] = "OfflineMode";
34// static
35const char DefaultProfile::kStoragePortalURL[] = "PortalURL";
36
37DefaultProfile::DefaultProfile(ControlInterface *control,
38                               Manager *manager,
39                               const FilePath &storage_path,
40                               const Manager::Properties &manager_props)
41    : Profile(control, manager, Identifier(kDefaultId), "", true),
42      storage_path_(storage_path),
43      props_(manager_props) {
44  PropertyStore *store = this->mutable_store();
45  store->RegisterConstString(flimflam::kCheckPortalListProperty,
46                             &manager_props.check_portal_list);
47  store->RegisterConstString(flimflam::kCountryProperty,
48                             &manager_props.country);
49  store->RegisterConstBool(flimflam::kOfflineModeProperty,
50                           &manager_props.offline_mode);
51  store->RegisterConstString(flimflam::kPortalURLProperty,
52                             &manager_props.portal_url);
53}
54
55DefaultProfile::~DefaultProfile() {}
56
57bool DefaultProfile::LoadManagerProperties(Manager::Properties *manager_props) {
58  storage()->GetString(kStorageId, kStorageHostName, &manager_props->host_name);
59  storage()->GetBool(kStorageId, kStorageOfflineMode,
60                     &manager_props->offline_mode);
61  storage()->GetString(kStorageId,
62                       kStorageCheckPortalList,
63                       &manager_props->check_portal_list);
64  if (!storage()->GetString(kStorageId, kStoragePortalURL,
65                            &manager_props->portal_url)) {
66    manager_props->portal_url = PortalDetector::kDefaultURL;
67  }
68  return true;
69}
70
71bool DefaultProfile::Save() {
72  storage()->SetString(kStorageId, kStorageHostName, props_.host_name);
73  storage()->SetString(kStorageId, kStorageName, GetFriendlyName());
74  storage()->SetBool(kStorageId, kStorageOfflineMode, props_.offline_mode);
75  storage()->SetString(kStorageId,
76                       kStorageCheckPortalList,
77                       props_.check_portal_list);
78  storage()->SetString(kStorageId,
79                       kStoragePortalURL,
80                       props_.portal_url);
81  vector<DeviceRefPtr>::iterator it;
82  for (it = manager()->devices_begin(); it != manager()->devices_end(); ++it) {
83    if (!(*it)->Save(storage())) {
84      LOG(ERROR) << "Could not save " << (*it)->UniqueName();
85      return false;
86    }
87  }
88  return Profile::Save();
89}
90
91bool DefaultProfile::GetStoragePath(FilePath *path) {
92  *path = storage_path_.Append(base::StringPrintf("%s.profile", kDefaultId));
93  return true;
94}
95
96}  // namespace shill
97