buffet: Move privet options and state into buffet
Now it's a single binary and don't deserve separate configs and states.
BUG=brillo:1211,brillo:1212
CQ-DEPEND=CL:281024
TEST=`FEATURES=test emerge-gizmo buffet`
Change-Id: I5886d3092b8ccba57be5f2f6edf7ddbc36fd199b
Reviewed-on: https://chromium-review.googlesource.com/281018
Reviewed-by: Vitaly Buka <vitalybuka@chromium.org>
Tested-by: Vitaly Buka <vitalybuka@chromium.org>
Commit-Queue: Vitaly Buka <vitalybuka@chromium.org>
diff --git a/buffet/buffet.gyp b/buffet/buffet.gyp
index 1dd7218..3758634 100644
--- a/buffet/buffet.gyp
+++ b/buffet/buffet.gyp
@@ -52,13 +52,11 @@
'privet/ap_manager_client.cc',
'privet/cloud_delegate.cc',
'privet/constants.cc',
- 'privet/daemon_state.cc',
'privet/device_delegate.cc',
'privet/openssl_utils.cc',
'privet/peerd_client.cc',
'privet/privet_handler.cc',
'privet/privet_manager.cc',
- 'privet/privetd_conf_parser.cc',
'privet/security_manager.cc',
'privet/shill_client.cc',
'privet/wifi_bootstrap_manager.cc',
@@ -197,7 +195,6 @@
'notification/xmpp_channel_unittest.cc',
'notification/xmpp_iq_stanza_handler_unittest.cc',
'notification/xmpp_stream_parser_unittest.cc',
- 'privet/privetd_conf_parser_unittest.cc',
'privet/privet_handler_unittest.cc',
'privet/security_manager_unittest.cc',
'privet/wifi_ssid_generator_unittest.cc',
diff --git a/buffet/buffet_config.cc b/buffet/buffet_config.cc
index dc3ae97..c89bb2d 100644
--- a/buffet/buffet_config.cc
+++ b/buffet/buffet_config.cc
@@ -4,9 +4,12 @@
#include "buffet/buffet_config.h"
+#include <set>
+
#include <base/files/file_util.h>
#include <base/logging.h>
#include <base/strings/string_number_conversions.h>
+#include <chromeos/strings/string_utils.h>
#include "buffet/storage_impls.h"
#include "buffet/storage_interface.h"
@@ -72,6 +75,10 @@
const char kRefreshToken[] = "refresh_token";
const char kDeviceId[] = "device_id";
const char kRobotAccount[] = "robot_account";
+const char kWifiAutoSetupEnabled[] = "wifi_auto_setup_enabled";
+const char kEmbeddedCodePath[] = "embedded_code_path";
+const char kPairingModes[] = "pairing_modes";
+const char kLastConfiguredSsid[] = "last_configured_ssid";
} // namespace config_keys
@@ -128,6 +135,28 @@
if (store.GetString(config_keys::kBackupPollingPeriodMs, &polling_period_str))
CHECK(base::StringToUint64(polling_period_str, &backup_polling_period_ms_));
+ store.GetBoolean(config_keys::kWifiAutoSetupEnabled,
+ &wifi_auto_setup_enabled_);
+
+ std::string embedded_code_path;
+ if (store.GetString(config_keys::kEmbeddedCodePath, &embedded_code_path)) {
+ embedded_code_path_ = base::FilePath(embedded_code_path);
+ if (!embedded_code_path_.empty())
+ pairing_modes_ = {privetd::PairingType::kEmbeddedCode};
+ }
+
+ std::string modes_str;
+ if (store.GetString(config_keys::kPairingModes, &modes_str)) {
+ std::set<privetd::PairingType> pairing_modes;
+ for (const std::string& mode :
+ chromeos::string_utils::Split(modes_str, ",", true, true)) {
+ privetd::PairingType pairing_mode;
+ CHECK(privetd::StringToPairingType(mode, &pairing_mode));
+ pairing_modes.insert(pairing_mode);
+ }
+ pairing_modes_ = std::move(pairing_modes);
+ }
+
// Empty name set by user or server is allowed, still we expect some
// meaningfull config value.
store.GetString(config_keys::kName, &name_);
@@ -198,6 +227,9 @@
if (dict->GetString(config_keys::kRobotAccount, &tmp))
set_robot_account(tmp);
+ if (dict->GetString(config_keys::kLastConfiguredSsid, &tmp))
+ set_last_configured_ssid(tmp);
+
if (dict->GetString(config_keys::kDeviceId, &tmp))
set_device_id(tmp);
}
@@ -214,6 +246,7 @@
dict.SetString(config_keys::kRefreshToken, refresh_token_);
dict.SetString(config_keys::kDeviceId, device_id_);
dict.SetString(config_keys::kRobotAccount, robot_account_);
+ dict.SetString(config_keys::kLastConfiguredSsid, last_configured_ssid_);
dict.SetString(config_keys::kName, name_);
dict.SetString(config_keys::kDescription, description_);
dict.SetString(config_keys::kLocation, location_);
diff --git a/buffet/buffet_config.h b/buffet/buffet_config.h
index 43202a6..ac04d28 100644
--- a/buffet/buffet_config.h
+++ b/buffet/buffet_config.h
@@ -5,6 +5,7 @@
#ifndef BUFFET_BUFFET_CONFIG_H_
#define BUFFET_BUFFET_CONFIG_H_
+#include <set>
#include <string>
#include <vector>
@@ -13,6 +14,8 @@
#include <chromeos/errors/error.h>
#include <chromeos/key_value_store.h>
+#include "buffet/privet/security_delegate.h"
+
namespace buffet {
class StorageInterface;
@@ -77,6 +80,9 @@
void set_robot_account(const std::string& account) {
config_->robot_account_ = account;
}
+ void set_last_configured_ssid(const std::string& ssid) {
+ config_->last_configured_ssid_ = ssid;
+ }
void Commit();
@@ -101,18 +107,29 @@
return backup_polling_period_ms_;
}
+ bool wifi_auto_setup_enabled() const { return wifi_auto_setup_enabled_; }
+ const std::set<privetd::PairingType>& pairing_modes() const {
+ return pairing_modes_;
+ }
+ const base::FilePath& embedded_code_path() const {
+ return embedded_code_path_;
+ }
+
const std::string& name() const { return name_; }
const std::string& description() const { return description_; }
const std::string& location() const { return location_; }
- std::string local_anonymous_access_role() const {
+ const std::string& local_anonymous_access_role() const {
return local_anonymous_access_role_;
}
bool local_pairing_enabled() const { return local_pairing_enabled_; }
bool local_discovery_enabled() const { return local_discovery_enabled_; }
- std::string device_id() const { return device_id_; }
- std::string refresh_token() const { return refresh_token_; }
- std::string robot_account() const { return robot_account_; }
+ const std::string& device_id() const { return device_id_; }
+ const std::string& refresh_token() const { return refresh_token_; }
+ const std::string& robot_account() const { return robot_account_; }
+ const std::string& last_configured_ssid() const {
+ return last_configured_ssid_;
+ }
private:
bool Save();
@@ -135,9 +152,14 @@
uint64_t polling_period_ms_{7000}; // 7 seconds.
uint64_t backup_polling_period_ms_{30 * 60 * 1000}; // 30 minutes.
+ bool wifi_auto_setup_enabled_{true};
+ std::set<privetd::PairingType> pairing_modes_{privetd::PairingType::kPinCode};
+ base::FilePath embedded_code_path_;
+
std::string device_id_;
std::string refresh_token_;
std::string robot_account_;
+ std::string last_configured_ssid_;
// Serialization interface to save and load buffet state.
std::unique_ptr<StorageInterface> storage_;
diff --git a/buffet/buffet_config_unittest.cc b/buffet/buffet_config_unittest.cc
index e1b4b30..f2c7063 100644
--- a/buffet/buffet_config_unittest.cc
+++ b/buffet/buffet_config_unittest.cc
@@ -4,6 +4,8 @@
#include "buffet/buffet_config.h"
+#include <set>
+
#include <base/bind.h>
#include <gmock/gmock.h>
#include <gtest/gtest.h>
@@ -54,6 +56,11 @@
EXPECT_EQ("AAAAA", config_->model_id());
EXPECT_EQ("vendor", config_->device_kind());
EXPECT_EQ(7000, config_->polling_period_ms());
+ EXPECT_EQ(1800000, config_->backup_polling_period_ms());
+ EXPECT_TRUE(config_->wifi_auto_setup_enabled());
+ EXPECT_EQ(std::set<privetd::PairingType>{privetd::PairingType::kPinCode},
+ config_->pairing_modes());
+ EXPECT_EQ("", config_->embedded_code_path().value());
EXPECT_EQ("Developer device", config_->name());
EXPECT_EQ("", config_->description());
EXPECT_EQ("", config_->location());
@@ -63,6 +70,7 @@
EXPECT_EQ("", config_->device_id());
EXPECT_EQ("", config_->refresh_token());
EXPECT_EQ("", config_->robot_account());
+ EXPECT_EQ("", config_->last_configured_ssid());
}
TEST_F(BuffetConfigTest, LoadConfig) {
@@ -76,6 +84,11 @@
config_store.SetString("model_name", "conf_model_name");
config_store.SetString("model_id", "ABCDE");
config_store.SetString("polling_period_ms", "12345");
+ config_store.SetString("backup_polling_period_ms", "6589");
+ config_store.SetBoolean("wifi_auto_setup_enabled", false);
+ config_store.SetString("pairing_modes",
+ "pinCode,embeddedCode,ultrasound32,audible32");
+ config_store.SetString("embedded_code_path", "/conf_code");
config_store.SetString("name", "conf_name");
config_store.SetString("description", "conf_description");
config_store.SetString("location", "conf_location");
@@ -88,6 +101,7 @@
config_store.SetString("device_id", "conf_device_id");
config_store.SetString("refresh_token", "conf_refresh_token");
config_store.SetString("robot_account", "conf_robot_account");
+ config_store.SetString("last_configured_ssid", "conf_last_configured_ssid");
EXPECT_CALL(*this, OnConfigChanged(_)).Times(1);
config_->Load(config_store);
@@ -102,6 +116,13 @@
EXPECT_EQ("ABCDE", config_->model_id());
EXPECT_EQ("developmentBoard", config_->device_kind());
EXPECT_EQ(12345, config_->polling_period_ms());
+ EXPECT_EQ(6589, config_->backup_polling_period_ms());
+ EXPECT_FALSE(config_->wifi_auto_setup_enabled());
+ std::set<privetd::PairingType> pairing_types{
+ privetd::PairingType::kPinCode, privetd::PairingType::kEmbeddedCode,
+ privetd::PairingType::kUltrasound32, privetd::PairingType::kAudible32};
+ EXPECT_EQ(pairing_types, config_->pairing_modes());
+ EXPECT_EQ("/conf_code", config_->embedded_code_path().value());
EXPECT_EQ("conf_name", config_->name());
EXPECT_EQ("conf_description", config_->description());
EXPECT_EQ("conf_location", config_->location());
@@ -113,6 +134,7 @@
EXPECT_EQ(default_.device_id(), config_->device_id());
EXPECT_EQ(default_.refresh_token(), config_->refresh_token());
EXPECT_EQ(default_.robot_account(), config_->robot_account());
+ EXPECT_EQ(default_.last_configured_ssid(), config_->last_configured_ssid());
// Nothing should be saved yet.
EXPECT_JSON_EQ("{}", *storage_->Load());
@@ -135,6 +157,7 @@
'oauth_url': 'conf_oauth_url',
'refresh_token': '',
'robot_account': '',
+ 'last_configured_ssid': '',
'service_url': 'conf_service_url'
})";
EXPECT_JSON_EQ(expected, *storage_->Load());
@@ -155,6 +178,7 @@
'oauth_url': 'state_oauth_url',
'refresh_token': 'state_refresh_token',
'robot_account': 'state_robot_account',
+ 'last_configured_ssid': 'state_last_configured_ssid',
'service_url': 'state_service_url'
})";
storage_->Save(*buffet::unittests::CreateDictionaryValue(state));
@@ -176,6 +200,12 @@
EXPECT_EQ(default_.model_id(), config_->model_id());
EXPECT_EQ(default_.device_kind(), config_->device_kind());
EXPECT_EQ(default_.polling_period_ms(), config_->polling_period_ms());
+ EXPECT_EQ(default_.backup_polling_period_ms(),
+ config_->backup_polling_period_ms());
+ EXPECT_EQ(default_.wifi_auto_setup_enabled(),
+ config_->wifi_auto_setup_enabled());
+ EXPECT_EQ(default_.pairing_modes(), config_->pairing_modes());
+ EXPECT_EQ(default_.embedded_code_path(), config_->embedded_code_path());
EXPECT_EQ("state_name", config_->name());
EXPECT_EQ("state_description", config_->description());
EXPECT_EQ("state_location", config_->location());
@@ -185,6 +215,7 @@
EXPECT_EQ("state_device_id", config_->device_id());
EXPECT_EQ("state_refresh_token", config_->refresh_token());
EXPECT_EQ("state_robot_account", config_->robot_account());
+ EXPECT_EQ("state_last_configured_ssid", config_->last_configured_ssid());
// Nothing should be saved yet.
EXPECT_JSON_EQ("{}", *storage_->Load());
@@ -253,6 +284,9 @@
change.set_robot_account("set_account");
EXPECT_EQ("set_account", config_->robot_account());
+ change.set_last_configured_ssid("set_last_configured_ssid");
+ EXPECT_EQ("set_last_configured_ssid", config_->last_configured_ssid());
+
EXPECT_CALL(*this, OnConfigChanged(_)).Times(1);
change.Commit();
@@ -270,6 +304,7 @@
'oauth_url': 'set_oauth_url',
'refresh_token': 'set_token',
'robot_account': 'set_account',
+ 'last_configured_ssid': 'set_last_configured_ssid',
'service_url': 'set_service_url'
})";
EXPECT_JSON_EQ(expected, *storage_->Load());
diff --git a/buffet/device_registration_info.h b/buffet/device_registration_info.h
index 85b4b65..860a8fc 100644
--- a/buffet/device_registration_info.h
+++ b/buffet/device_registration_info.h
@@ -147,7 +147,9 @@
const std::string& service_url,
chromeos::ErrorPtr* error);
+ // TODO(vitalybuka): remove getters and pass config to dependent code.
const BuffetConfig& GetConfig() const { return *config_; }
+ BuffetConfig* GetMutableConfig() { return config_.get(); }
base::WeakPtr<DeviceRegistrationInfo> AsWeakPtr() {
return weak_factory_.GetWeakPtr();
diff --git a/buffet/manager.cc b/buffet/manager.cc
index bcb5cd6..184baa0 100644
--- a/buffet/manager.cc
+++ b/buffet/manager.cc
@@ -360,6 +360,14 @@
void Manager::UpdateWiFiBootstrapState(
privetd::WifiBootstrapManager::State state) {
+ if (auto wifi = privet_->GetWifiBootstrapManager()) {
+ const std::string& ssid{wifi->GetCurrentlyConnectedSsid()};
+ if (ssid != device_info_->GetConfig().last_configured_ssid()) {
+ BuffetConfig::Transaction change{device_info_->GetMutableConfig()};
+ change.set_last_configured_ssid(ssid);
+ }
+ }
+
switch (state) {
case privetd::WifiBootstrapManager::kDisabled:
dbus_adaptor_.SetWiFiBootstrapState("disabled");
diff --git a/buffet/privet/daemon_state.cc b/buffet/privet/daemon_state.cc
deleted file mode 100644
index cdbe808..0000000
--- a/buffet/privet/daemon_state.cc
+++ /dev/null
@@ -1,33 +0,0 @@
-// Copyright 2014 The Chromium OS Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "buffet/privet/daemon_state.h"
-
-namespace privetd {
-
-namespace state_key {
-
-const char kDeviceId[] = "id";
-const char kDeviceName[] = "name";
-const char kDeviceDescription[] = "description";
-const char kDeviceLocation[] = "description";
-
-const char kWifiHasBeenBootstrapped[] = "have_ever_been_bootstrapped";
-const char kWifiLastConfiguredSSID[] = "last_configured_ssid";
-
-} // namespace state_key
-
-DaemonState::DaemonState(const base::FilePath& state_path)
- : state_path_(state_path) {
-}
-
-void DaemonState::Init() {
- Load(state_path_);
-}
-
-void DaemonState::Save() const {
- KeyValueStore::Save(state_path_);
-}
-
-} // namespace privetd
diff --git a/buffet/privet/daemon_state.h b/buffet/privet/daemon_state.h
deleted file mode 100644
index a2d7616..0000000
--- a/buffet/privet/daemon_state.h
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright 2014 The Chromium OS Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef BUFFET_PRIVET_DAEMON_STATE_H_
-#define BUFFET_PRIVET_DAEMON_STATE_H_
-
-#include <base/files/file_path.h>
-#include <base/macros.h>
-#include <chromeos/key_value_store.h>
-
-namespace privetd {
-
-namespace state_key {
-
-extern const char kDeviceId[];
-extern const char kDeviceName[];
-extern const char kDeviceDescription[];
-extern const char kDeviceLocation[];
-
-extern const char kWifiHasBeenBootstrapped[];
-extern const char kWifiLastConfiguredSSID[];
-
-} // namespace state_key
-
-class DaemonState : public chromeos::KeyValueStore {
- public:
- explicit DaemonState(const base::FilePath& state_path);
- // Load initial state from disk.
- void Init();
- // Save state to disk.
- void Save() const;
-
- private:
- const base::FilePath state_path_;
-
- DISALLOW_COPY_AND_ASSIGN(DaemonState);
-};
-
-} // namespace privetd
-
-#endif // BUFFET_PRIVET_DAEMON_STATE_H_
diff --git a/buffet/privet/privet_manager.cc b/buffet/privet/privet_manager.cc
index 0365091..2f0dd37 100644
--- a/buffet/privet/privet_manager.cc
+++ b/buffet/privet/privet_manager.cc
@@ -28,14 +28,13 @@
#include <libwebserv/server.h>
#include "buffet/dbus_constants.h"
+#include "buffet/device_registration_info.h"
#include "buffet/privet/ap_manager_client.h"
#include "buffet/privet/cloud_delegate.h"
#include "buffet/privet/constants.h"
-#include "buffet/privet/daemon_state.h"
#include "buffet/privet/device_delegate.h"
#include "buffet/privet/peerd_client.h"
#include "buffet/privet/privet_handler.h"
-#include "buffet/privet/privetd_conf_parser.h"
#include "buffet/privet/security_manager.h"
#include "buffet/privet/shill_client.h"
#include "buffet/privet/wifi_bootstrap_manager.h"
@@ -49,8 +48,6 @@
using libwebserv::Request;
using libwebserv::Response;
-const char kDefaultStateFilePath[] = "/var/lib/privetd/privetd.state";
-
std::string GetFirstHeader(const Request& request, const std::string& name) {
std::vector<std::string> headers = request.GetHeader(name);
return headers.empty() ? std::string() : headers.front();
@@ -72,37 +69,22 @@
AsyncEventSequencer* sequencer) {
disable_security_ = options.disable_security;
- // TODO(vitalybuka): switch to BuffetConfig.
- base::FilePath state_path{privetd::kDefaultStateFilePath};
-
- state_store_.reset(new DaemonState(state_path));
- parser_.reset(new PrivetdConfigParser);
-
- chromeos::KeyValueStore config_store;
- if (!config_store.Load(options.config_path)) {
- LOG(ERROR) << "Failed to read privetd config file from "
- << options.config_path.value();
- } else {
- CHECK(parser_->Parse(config_store)) << "Failed to read configuration file.";
- }
- state_store_->Init();
-
device_ = DeviceDelegate::CreateDefault();
cloud_ = CloudDelegate::CreateDefault(device, command_manager, state_manager);
cloud_observer_.Add(cloud_.get());
- security_.reset(new SecurityManager(parser_->pairing_modes(),
- parser_->embedded_code_path(),
+ security_.reset(new SecurityManager(device->GetConfig().pairing_modes(),
+ device->GetConfig().embedded_code_path(),
disable_security_));
shill_client_.reset(new ShillClient(bus, options.device_whitelist));
shill_client_->RegisterConnectivityListener(
base::Bind(&Manager::OnConnectivityChanged, base::Unretained(this)));
ap_manager_client_.reset(new ApManagerClient(bus));
- if (parser_->wifi_auto_setup_enabled()) {
+ if (device->GetConfig().wifi_auto_setup_enabled()) {
VLOG(1) << "Enabling WiFi bootstrapping.";
- wifi_bootstrap_manager_.reset(
- new WifiBootstrapManager(state_store_.get(), shill_client_.get(),
- ap_manager_client_.get(), cloud_.get()));
+ wifi_bootstrap_manager_.reset(new WifiBootstrapManager(
+ device->GetConfig().last_configured_ssid(), shill_client_.get(),
+ ap_manager_client_.get(), cloud_.get()));
wifi_bootstrap_manager_->Init();
}
diff --git a/buffet/privet/privet_manager.h b/buffet/privet/privet_manager.h
index c54b6f0..72189c0 100644
--- a/buffet/privet/privet_manager.h
+++ b/buffet/privet/privet_manager.h
@@ -42,7 +42,6 @@
class DeviceDelegate;
class PeerdClient;
class PrivetHandler;
-class PrivetdConfigParser;
class SecurityManager;
class ShillClient;
class WifiBootstrapManager;
@@ -99,8 +98,6 @@
libwebserv::ProtocolHandler* protocol_handler);
bool disable_security_{false};
- std::unique_ptr<PrivetdConfigParser> parser_;
- std::unique_ptr<DaemonState> state_store_;
std::unique_ptr<CloudDelegate> cloud_;
std::unique_ptr<DeviceDelegate> device_;
std::unique_ptr<SecurityManager> security_;
diff --git a/buffet/privet/privetd_conf_parser.cc b/buffet/privet/privetd_conf_parser.cc
deleted file mode 100644
index ca08ec8..0000000
--- a/buffet/privet/privetd_conf_parser.cc
+++ /dev/null
@@ -1,62 +0,0 @@
-// Copyright 2015 The Chromium OS Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "buffet/privet/privetd_conf_parser.h"
-
-#include <base/logging.h>
-#include <base/strings/string_number_conversions.h>
-#include <chromeos/strings/string_utils.h>
-
-#include "buffet/privet/security_delegate.h"
-
-namespace privetd {
-
-namespace {
-
-const char kWiFiBootstrapMode[] = "wifi_bootstrapping_mode";
-const char kPairingModes[] = "pairing_modes";
-const char kEmbeddedCodePath[] = "embedded_code_path";
-
-const char kBootstrapModeOff[] = "off";
-
-} // namespace
-
-PrivetdConfigParser::PrivetdConfigParser()
- : wifi_auto_setup_enabled_{true}, pairing_modes_{PairingType::kPinCode} {}
-
-bool PrivetdConfigParser::Parse(const chromeos::KeyValueStore& config_store) {
- std::string wifi_bootstrap_mode_str;
- // TODO(vitalybuka): switch to boolean.
- if (config_store.GetString(kWiFiBootstrapMode, &wifi_bootstrap_mode_str)) {
- wifi_auto_setup_enabled_ = (wifi_bootstrap_mode_str != kBootstrapModeOff);
- }
-
- std::set<PairingType> pairing_modes;
- std::string embedded_code_path;
- if (config_store.GetString(kEmbeddedCodePath, &embedded_code_path)) {
- embedded_code_path_ = base::FilePath(embedded_code_path);
- if (!embedded_code_path_.empty())
- pairing_modes.insert(PairingType::kEmbeddedCode);
- }
-
- std::string modes_str;
- if (config_store.GetString(kPairingModes, &modes_str)) {
- for (const std::string& mode :
- chromeos::string_utils::Split(modes_str, ",", true, true)) {
- PairingType pairing_mode;
- if (!StringToPairingType(mode, &pairing_mode)) {
- LOG(ERROR) << "Invalid pairing mode : " << mode;
- return false;
- }
- pairing_modes.insert(pairing_mode);
- }
- }
-
- if (!pairing_modes.empty())
- pairing_modes_ = std::move(pairing_modes);
-
- return true;
-}
-
-} // namespace privetd
diff --git a/buffet/privet/privetd_conf_parser.h b/buffet/privet/privetd_conf_parser.h
deleted file mode 100644
index db3e6ec..0000000
--- a/buffet/privet/privetd_conf_parser.h
+++ /dev/null
@@ -1,37 +0,0 @@
-// Copyright 2015 The Chromium OS Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef BUFFET_PRIVET_PRIVETD_CONF_PARSER_H_
-#define BUFFET_PRIVET_PRIVETD_CONF_PARSER_H_
-
-#include <set>
-#include <string>
-
-#include <chromeos/key_value_store.h>
-
-namespace privetd {
-
-enum class PairingType;
-
-class PrivetdConfigParser final {
- public:
- PrivetdConfigParser();
-
- bool Parse(const chromeos::KeyValueStore& config_store);
-
- bool wifi_auto_setup_enabled() const { return wifi_auto_setup_enabled_; }
- const std::set<PairingType>& pairing_modes() { return pairing_modes_; }
- const base::FilePath& embedded_code_path() const {
- return embedded_code_path_;
- }
-
- private:
- bool wifi_auto_setup_enabled_;
- std::set<PairingType> pairing_modes_;
- base::FilePath embedded_code_path_;
-};
-
-} // namespace privetd
-
-#endif // BUFFET_PRIVET_PRIVETD_CONF_PARSER_H_
diff --git a/buffet/privet/privetd_conf_parser_unittest.cc b/buffet/privet/privetd_conf_parser_unittest.cc
deleted file mode 100644
index 86f0322..0000000
--- a/buffet/privet/privetd_conf_parser_unittest.cc
+++ /dev/null
@@ -1,87 +0,0 @@
-// Copyright 2015 The Chromium OS Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "buffet/privet/privetd_conf_parser.h"
-
-#include <map>
-#include <set>
-#include <string>
-#include <vector>
-
-#include <base/files/file_util.h>
-#include <base/files/scoped_temp_dir.h>
-#include <base/logging.h>
-#include <chromeos/strings/string_utils.h>
-#include <gtest/gtest.h>
-
-#include "buffet/privet/security_delegate.h"
-
-using chromeos::string_utils::Join;
-using chromeos::KeyValueStore;
-using std::map;
-using std::string;
-
-namespace privetd {
-
-namespace {
-
-const char kWiFiBootstrapMode[] = "wifi_bootstrapping_mode";
-const char kPairingModes[] = "pairing_modes";
-const char kEmbeddedCodePath[] = "embedded_code_path";
-
-} // namespace
-
-class PrivetdConfParserTest : public testing::Test {
- public:
- using ConfDict = map<string, string>;
-
- void SetUp() override {
- CHECK(temp_dir_.CreateUniqueTempDir());
- temp_file_ = temp_dir_.path().Append("temp.conf");
- }
-
- void FillKeyValueStore(const ConfDict& conf_dict, KeyValueStore* store) {
- std::vector<string> file_pieces;
- for (const auto& it : conf_dict) {
- file_pieces.push_back(Join("=", it.first, it.second));
- }
- string blob{Join("\n", file_pieces)};
- int expected_len = blob.length();
- CHECK(expected_len ==
- base::WriteFile(temp_file_, blob.c_str(), expected_len));
- CHECK(store->Load(temp_file_));
- }
-
- private:
- base::FilePath temp_file_;
- base::ScopedTempDir temp_dir_;
-};
-
-TEST_F(PrivetdConfParserTest, ShouldParseSettings) {
- const std::set<PairingType> kExpectedPairingModes{PairingType::kEmbeddedCode,
- PairingType::kPinCode};
- static const char kExpectedEmbeddedCodePath[]{"123ABC"};
- const ConfDict conf_dict{
- {kWiFiBootstrapMode, "automatic"},
- {kPairingModes, "pinCode"},
- {kEmbeddedCodePath, kExpectedEmbeddedCodePath},
- };
- KeyValueStore store;
- FillKeyValueStore(conf_dict, &store);
- PrivetdConfigParser parser;
- EXPECT_TRUE(parser.Parse(store));
- EXPECT_TRUE(parser.wifi_auto_setup_enabled());
- EXPECT_EQ(kExpectedPairingModes, parser.pairing_modes());
- EXPECT_EQ(kExpectedEmbeddedCodePath, parser.embedded_code_path().value());
-}
-
-TEST_F(PrivetdConfParserTest, CriticalDefaults) {
- PrivetdConfigParser parser;
- EXPECT_TRUE(parser.wifi_auto_setup_enabled());
- EXPECT_EQ(std::set<PairingType>{PairingType::kPinCode},
- parser.pairing_modes());
- EXPECT_TRUE(parser.embedded_code_path().empty());
-}
-
-} // namespace privetd
diff --git a/buffet/privet/wifi_bootstrap_manager.cc b/buffet/privet/wifi_bootstrap_manager.cc
index da91a11..975717c 100644
--- a/buffet/privet/wifi_bootstrap_manager.cc
+++ b/buffet/privet/wifi_bootstrap_manager.cc
@@ -22,14 +22,15 @@
const int kMonitorTimeoutSeconds = 120;
}
-WifiBootstrapManager::WifiBootstrapManager(DaemonState* state_store,
- ShillClient* shill_client,
- ApManagerClient* ap_manager_client,
- CloudDelegate* gcd)
- : state_store_(state_store),
- shill_client_(shill_client),
- ap_manager_client_(ap_manager_client),
- ssid_generator_(gcd, this) {
+WifiBootstrapManager::WifiBootstrapManager(
+ const std::string& last_configured_ssid,
+ ShillClient* shill_client,
+ ApManagerClient* ap_manager_client,
+ CloudDelegate* gcd)
+ : shill_client_{shill_client},
+ ap_manager_client_{ap_manager_client},
+ ssid_generator_{gcd, this},
+ last_configured_ssid_{last_configured_ssid} {
cloud_observer_.Add(gcd);
}
@@ -38,18 +39,11 @@
std::string ssid = ssid_generator_.GenerateSsid();
if (ssid.empty())
return; // Delay initialization until ssid_generator_ is ready.
- chromeos::KeyValueStore state_store;
- if (!state_store_->GetBoolean(state_key::kWifiHasBeenBootstrapped,
- &have_ever_been_bootstrapped_) ||
- !state_store_->GetString(state_key::kWifiLastConfiguredSSID,
- &last_configured_ssid_)) {
- have_ever_been_bootstrapped_ = false;
- }
UpdateConnectionState();
shill_client_->RegisterConnectivityListener(
base::Bind(&WifiBootstrapManager::OnConnectivityChange,
lifetime_weak_factory_.GetWeakPtr()));
- if (!have_ever_been_bootstrapped_) {
+ if (last_configured_ssid_.empty()) {
StartBootstrapping();
} else {
StartMonitoring();
@@ -76,7 +70,7 @@
}
UpdateState(kBootstrapping);
- if (have_ever_been_bootstrapped_) {
+ if (!last_configured_ssid_.empty()) {
// If we have been configured before, we'd like to periodically take down
// our AP and find out if we can connect again. Many kinds of failures are
// transient, and having an AP up prohibits us from connecting as a client.
@@ -202,13 +196,7 @@
void WifiBootstrapManager::OnConnectSuccess(const std::string& ssid) {
VLOG(1) << "Wifi was connected successfully";
- have_ever_been_bootstrapped_ = true;
last_configured_ssid_ = ssid;
- state_store_->SetBoolean(state_key::kWifiHasBeenBootstrapped,
- have_ever_been_bootstrapped_);
- state_store_->SetString(state_key::kWifiLastConfiguredSSID,
- last_configured_ssid_);
- state_store_->Save();
setup_state_ = SetupState{SetupState::kSuccess};
StartMonitoring();
}
@@ -259,9 +247,8 @@
void WifiBootstrapManager::UpdateConnectionState() {
connection_state_ = ConnectionState{ConnectionState::kUnconfigured};
- if (!have_ever_been_bootstrapped_) {
+ if (last_configured_ssid_.empty())
return;
- }
ServiceState service_state{shill_client_->GetConnectionState()};
switch (service_state) {
case ServiceState::kOffline:
diff --git a/buffet/privet/wifi_bootstrap_manager.h b/buffet/privet/wifi_bootstrap_manager.h
index 81812ef..5f0a4b5 100644
--- a/buffet/privet/wifi_bootstrap_manager.h
+++ b/buffet/privet/wifi_bootstrap_manager.h
@@ -16,7 +16,6 @@
#include <base/scoped_observer.h>
#include "buffet/privet/cloud_delegate.h"
-#include "buffet/privet/daemon_state.h"
#include "buffet/privet/privet_types.h"
#include "buffet/privet/wifi_delegate.h"
#include "buffet/privet/wifi_ssid_generator.h"
@@ -40,7 +39,7 @@
using StateListener = base::Callback<void(State)>;
- WifiBootstrapManager(DaemonState* state_store,
+ WifiBootstrapManager(const std::string& last_configured_ssid,
ShillClient* shill_client,
ApManagerClient* ap_manager_client,
CloudDelegate* gcd);
@@ -99,13 +98,11 @@
// It is not persisted to disk.
SetupState setup_state_{SetupState::kNone};
ConnectionState connection_state_{ConnectionState::kDisabled};
- DaemonState* state_store_;
ShillClient* shill_client_;
ApManagerClient* ap_manager_client_;
WifiSsidGenerator ssid_generator_;
std::vector<StateListener> state_listeners_;
- bool have_ever_been_bootstrapped_{false};
bool currently_online_{false};
std::string last_configured_ssid_;